【发布时间】:2017-06-19 01:01:40
【问题描述】:
我想将已关闭工作簿的某些列复制粘贴到我的活动工作簿中。 我的列是分开的,所以我想通过一个 Collection 变量的循环来做到这一点。
这是我的代码(编辑)
Option Explicit
Sub CopyDataFromClosedWbk()
'copy data from closed workbook to active workbook
Dim colonne As Collection
Dim col As Variant
Dim xlApp As Application
Dim xlBook As Workbook
Dim Sh As Object
Set colonne = New Collection
colonne.Add "A:B", "A1"
colonne.Add "E:F", "G1"
colonne.Add "N", "I1"
colonne.Add "P", "F1"
Set xlApp = CreateObject("Excel.Application")
'Path source workbook
Set xlBook = xlApp.Workbooks.Open("C:\Users\Amira AYADI\Desktop\Stage\Automatisation\Base Case_BDD CAPACITAIRE_ENVOYE_V2 2017_2023_24042017.xlsx")
xlBook.Sheets("DATA").Range("A1:CJ374810").AutoFilter
xlBook.Sheets("DATA").Range("BD1").Select
xlBook.Sheets("DATA").Range("$A$1:$CJ$374810").AutoFilter Field:=56, Criteria1:="CMR"
For Each col In colonne
xlBook.Sheets("DATA").Range(col).Copy
xlApp.DisplayAlerts = False
Debug.Print col
Set xlBook = Nothing
Set xlApp = Nothing
Set xlBook = ActiveWorkbook
Set Sh = xlBook.Sheets("Calcul")
'Sh.Activate
Range(colonne.Item(col)).Select
Sh.paste
Next col
xlBook.Close
xlApp.Quit
End Sub
但这不起作用,并且有几个错误:
首先
Range(colonne.Item(col)).Select
我猜不要使用“col”但使用索引。那么如何迭代Key的值呢?
第二次当我像这样将 col 替换为 1 时(试一试):
Range(colonne.Item(1)).Select
我有一个 91 错误:未设置对象变量或 With 块。
除此之外,我还有一个弹出窗口说工作簿“source.xlsx”已准备好进行修改。我该如何禁用它?
你有什么想法吗?
【问题讨论】:
-
不要使用
.Select。此外,您在每个单元格之后打开和关闭工作臂,效率不高。 -
我没注意,谢谢。如果我不使用 .select 我该怎么做?我试过 Range(colonne.Item(col)).Paste 但这不起作用
-
您需要在此处使用 Scripting.Dictionary 代替 Collection,因此您可以访问键和值。 stackoverflow.com/questions/5702362/vba-collection-list-of-keys
标签: vba excel collections