3

空のブックと複数のデータ ブックに保存された Excel マクロがあります。

現在、マクロ ファイルと各データ ファイルを個別に開き、キーボード ショートカットを使用してそれぞれのマクロを実行しています。

いずれかを使用して、それらを開かずにすべてのデータブックでマクロを実行する方法はありますか?

  • バッチファイル、
  • VBA/VB スクリプト、
  • パワーシェル、
  • または似たようなものですか?
4

5 に答える 5

3

これを行う 1 つの方法は、マクロをファイル PERSONAL.XLSB に追加することです。このファイルは、Excel を起動するたびにバックグラウンドで読み込まれます。最初は、PERSONAL.XLSB ファイルは存在しません。このファイルを自動的に作成するには、「ダミー」マクロの記録を開始し (スプレッドシートの左下にある記録ボタンを使用)、「個人用マクロ ブック」を選択して保存します。マクロを記録した後、VBA を開くことができます。 [Alt]+[F10] でエディターを開くと、「ダミー」マクロを含む PERSONAL.XLSB ファイルが表示されます。このファイルを使用して、常に利用可能な一般的なマクロのロードを保存します。これらのマクロを独自のメニュー リボンに追加しました。この一般的なマクロ ファイルの欠点の 1 つは、Excel の複数のインスタンスを起動すると、PERSONAL. XLSB ファイルは、Excel インスタンス番号によって既に使用されています。1. この時点で新しいマクロを追加しない限り、これは問題ありません。

于 2012-05-23T08:12:13.750 に答える
0

他の方法、

Sub LoopAllWorkbooksOpened()

Dim wb As Workbook

For Each wb In Application.Workbooks
    Call YourMacroWithWorkbookParam(wb)
Next wb

End Sub

Sub YourMacroWithWorkbookParam(wb As Workbook)
    MsgBox wb.FullName
End Sub
于 2012-05-22T23:07:19.727 に答える
0

マクロを personal.xls または masterfile に保持し、vba を使用してワークブックをループし、マクロを実行する前にそれらをアクティブにすることができます。私の知る限り、まだ vba で開く必要があります。

次のようなものを使用できます。

sub LoopFiles
  Dim sFiles(1 to 10) as string  'You could also read this from a range in a masterfile
      sFiles(1) = "Filename1.xls"
         .
         .
      sFiles(10) = "Filename10.xls"
  Dim wb as Workbook
  Dim iCount as integer
     iCount = ubound(sFiles)
  Dim iCount2 as integer

  For iCount2 = 1 to iCount
     Workbooks(sFiles(iCount2)).open
     Workbooks(sFiles(iCount2)).activate
     Call YourMacro
     Workbooks(sFiles(iCount2)).close
  next iCount2
end sub
于 2012-05-22T19:51:59.197 に答える