Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5381 / 13644 ツリー ←次へ | 前へ→

【51104】コマンドボタンをマクロでクリック! もとあし 07/8/28(火) 16:42 質問[未読]
【51109】Re:コマンドボタンをマクロでクリック! Jaka 07/8/28(火) 17:39 発言[未読]
【51126】Re:コマンドボタンをマクロでクリック! もとあし 07/8/29(水) 9:55 お礼[未読]
【51128】Re:コマンドボタンをマクロでクリック! もとあし 07/8/29(水) 10:24 質問[未読]
【51132】Re:コマンドボタンをマクロでクリック! Blue 07/8/29(水) 11:22 発言[未読]
【51144】Re:コマンドボタンをマクロでクリック! ichinose 07/8/29(水) 21:49 発言[未読]
【51168】Re:コマンドボタンをマクロでクリック! もとあし 07/8/31(金) 15:52 お礼[未読]
【51133】Re:コマンドボタンをマクロでクリック! Jaka 07/8/29(水) 11:27 発言[未読]
【51169】Re:コマンドボタンをマクロでクリック! もとあし 07/8/31(金) 15:54 お礼[未読]
【51120】Re:コマンドボタンをマクロでクリック! ikeri 07/8/28(火) 22:52 回答[未読]
【51127】Re:コマンドボタンをマクロでクリック! もとあし 07/8/29(水) 10:01 お礼[未読]
【51170】Re:コマンドボタンをマクロでクリック! ちん 07/8/31(金) 19:57 回答[未読]

【51104】コマンドボタンをマクロでクリック!
質問  もとあし  - 07/8/28(火) 16:42 -

引用なし
パスワード
   こんにちは。

今、マクロAで別のブックを開き、そこに書き込みをする
というコードを書こうとしているのですが、
そのブック自体にもマクロBが存在し、Workbook_Openイベントで
ユーザーフォームが開いてしまいます。
そのユーザーフォームをキャンセル、またはユーザーフォームの
"CommandButton2"を押下をする処理を
マクロAより行いたいのですが、その記述がわかりません。

どなたか、教えていただけないでしょうか。

よろしくお願いします。

【51109】Re:コマンドボタンをマクロでクリック!
発言  Jaka  - 07/8/28(火) 17:39 -

引用なし
パスワード
   CommandButton2 = true
で、ボタンは押せますが、多ブックのフォームを触るには容易でないです。
ichinoseさんが書いたものが過去ログにありますから探してみてください。
って、題名忘れちゃったけど...。
簡単ですみません。

【51120】Re:コマンドボタンをマクロでクリック!
回答  ikeri  - 07/8/28(火) 22:52 -

引用なし
パスワード
   >そのブック自体にもマクロBが存在し、Workbook_Openイベントで
>ユーザーフォームが開いてしまいます。

Workbook_Openイベントが機能しないようにすればいいのでは。
EnableEventsプロパティでイベントを制御します。

【51126】Re:コマンドボタンをマクロでクリック!
お礼  もとあし  - 07/8/29(水) 9:55 -

引用なし
パスワード
   Jaka さん、こんにちは。

>CommandButton2 = true
>で、ボタンは押せますが、多ブックのフォームを触るには容易でないです。
>ichinoseさんが書いたものが過去ログにありますから探してみてください。
>って、題名忘れちゃったけど...。
>簡単ですみません。

レスありがとうございます。
【33679】Re:別のbookで開いたUserFormにデータを挿入したい
が、そうでしょうか?
残念ながら、マクロBの入っている別ブックは私が作成したものではないので、
基本的にその別ブックにマクロを仕込むことができません。。。
なので、できればマクロAだけで対処したかったのですが、他の方法も考えてみて、
無理でしたら、その別ブックの作成者と管理者にマクロ記述追加をお願いしてみようと思います。
ありがとうございました。

【51127】Re:コマンドボタンをマクロでクリック!
お礼  もとあし  - 07/8/29(水) 10:01 -

引用なし
パスワード
   ikeri さん、こんにちは。

>Workbook_Openイベントが機能しないようにすればいいのでは。
>EnableEventsプロパティでイベントを制御します。

レスありがとうございます。
EnableEvents! なるほど!と思いました!
ですが、実はWorkbook_Openイベント内にはUserFormを開く以外の処理も含まれており、
無効にはできないのです。。。(ToT)
Jakaさんのお返事で書かせていただきましたが、いろいろな方法も考え、無理なとき、
Jakaさんに紹介していただいた過去ログを参考にしたいと思います。
ですが、勉強になりました。
ありがとうございました。

【51128】Re:コマンドボタンをマクロでクリック!
質問  もとあし  - 07/8/29(水) 10:24 -

引用なし
パスワード
   すみません。一つ質問ですが、
>【33679】Re:別のbookで開いたUserFormにデータを挿入したい
はモーダレスの場合ですが、
モーダルの場合では、方法はないのでしょうか。

【51132】Re:コマンドボタンをマクロでクリック!
発言  Blue  - 07/8/29(水) 11:22 -

引用なし
パスワード
   ▼もとあし さん:
>すみません。一つ質問ですが、
>>【33679】Re:別のbookで開いたUserFormにデータを挿入したい
>はモーダレスの場合ですが、
>モーダルの場合では、方法はないのでしょうか。
おそらく不可能。

モードダルだと、そのUserFormが閉じるまで先に進みませんので、
いくら閉じる動作を記述したコードを用意してもそこまで動いてくれないので
無理です。


ただ、表示されるUserFormの押したいボタンのDefaultプロパティがTrueに
なっていれば、表示前にSendKeysでEnterキーを送れば閉じれるのではないか
と思います。


そうでなければ、対象のBookを編集するしか手はないかと。

