Excelシートをロードし、ユーザーがマクロを実行してセルにタグを付けることができるこのアプリを開発しています。Excel シートからマクロを読み取ろうとして問題が発生しました。すべてのExcelアクセスにwin32comモジュールを使用しています。これまでのところ、それは私にとって良いことです。しかし、すべてのマクロを提供するコードを作成するのに苦労しています。マクロを提供する対応する VBA コードがありますが、これまでのところ、それを Python に変換しようとして失敗しています。Python コードを使用してすべてのマクロを読み取りたい。VBAコードは次のとおりです。
Sub ListMacros()
Const vbext_pk_Proc = 0
Dim VBComp As Object
Dim VBCodeMod As Object
Dim oListsheet As Object
Dim StartLine As Long
Dim ProcName As String
Dim iCount As Integer
Application.ScreenUpdating = False
On Error Resume Next
Set oListsheet = ActiveWorkbook.Worksheets.Add
iCount = 1
oListsheet.Range("A1").Value = "Macro"
For Each VBComp In ThisWorkbook.VBProject.VBComponents
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(VBComp.Name).CodeModule
With VBCodeMod
StartLine = .CountOfDeclarationLines + 1
Do Until StartLine >= .CountOfLines
oListsheet.[a1].Offset(iCount, 0).Value = _
.ProcOfLine(StartLine, vbext_pk_Proc)
iCount = iCount + 1
StartLine = StartLine + _
.ProcCountLines(.ProcOfLine(StartLine, _
vbext_pk_Proc), vbext_pk_Proc)
Loop
End With
Set VBCodeMod = Nothing
Next VBComp
Application.ScreenUpdating = True
End Sub
VBA の経験はありません。私はこれに苦労しています。この問題へのアプローチ方法に関する提案は非常に高く評価されます.Thanks.
編集:私がこれまでに持っているものはここにあります!!
# RunInExcel.py - opens named Excel file fName, returns the sheets, modules
import os, os.path, win32com.client
def run_macro(fName, path=os.getcwd()):
print(path)
fName = os.path.join(path, fName)
print(fName)
xlApp = win32com.client.Dispatch("Excel.Application")
fTest = xlApp.Workbooks.Open(fName)
for i in fTest.VBProject.VBComponents:
print i.Name
if __name__ == "__main__":
run_macro("Testing1.xlsm")
しかし、マクロの名前が必要です。お手伝いありがとう!