私は、シートを削除するExcelマクロを持って、別のシートをコピーし、削除したシートの同じ名前に変更します。 Excelから実行するとうまく動作しますが、Pythonからマクロを呼び出して実行すると、次のエラーメッセージが表示されます。
実行時エラー "1004" - 同じ名前のシートの名前を変更できません。 別のシート、参照されるオブジェクトライブラリ、または参照されるワークブック VisualBasic。
マクロには次のようなコードがあります:
Sheets("CC").Delete
ActiveWindow.View = xlPageBreakPreview
Sheets("FY").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "CC"
デバッガは、シートの名前が変更された最後の行のエラーを強調表示します。私はまた、これらの呼び出しを直接Pythonに入れようとしましたが、同じエラーメッセージが表示されます。
どんな提案も大歓迎です!
ありがとう。
回答:
回答№1は2Excel VBA内でコードを実行しました。
私は次の行が失敗していると推測しています。
Sheets("CC").Delete
それが理由です。新しいシートに既存の(削除されていない)シートと同じ名前を付けることはできません。
置く Application.DisplayAlerts = False
前 Sheets("CC").Delete
そして
Application.DisplayAlerts = True
コードを書き終えたら
私はPythonを使用していませんでしたが、ライブラリがあなたのためにそのエラーを飲み込んで、次のステートメントに進むことができるようです。
希望が役立ちます。
回答№2の場合は1
ビハインドシーンでは、VBとVBAは維持していますアプリケーション、ワークシートなどのCOMオブジェクトへの参照です。これは、グローバル "アプリケーション"、 "ワークシート"などを持っている理由です。VBAがまだワークシートへの参照を保持している可能性があるため、Excelは正しく整理していません。
これらの暗黙的なグローバルを使用せず、オブジェクトモデル内の項目を明示的に参照するようにしてください。あるいは、Pythonで直接行うこともできます。
ここにはあなたが望むような何かをするpythonスクリプトがあります:
import win32com.client
xl = win32com.client.Dispatch ("Excel.Application")
xl.Visible = True
wb = xl.Workbooks.Add()
wb.Worksheets[0].Delete()
wb.Worksheets.Add()
wb.Worksheets[0].Name = "Sheet1"