我有一个Excel宏删除工作表,复制另一个工作表并将其重命名为已删除工作表的相同名称。这在从Excel运行时工作正常,但是当我通过从Python调用宏来运行它时,我收到以下错误消息:
运行时错误“1004” - 无法将工作表重命名为与其相同的名称 另一个工作表,引用的对象库或引用的工作簿 的VisualBasic。
宏的代码如下:
Sheets("CC").Delete
ActiveWindow.View = xlPageBreakPreview
Sheets("FY").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "CC"
并且调试器突出显示重命名工作表的最后一行的错误。我也试过直接在python中调用这些调用但得到相同的错误信息。
非常感谢任何建议!
感谢。
答案 0 :(得分:2)
我在Excel VBA中运行了代码
我猜这一行失败了。
Sheets("CC").Delete
这就是原因,您不能将新工作表的名称与现有(未删除)工作表相同。
在完成代码后,将 Application.DisplayAlerts = False
放在 Sheets("CC").Delete
和 Application.DisplayAlerts = True
之前。
我没有使用过python但是看起来这个库正在为你吞下这个错误并让你继续下一个声明。
希望有所帮助。
答案 1 :(得分:1)
在幕后,VB和VBA维护对应用程序,工作表等的COM对象的引用。这就是为什么你有全局“应用程序”,“工作表”等等。有可能VBA仍然持有对Excel工作表,所以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'