2

別のブックにあるコマンド ボタンを「クリック」するマクロを作成しようとしています。それは可能ですか?その他のワークブック内のコードを変更せずに?

4

7 に答える 7

1

プログラムでボタンをクリックする代わりに、ボタンにリンクされたマクロをコードから直接実行することができます。

まず、ボタンがクリックされたときに実行されるマクロの名前を見つける必要があります。

これを行うには、コマンドボタンが含まれているブックを開きます。

コマンドボタンを右クリックして、[マクロの割り当て]を選択します

マクロの割り当て」ダイアログが表示されます。

ダイアログの上部にある[マクロ名]ボックスにフルネームをメモします。

[ OK ]ボタンをクリックします。

コードを呼び出す必要があるブック内のコードは、次のようになります。

Sub Run_Macro()

    Workbooks.Open Filename:="C:\Book1.xls"
'Open the workbook containing the command button
'Change  the path and filename as required

    Application.Run "Book1.xls!Macro1"
'Run the macro 
'Change the filename and macro name as required

'If the macro is attached to a worksheet rather than a module, the code would be
'Application.Run "Book1.xls!Sheet1.Macro1"

End Sub
于 2008-09-24T23:55:31.693 に答える
1

そのために使用できますApplication.Run

Run "OtherWorkbook.xls!MyOtherMacro"
于 2008-09-24T22:31:14.550 に答える
0

シートではなくワークブックを意味しますか?とにかく、「フォルダ内のすべてのブックをループして、それぞれに対して操作を実行したい場合」

別のシートにアクセスする場合は、次のようにします。

Worksheets("MySheet").YourMethod()
于 2008-09-24T22:31:51.037 に答える
0

上記と同様の問題があり、理解するのに時間がかかりましたが、これですべてです。

Sheet1 で、次のボタンを作成しました。

    Private Sub cmdRefreshAll_Click()
         Dim SheetName As String

         SheetName = "Mon"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

         SheetName = "Tue"
         Worksheets(SheetName).Activate
         ActiveSheet.cmdRefresh_Click

'    "I repeated the above code to loop through a worksheet for every day of the week"

    End Sub

次に、それを機能させるためのインポート ビットを、他のワークシートのコードに移動して、Private から Public に変更する必要があります。

これまでのところ、バグは発生していません。

于 2015-10-01T16:53:27.480 に答える
0

いいえ:

これは簡単です:

  1. があるワークシート ABC でPrivate Sub xyz_Click()、新しい public サブルーチンを追加します。

    Public Sub ForceClickOnBouttonXYZ()
        Call xyz_Click
    End Sub
    
  2. 他のワークシートまたはモジュールに、次のコードを追加します。

    Sheets("ABC").Activate
    Call Sheets("ABC").ForceClickOnBouttonXYZ
    

それだ!!!画面がちらついたりアクティビティを表示したりしたくない場合は、ルーチンApplication.ScreenUpdating = Falseを呼び出す前に を設定し、その後すぐに設定します。Sheets("ABC").ForceClickOnBouttonXYZApplication.ScreenUpdating = True

于 2010-04-14T19:29:28.710 に答える
-1

ボタンのクリック イベントは通常、他のワークブックのプライベート メソッドであるため、コードを使用してこれを行う明確な方法はありません。

ただし、ワークブックを開いて必要なコントロールを見つけ、それをアクティブにしてスペース文字を送信する (ボタンを押すのと同じ) ことにより、VBA コードのクリックを自動化できます。

これはほぼ間違いなく恐ろしい考えであり、おそらくあなたとあなたの子孫に不幸以外の何ものももたらさないでしょう. より良い解決策を見つけることをお勧めしますが、当面はこれでうまくいくようです...

Public Sub RunButton(workbookName As String, worksheetName As String, controlName As String)
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = Workbooks.Open(workbookName)
    wkb.Activate
    Dim obj As OLEObject
    For Each wks In wkb.Worksheets
        If wks.Name = worksheetName Then
            wks.Activate
            For Each obj In wks.OLEObjects
                If (obj.Name = controlName) Then
                    obj.Activate
                    SendKeys (" ")
                End If
            Next obj
        End If
    Next wks
End Sub
于 2008-09-24T22:53:45.307 に答える