这看起来应该很简单,但我确实坚持了它。
这是从目录中的多个工作簿获取值并在一个工作簿中编译它们的代码。我使用的是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!"
答案 0 :(得分:1)
将一个字符串放在一起用作公式时,不能直接使用Range object。将Range.Address property连接到字符串中。
ID DUAL
---------- ----
1 X
1 X
2
答案 1 :(得分:1)
对于公式,您需要将工作簿的名称添加到字符串中。当变量wb是字符串的一部分时,你不能引用变量wb。您还需要引用工作簿和工作表名称。
所以我建议使用以下内容来获取这些名称:
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