VBA - 检索已打开工作簿的名称

时间:2015-06-05 13:41:15

标签: excel vba excel-vba

这是我的问题:

我的主文件中有一个sub(让我们称之为mainFile):

  

- 打开文件(用户选择要打开的文件)

     

- 在变量

中检索此文件的名称      

- 复制file1中几个单元格的值,将它们粘贴到mainFile

为了做到这一点,我的代码看起来像这样:

Workbooks.Open file1
fileName = ThisWorkbook.Name
Set source = Workbooks(fileName).Sheets("Feuil1")
Set target = Workbooks(mainFile).Sheets("Feuil1")
source.Range("A5:A66").Copy target.Range("T5")

但变量fileName,而不是返回,例如" file1.xls",返回" mainFile.xls"。

我想这是因为sub位于mainFile中。但我可以使用什么代替ThisWorkbook.name?

由于

2 个答案:

答案 0 :(得分:2)

你似乎在这里做了额外的工作,你不需要。我们可以设置一个Workbook变量,直接使用它,而不是按名称访问它。

Dim wkbk as Workbook

Set wkbk = Workbooks.Open(file1)
Set source = wkbk.Sheets("Feuil1")
Set target = ThisWorkbook.Sheets("Feuil1")
source.Range("A5:A66").Copy target.Range("T5")

你拥有的另一个选项(这不是一个好的选择,因为它可能导致奇怪且难以调试错误)是使用ActiveWorkbook,它引用显示的workbbok。在这种情况下,那就是你刚刚打开的工作台。

答案 1 :(得分:1)

使用This...

时的问题之一

请尝试使用此代码:

Dim NewWB as workbook

Set NewWB = Workbooks.Open file1
fileName = NewWB.Name
Set source = Workbooks(fileName).Sheets("Feuil1")
Set target = Workbooks(mainFile).Sheets("Feuil1")
source.Range("A5:A66").Copy target.Range("T5")

阅读How to avoid using Select in Excel VBA macros,了解有关避免This...Active...Select...语句以消除这些(及其他)类型问题的提示。