2

いくつかのことを行うバッチファイルがあります。最後のステップは、Excelドキュメントを開き、それに含まれるマクロを実行して、ファイルの内容を更新することです。マクロはボタンをクリックするだけで完全に実行されますが、.batファイルを実行するときにすべて実行する必要があります。

マクロをopenイベントにアタッチして、マクロを開いたときに実行されるようにすることはできますが、batファイルを実行したときにのみ自動的に更新され、Thingを開くたびに更新されることはありません。

たぶん、パラメーターを渡して、それが.batから実行されたことを知らせることができますか?またはExcelコマンドで直接実行しますか?

like this?
run excel.exe /runMacro "mymacro"   

必要なものがどこにも見つかりません、ありがとう。

4

2 に答える 2

1

私のバージョンの Excel 2013 (15.0.4649.1000 64 ビット) では、次のコードを書く必要がありました。

#If VBA7 Then
 Private Declare PtrSafe Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As LongPtr
 Private Declare PtrSafe Function lstrlenW Lib "kernel32" (ByVal lpString As LongPtr) As Long
 Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As LongPtr)
#Else
' Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
' Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
' Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
#End If


#If VBA7 Then
 Function CmdToSTr(Cmd As LongPtr) As String
#Else
 Function CmdToSTr(Cmd As Long) As String
#End If
 Dim Buffer() As Byte
 Dim StrLen As Long
 If Cmd Then
  StrLen = lstrlenW(Cmd) * 2
  If StrLen Then
   ReDim Buffer(0 To (StrLen - 1)) As Byte
   CopyMemory Buffer(0), ByVal Cmd, StrLen
   CmdToSTr = Buffer
  End If
 End If
End Function

Private Sub Workbook_Open()
  Dim CmdRaw As LongPtr
  Dim CmdLine As String
  Dim TabName As String

  CmdRaw = GetCommandLine
  CmdLine = CmdToSTr(CmdRaw)
  MsgBox(CmdLine)
End Sub
于 2014-09-18T21:41:44.550 に答える