【发布时间】:2016-12-15 18:55:00
【问题描述】:
我有一个代码在另一个工作簿中搜索特定信息,但该工作簿更改了名称和格式。我目前正在使用 workbook.open 打开它,当我指定文件位置时,它具有动态部分(您将了解示例代码)。问题是在代码中间我需要回到第一个工作簿(运行代码的那个),做一些事情,然后再回到它搜索信息的工作簿。我尝试使用 dim secondfile 作为字符串/工作簿将其设置为变量(两者都尝试过),然后尝试在它“活动”时将其设置为活动工作簿,这样我可以稍后在需要时使用“secondfile.activate”回去吧,但没有运气。代码如下:
dim originalworkbook as workbook
set originalworkbook as this workbook
dim wb as workbook
set wb as Workbooks.Open("C:\Users\abc\Documents\bla bla bla " + Range("D6").Offset(iLoop).Value)
'code here...
originalworkbook.activate
'code here...
'[insert code here to go back to the wb workbook]
我不能让它再次打开 wb 工作簿,因为它没有意义。现在我有 1k+ 数据的列表,这些数据在另外 30 多个文件中搜索。文件的名称在第一个工作簿上,至少是其中的一部分,正如您在代码中看到的那样。我使用 "Range("D6").offset" 部分来获取它。问题是,如果我每次都关闭并打开第二个工作簿,运行代码将花费太长时间,所以我想做的是搜索特定文件中的所有内容,并在搜索完所有内容后,保存并关闭它。这就是为什么我需要回到这个文件......
PS:并非所有文件的格式都相同,这就是为什么我没有使用“workbooks.activate”或类似的东西,然后使用相同的“Range(“D6”).offset”来设置文件激活,因为有些在 .xls 中,有些在 xlsx...
【问题讨论】:
-
假设您将 wb1 调暗为工作簿,将 wb2 调暗为工作簿。您是否使用以下语法? wb1.sheets("Sheet1").Range("A1") = "aaa" 或 wb2.Sheets("Sheet3").Range("B12") = MyString。我的意思是您不必激活它来更改单元格或从中读取。
-
感谢@TimWilliams,但我认为没有其他方法可以使用活动工作表或类似的东西......你之前已经在这个宏中帮助过我,工作表和工作簿名称每次都会更改,请参阅stackoverflow.com/questions/32127050/vba-find-not-working
-
@DavidG 也许我明白了。您是说我不需要回到第一个工作簿来更改其上的单元格,对吗?我现在试一试,然后返回给你
-
@DavidG 尝试更改我的字符串,但没有用。我尝试定义两个变量,一个用于工作簿 (wb),一个用于工作表 (ws),并尝试将它们定义为 thisworkbook/activeworkbook 和 activesheet/sheet(“名称”),然后尝试使用 wb.ws.range.offset。 value = "xxxx",也试过 wb.床单(ws),然后是其余的,没有运气。得到这个字符串的类型不匹配