【51133】Re:コマンドボタンをマクロでクリック!
発言  Jaka  - 07/8/29(水) 11:27 -

引用なし
パスワード
   ▼もとあし さん:
>はモーダレスの場合ですが、
>モーダルの場合では、方法はないのでしょうか。
モーダルだと他ブックにおいてもフォームがShowされた時点で
コード進行が止まるから無理だと思います。
(今さっきやってみました。)

やってみたコード。

開かれるブック側のコード

フォーム
Private Sub CommandButton1_Click()
Unload Me
End Sub

Thisworkbook
Private Sub Workbook_Open()
UserForm1.Show
End Sub

標準モジュール
Function UsrFm() As Object
Set UsrFm = UserForm1
End Function


開く方のコード

Sub 開く()
Dim UFm As Object
bkNm = "test1.xls"
Bkpas = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & bkNm
'Workbooks.Open Bkpas
'MCR = "'" & bkNm & "'!UsrFm"

MCR = "'" & Bkpas & "'!UsrFm"

Set UFm = Application.Run(MCR)
UFm.CommandButton1 = True
MsgBox 1
DoEvents
Set UFm = Nothing
End Sub

【51144】Re:コマンドボタンをマクロでクリック!
発言  ichinose  - 07/8/29(水) 21:49 -

引用なし
パスワード
   こんばんは。

>
>ただ、表示されるUserFormの押したいボタンのDefaultプロパティがTrueに
>なっていれば、表示前にSendKeysでEnterキーを送れば閉じれるのではないか
>と思います。
Alt+F4でユーザーフォームを閉じることが出来ますから、

sub main()
  Dim bk As Workbook
  SendKeys "%{F4}"
  Set bk = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
'               ↑Workbook_Openイベントマクロを含むブック
end sub

なんてコードで条件が揃えば出来そうですが・・・。
Workbook_Openイベント内で


doevents


userform1.show

なんてコードだと正しくユーザーフォームを閉じることは出来ません
(Excelそのものが終了してしまいます)

ちょっと安定感が悪いので私は、
実務では仮に成功しても使いません、たぶん。


Book2.Xls(呼び出し側)のコードが変更出来るのなら・・・、


ThisworkbookのWorkbook_Open イベントではなく、

標準モジュールのAuto_Openでブックを開いた直後に実行するコードを定義します。

標準モジュールには

'==================================================
Sub auto_open(Optional frmhide As Boolean = False)
  
  With ThisWorkbook.Worksheets(1).Range("a1")
    .Value = Date
    .NumberFormatLocal = "yyyy/mm/dd"
    End With
'   ↑これがユーザーフォーム表示する以外の処理の例
  If frmhide = False Then UserForm1.Show
End Sub


呼び出し元では

'=========================================================
Sub main()
  Dim bk As Workbook
  Set bk = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
  Application.Run bk.Name & "!auto_open", True
End Sub

こんなコードです。

一例です。検討してみてください。

【51168】Re:コマンドボタンをマクロでクリック!
お礼  もとあし  - 07/8/31(金) 15:52 -

引用なし
パスワード
   Blueさん、
ichinose さん
こんにちは。

ありがとうございます。

>>ただ、表示されるUserFormの押したいボタンのDefaultプロパティがTrueに
>>なっていれば、表示前にSendKeysでEnterキーを送れば閉じれるのではないか
>>と思います。
>Alt+F4でユーザーフォームを閉じる

SendKeyのことは考えたのですが、どこに記述すればいいのか。キーは何なのか。
が分かりませんでした。Open前なのですね。試してみます。

>sub main()
>  Dim bk As Workbook
>  SendKeys "%{F4}"
>  Set bk = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
>'               ↑Workbook_Openイベントマクロを含むブック
>end sub

また、別作者のブックの方もコードを変更していただけそうです。

>標準モジュールには
>
>'==================================================
>Sub auto_open(Optional frmhide As Boolean = False)
>  
>  With ThisWorkbook.Worksheets(1).Range("a1")
>    .Value = Date
>    .NumberFormatLocal = "yyyy/mm/dd"
>    End With
>'   ↑これがユーザーフォーム表示する以外の処理の例
>  If frmhide = False Then UserForm1.Show
>End Sub
>
>
>呼び出し元では
>
>'=========================================================
>Sub main()
>  Dim bk As Workbook
>  Set bk = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
>  Application.Run bk.Name & "!auto_open", True
>End Sub

>一例です。検討してみてください。
はい!さっそく試させていただきます。

ありがとうございました。

【51169】Re:コマンドボタンをマクロでクリック!
お礼  もとあし  - 07/8/31(金) 15:54 -

引用なし
パスワード
   Jaka さん、こんにちは。

>モーダルだと他ブックにおいてもフォームがShowされた時点で
>コード進行が止まるから無理だと思います。

そうなんです。。。
これで、かなり考えてしまいました。
基本的には無理なのですね。
ichinoseさんのコードで、いろいろ試してみたいと思います。

ありがとうございました。

【51170】Re:コマンドボタンをマクロでクリック!
回答  ちん  - 07/8/31(金) 19:57 -

引用なし
パスワード
   こんばんは、ちんといいます。

マクロBのWorkBook_Openイベントでユーザーフォームを起動する前に、
マクロAのExcelが起動しているかをチェックしてみては・・・

  wkName2 = "マクロA.xls"
  
  Dim wb As Workbook
  For Each wb In Workbooks
   If wb.Name = wkName2 Then  '*** 起動しているExcelをチェック
    wb.Activate
    Exit For
   End If
  Next
  If ActiveWorkbook.Name <> wkName2 Then
   '*** マクロAは起動していない。
  Else
   '*** マクロAは起動中!!
  End If
  
以上、参考までに・・・

5381 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free