在工作簿之间切换

时间:2015-08-25 15:46:21

标签: excel vba excel-vba

我有一个代码可以在另一个工作簿中搜索某个信息,但该工作簿会更改名称和格式。我目前正在使用workbook.open打开它,当我指定文件位置时,它有一个动态部分(您将了解示例代码)。问题是在代码中间我需要回到第一个工作簿(运行代码的工作簿),做一些事情,然后再回到搜索信息的工作簿。我尝试使用dim secondfile将其设置为变量作为字符串/工作簿(尝试两者),然后尝试将其设置为活动工作簿,当它是"活动"时,我可以使用" secondfile。激活"后来当我需要回到它,但没有运气。这是代码:

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多个文件中搜索。正如您在代码中看到的那样,文件的名称位于第一个工作簿上,至少是其中的一部分。我使用"范围(" D6")。偏移"得到它的一部分。问题是,如果每次关闭并打开第二个工作簿,运行代码需要很长时间,所以我要做的是搜索特定文件中的所有内容并在搜索完所有内容后保存并保存关闭它。这就是为什么我需要回到这个文件......

PS:并非所有文件的格式都相同,这就是为什么我没有使用" workbooks.activate"或类似的东西,然后使用相同的"范围(" D6")。偏移"将文件设置为激活的东西,因为有些是在.xls中,而有些是在xlsx中...

2 个答案:

答案 0 :(得分:0)

由于您的代码实际上并不是非常具有描述性,因此我会向您提供一些内容,我会尝试解释发生了什么。我正在使用此代码编写另一个工作簿,从第一个开始提供信息。这是一个长子,我将删除不必要的部分。

我试图涵盖你将遇到的所有情况。

>>> data.iat[0, 0]
'val1'

答案 1 :(得分:0)

Public w as workbook    
For Each w In Workbooks
        If w.Name = originalworkbook Then
            Workbooks(w.Name).Activate
            'Do Stuff
        Exit For
        End If
Next w

以上的优点是你可以使用它同时打开无限数量的excel文件。只需将If w.Name = original workbook then更改为if w.Name like "*charcters from a file name*" then

即可

通配符可让您高效搜索

希望这有帮助!