0

シートを削除し、別のシートをコピーして、削除したシートと同じ名前に名前を変更する Excel マクロがあります。これは、Excel から実行すると問題なく動作しますが、Python からマクロを呼び出して実行すると、次のエラー メッセージが表示されます。

実行時エラー '1004' - シートの名前を別のシート、参照されているオブジェクト ライブラリ、または VisualBasic によって参照されているブックと同じ名前に変更することはできません。

マクロには次のようなコードがあります。

Sheets("CC").Delete
ActiveWindow.View = xlPageBreakPreview
Sheets("FY").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "CC"

デバッガーは、シートの名前が変更された最後の行のエラーを強調表示します。これらの呼び出しを python に直接入れてみましたが、同じエラー メッセージが表示されます。

どんな提案でも大歓迎です!

ありがとう。

4

2 に答える 2

2

Excel VBA内でコードを実行しました。
次の行が失敗していると推測しています。

Sheets("CC").Delete

それが理由です。新しいシートに既存の(削除されていない)シートと同じ名前を付けることはできません。

コードが完成したら、 Application.DisplayAlerts = False 前に Sheets("CC").Delete 置いてください。
Application.DisplayAlerts = True

私はPythonを使用していませんが、ライブラリがそのエラーを飲み込んで、次のステートメントに進むことができるようです.

それが役立つことを願っています。

于 2008-11-14T05:29:29.660 に答える
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'
于 2008-11-14T08:17:32.050 に答える