【问题标题】:Script to work with multiple excel workbooks in parallel并行处理多个 Excel 工作簿的脚本
【发布时间】: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")) 并在完成后终止它。

标签: excel vbscript vba


【解决方案1】:

让您的代码创建并使用它自己的 Excel 实例,但不要使其可见。您的代码将在完成后关闭该 Excel 实例(请记住在任何终止错误处理程序中也这样做)

这样就不会干扰用户的活动。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多