VBA – 检索打开的工作簿的名称

这是我的问题:

我有一个在我的主文件(让我们称之为mainFile)一个子这样做:

– 打开文件(用户select打开哪个文件)

– 在一个variables中检索这个文件的名字

– 复制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") 

但variablesfileName而不是返回,例如“file1.xls”,返回“mainFile.xls”。

我想这是因为sub位于mainFile。 但是,我可以使用什么,而不是ThisWorkbook.name?

谢谢

你似乎在这里做额外的工作,你不需要。 我们可以设置一个Workbookvariables,并直接使用它,而不是通过名字来访问它。

 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") 

你有其他的select(这不是一个好的select,因为它可能导致奇怪和难以debugging的错误)是使用ActiveWorkbook ,其中引用显示的workbbok。 在这种情况下,这将是你刚刚打开的workbbok。

这是使用This...时候的问题之一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") 

阅读如何避免使用在Excel VBAmacros中select,以避免This...Active...Select...语句消除这些(和其他)types的问题。