Excel VBA質問箱 IV

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

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


16974 / 76732 ←次へ | 前へ→

【65220】Re:他のbookのユーザーフォーム
発言  ichinose  - 10/4/28(水) 6:19 -

引用なし
パスワード
   ▼たか さん:
おはようございます。

>・book1を開くと自動(Auto_Open)でUserForm1が起動します。
この表現では不十分です。
ユーザーフォームの起動 

表示するですか? 
それとも表示はしないけどLoadだけしたいのか?

更に表示だとして、モーダル、モードレス どちらで表示されたのですか?

ね?、この一行の説明では、こんな疑問を持ってしまいます。
解釈が違えば、コードも違ってきますよね?

上記の文章に加え、例えば

標準モジュールに

sub auto_open()
  userform1.show
end sub

というようにモーダルモードでUserform1を表示しています。

と記述すれば、私が申し上げた疑問はかなり解消されます。

閲覧者のPCには、何も入力されていないExcelが起動している
ここから、想像してみてください。
何を記述しないと質問の意図が伝わらないかを・・・。
私は、プログラミングする上でこれがすこぶる大事なこと思っています。


>book2のCommandButton1を押下するとbook1が開き、
>book1のCommandButton1を実行させたいのですが
>うまくいきません。
これも 「うまくいきません」というやったことを記述してください。

前述したように表示モードによっても方法は違ってくると思いますが、
モーダルモードで表示する という仕様だと仮定して・・・。

以下の例は、実行したいコマンドボタンを持つブック側で
パラメータにより、処理を変える方法です


二つの新規ブックを用意してください。

1 Book1.xls(他ブックから実行したいコマンドボタンを持つブック)

ユーザーフォームを一つ作成してください(UserForm1)
コマンドボタンを一つ配置してください(Commanbutton1)

このUserForm1のモジュールに

'=================================================================
Option Explicit
Public cmdexec As Boolean
'========================================================
Private Sub CommandButton1_Click()
  MsgBox ThisWorkbook.FullName
End Sub
'========================================================
Private Sub UserForm_Activate()
  CommandButton1.Value = cmdexec
End Sub

標準モジュールに

'=======================================================
Option Explicit
Sub auto_open(Optional cmexe As Boolean = False)
  Load UserForm1
  With UserForm1
    .cmdexec = cmexe
    .StartUpPosition = 0
    .Left = 0 '同じ名前のユーザーフォームなので表示位置を変更
    .Top = 0
    .Show
  End With
End Sub


2 Book2.xls(他ブックのコマンドボタン実行するブック)

ユーザーフォームを一つ作成してください(UserForm1)
コマンドボタンを一つ配置してください(Commanbutton1)

このUserForm1のモジュールに

'==========================================================
Option Explicit
Private Sub CommandButton1_Click()
  Dim bk As Workbook
  On Error Resume Next
  Set bk = Workbooks("book1.xls")
  If Err.Number <> 0 Then
    Set bk = Workbooks.Open(ThisWorkbook.Path & "\book1.xls")
  End If
  Application.Run bk.Name & "!auto_open", True
  On Error GoTo 0
End Sub

標準モジュールに

'================================================================
Option Explicit
Sub auto_open()
  UserForm1.Show
End Sub


コードは、以上です。

Book1.xlsとBook2.xlsは、同じフォルダ上に保存してください。
一度、二つのブックを閉じてください。

Book2.Xlsだけを開いてください。マクロが起動されれば、

UserForm1が中央に表示されます。コマンドボタンをクリックしてください。
Book1.Xlsが開いて、Book1.XlsのUserform1が表示されます。

次いで 「Book1.Xlsのフルパスがメッセージボックスで表示されます。」
これが、Book1.xls側のUserform1のコマンドボタンクリックの処理です。

Excel2002 SP3で確認しました。

0 hits

【65211】他のbookのユーザーフォーム たか 10/4/27(火) 15:30 質問
【65220】Re:他のbookのユーザーフォーム ichinose 10/4/28(水) 6:19 発言
【65222】Re:他のbookのユーザーフォーム たか 10/4/28(水) 9:37 質問
【65237】Re:他のbookのユーザーフォーム ichinose 10/4/29(木) 0:29 発言
【65256】Re:他のbookのユーザーフォーム たか 10/5/1(土) 9:14 発言
【65259】Re:他のbookのユーザーフォーム UO3 10/5/1(土) 21:18 発言
【65270】Re:他のbookのユーザーフォーム 熊谷隆史 10/5/4(火) 11:43 発言

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