在DoWhile循环中的vlookup公式中的Excel VBA引用命名工作簿

时间:2016-03-25 19:25:05

标签: excel vba excel-vba loops vlookup

这看起来应该很简单,但我确实坚持了它。

这是从目录中的多个工作簿获取值并在一个工作簿中编译它们的代码。我使用的是vlookup,因为值并不总是在完全相同的单元格中,但始终具有相同的行标题。该代码打开目录中的每个工作簿并将其命名为wb。

我想在Vlookup公式中引用wb但是在执行它时遇到了麻烦。当我尝试下面的代码时,它给了我一个"循环,没有做"错误(但是当我运行没有公式的相同代码时,只需复制和粘贴范围,就可以了)。我还尝试用wb命名一个范围并引用它。

'Target File Extension
  myExtension = "*.xls"

'Target Path with Ending Extention
 myFile = Dir(myPath & myExtension)

'Loop through each Excel file in folder
  Do While myFile <> ""

'Set variable equal to opened workbook
  Set wb = Workbooks.Open(fileName:=myPath & myFile)

'Put ID from filename into sheet
  If right(wb.Name, 5) = "h.xls" Then
    wb.Worksheets(1).Range("B16").Select
    ActiveCell.Value = Left(wb.Name, 9)

'Get value from wb using Vlookup
  MasterBook.Activate
    ActiveCell.Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(""Sugar (g)"",wb!R18C1:R28C6,2,FALSE)"
'Close Workbook
  wb.Close SaveChanges:=True

'Get next file name
  myFile = Dir
Loop

'Message Box when done
  MsgBox "Task Complete!"

3 个答案:

答案 0 :(得分:1)

将一个字符串放在一起用作公式时,不能直接使用Range object。将Range.Address property连接到字符串中。

        ID DUAL
---------- ----
         1 X    
         1 X   
         2      

答案 1 :(得分:1)

对于公式,您需要将工作簿的名称添加到字符串中。当变量wb是字符串的一部分时,你不能引用变量wb。您还需要引用工作簿和工作表名称。 Fully Qualified Name

所以我建议使用以下内容来获取这些名称:

ActiveCell.FormulaR1C1 = "=VLOOKUP(""Sugar (g)"",[" & wb.name & "]" & wb.Worksheet(1).Name & "!R18C1:R28C6,2,FALSE)"

答案 2 :(得分:0)

我在这些情况下所做的是继续删除部分代码,直到它工作或给出不同的错误消息或其他东西。这样你就可以缩小到错误的位置。

Do While .. Loop看起来不错,我认为你错过了End If

If Right(wb.Name, 5) = "h.xls" Then
  wb.Worksheets(1).Range("B16").Select
  ActiveCell.Value = Left(wb.Name, 9)
End If