【问题标题】:Query a closed workbook without opening it查询已关闭的工作簿而不打开它
【发布时间】:2013-08-05 23:28:27
【问题描述】:

我正在关闭的 Excel 工作簿的列中搜索字符串。

以下代码在 MsgBox 上给出类型不匹配错误。

如果我用ret = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range("C3015").Address(True, True, -4150) 替换该行,那么宏会给我一个硬编码的值(在本例中为单元格 C3015 处的值)。

如何在关闭的工作簿的列中搜索其他值,而不打开它们?

 Dim wbName As String, wbPath As String, wsName As String

 wbPath = "Path\To\Workbook\"
 wbName = "NameOfWorkbook.xlsb"
 wsName = "NameOfWorkSheet"

 Dim ret As String    

 ret = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range("D:D").Find(What:="SearchColumnDForThisString")

 MsgBox ExecuteExcel4Macro(ret) // <--------- TYPE MISMATCH ERROR

【问题讨论】:

  • Range.Find() 返回一个 Range(不是字符串),试试 Range.Find().Address。
  • 谢谢,现在我没有收到错误,但计算不正确。它一直在寻找错误的值
  • Address() 方法有什么作用?我可以摆脱它吗?
  • 您不能使用该方法在已关闭的工作簿中搜索字符串。为什么不打开工作簿直接使用Find()
  • 关闭 ScreenUpdating,打开工作簿,进行搜索,关闭工作簿,打开 ScreenUpdating。

标签: excel vba macos worksheet-function


【解决方案1】:

如果您在多个宏中使用该工作簿,您可能希望保持工作簿处于打开状态,您可以执行以下操作来打开和隐藏它。您还可以将工作簿设置为公共变量,以便在完成后将其关闭。

Dim Wn as Window
Dim Wb as Workbook

Application.ScreenUpdating = False

Set Wb = Application.Workbooks.Open("your book")

For Each Wn in Wb
    Wn.Visible = False
Next Wn

Application.ScreenUpdating = True

【讨论】:

  • 这仍然会打开另一个项目。有没有办法查询它关闭了?
  • 我认为工作簿将被打开(在某种程度上)以获取您的数据,并且每次您更新链接时。是否有您不想打开文件的特定原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多