【发布时间】:2020-12-31 14:40:58
【问题描述】:
我得到错误:
编译错误:对于每个控制变量必须是变量或对象
我正在尝试:
从 Excel 的列表中打开文件(路径、文件名和扩展名在 A 列中),
然后将相应行(D列)中的特定帐户信息复制到打开文件中的指定单元格,
将文件另存为新文件名(在 C 列中指定扩展名),
关闭然后转到下一行并重复。
这是代码。需要设置数据列表的大小吗?
Sub CM_Details()
Dim wb1 As Workbook 'Details
Dim wb2 As Workbook 'New CM
Dim i As Long 'row
Dim rng As Range
Set wb1 = ThisWorkbook
Set rng = Range("A2", Range("A" & Rows.Count).End(xlUp))
With wb1
For Each i In rng
If .Sheets("Detail").Range("A" & i).Value <> "" Then
Set wb2 = Workbooks.Open(.Sheets("Detail").Range("A" & i).Value)
wb1.Sheets("Detail").Range("D" & i).Copy 'RoC
wb2.Sheets("Home").Range("B1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
wb2.SaveAs Filename:="R:\ASSL v4\" & wb1.Sheets("Detail").Range("C" & i).Value
wb2.Close
End If
Next i
End With
End Sub
【问题讨论】:
-
控制变量是'i'。您已将 i 声明为 long。对于“for each”循环,“i”(控制变量)必须声明为变体或与迭代集合/数组(rng)传递的相同类型的对象。尝试阅读手册/帮助页面。它通常对这些类型的错误有很大帮助。
-
另外,当您
Set rng =指定所有 3 个范围对象的工作簿时,就像您在代码中的其他地方所做的那样 -
@chris neilsen - 谢谢,我不是一个特别高级的用户,所以不完全确定如何引用“Rng”之类的东西,所以我会试试这个,这样以后更容易重用
-
@freeflow 感谢您的宝贵时间 - 结果 Dim i 需要是整数(用于行号),而不是 long(我认为它需要覆盖 A 列中包含的文件路径的长度)所以肯定学到了一些东西。我尝试了很多搜索来找到如何做到这一点,这就是我接近解决方案的方式。如果您可以参考一本易于使用的手册,那就太好了