|
▼たか さん:
おはようございます。
>・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で確認しました。
|
|