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 回答