【发布时间】:2016-03-14 06:32:13
【问题描述】:
我正在使用 vbscript(.vbs 文件)对 excel 执行读/写操作。
脚本打开一个现有的 excel 文件并向其中读取/写入数据。
如果只打开一个excel文件,则没有问题。
但是,当脚本运行时,如果我打开另一个 excel 文件并专注于这个新打开的文件,那么脚本将失败并退出。
我正在使用工作簿的句柄读/写。示例如下。
Set xlobj = GetObject(, "Excel.Application")
Set wbobj = xlobj.Workbooks.Open(filename)
For iRow = FIRSTROW To LASTROW
With wbobj.Sheets(sheetname)
If .Range("B" & CStr(iRow)) = "FREE" Then
.Range("B" & CStr(iRow)).Font.Color = RGB(0, 0, 255)
.Range("D" & CStr(iRow)) = vbNullString
Else
.Range("B" & CStr(iRow)).Font.Color = RGB(255, 0, 0)
End If
End With
Next
如果有一种方法可以使脚本工作,即使用户正在处理不同的 Excel 工作簿和/或如果有更好的选择来解决它,也需要您的帮助。
谢谢。 乙
【问题讨论】:
-
您可能会考虑显示脚本的其余部分...
wbobj看起来是正确的,但可能还有其他问题您没有暴露。 -
@DavidZemens,提供执行读/写的脚本主要部分的快照
Set xlobj = GetObject(, "Excel.Application")Set wbobj = xlobj.Workbooks.Open(filename) For iRow = FIRSTROW To LASTROW 使用 wbobj。 Sheets(sheetname) If .Range("B" & CStr(iRow)) = "FREE" Then .Range("B" & CStr(iRow)).Font.Color = RGB(0, 0, 255) .Range( "D" & CStr(iRow)) = vbNullString ... Else .Range("B" & CStr(iRow)).Font.Color = RGB(255, 0, 0) End If End With Next ...跨度> -
代码属于问题的主体。评论区非常难以辨认...
-
您是否要求在脚本运行时此文件对用户可见?
-
您发布的代码不应修改其他已打开的工作簿,因为它会显式打开特定工作簿并将该工作簿的句柄放在变量中。但是,除非您有理由这样做,否则您应该避免附加到已经运行的 Excel 实例 (
GetObject(, "Excel.Application"))。对于您发布的代码,最好创建一个新实例 (CreateObject("Excel.Application")) 并在完成后终止它。