Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vba-迭代集合_Vba_Excel_Collections - Fatal编程技术网

vba-迭代集合

vba-迭代集合,vba,excel,collections,Vba,Excel,Collections,我想将已关闭工作簿的某些列复制粘贴到活动工作簿中。 我的列是分离的,所以我想通过集合变量上的循环来实现这一点 这里是我的代码(编辑) 但这不起作用,有几个错误: 首先 Range(colonne.Item(col)).Select 不工作与“col”,但与索引,我猜。那个么,如何迭代键的值呢 第二,当我像那样将col替换为1时(尝试): 我有一个错误:对象变量或未设置块 除此之外,我还有一个弹出窗口,显示工作簿“source.xlsx”已准备好修改。我怎样才能淡化这个 你有什么想法吗?试试这个

我想将已关闭工作簿的某些列复制粘贴到活动工作簿中。 我的列是分离的,所以我想通过集合变量上的循环来实现这一点

这里是我的代码(编辑)

但这不起作用,有几个错误:

首先

Range(colonne.Item(col)).Select
不工作与“col”,但与索引,我猜。那个么,如何迭代键的值呢

第二,当我像那样将col替换为1时(尝试):

我有一个错误:对象变量或未设置块

除此之外,我还有一个弹出窗口,显示工作簿“source.xlsx”已准备好修改。我怎样才能淡化这个

你有什么想法吗?

试试这个:

Option Explicit

Sub CopyDataFromClosedWbk()

    Dim xlApp As Application
    Dim xlBook As Workbook
    Dim sht As Worksheet, sht2 As Worksheet

    Set sht2 = ThisWorkbook.Sheets("Calcul")
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("C:\Users\User\Desktop\source.xlsx") 'Adjust
    Set sht = xlBook.Worksheets("DATA")
    xlApp.DisplayAlerts = False

    sht.Range("A:CJ").AutoFilter Field:=56, Criteria1:="CMR"
    sht.Range("A:B").Copy: sht2.Range("A1").PasteSpecial xlPasteValues
    sht.Range("E:F").Copy: sht2.Range("G1").PasteSpecial xlPasteValues
    sht.Range("N:N").Copy: sht2.Range("I1").PasteSpecial xlPasteValues
    sht.Range("P:P").Copy: sht2.Range("F1").PasteSpecial xlPasteValues

    xlBook.Close
    xlApp.Quit
End Sub

我不知道使用集合/字典保存列的背后是否有任何原因,但这种方式更容易

不要使用
。选择
。另外,你在每个单元后打开和关闭工作臂,这不是很有效。我没有注意,谢谢。如果我不使用。请选择如何使用?我尝试了Range(colonne.Item(col)).Paste,但这不起作用。您需要在此处使用Scripting.Dictionary来代替集合,这样您就可以访问键和值。
Range(colonne.Item(1)).Select
Option Explicit

Sub CopyDataFromClosedWbk()

    Dim xlApp As Application
    Dim xlBook As Workbook
    Dim sht As Worksheet, sht2 As Worksheet

    Set sht2 = ThisWorkbook.Sheets("Calcul")
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("C:\Users\User\Desktop\source.xlsx") 'Adjust
    Set sht = xlBook.Worksheets("DATA")
    xlApp.DisplayAlerts = False

    sht.Range("A:CJ").AutoFilter Field:=56, Criteria1:="CMR"
    sht.Range("A:B").Copy: sht2.Range("A1").PasteSpecial xlPasteValues
    sht.Range("E:F").Copy: sht2.Range("G1").PasteSpecial xlPasteValues
    sht.Range("N:N").Copy: sht2.Range("I1").PasteSpecial xlPasteValues
    sht.Range("P:P").Copy: sht2.Range("F1").PasteSpecial xlPasteValues

    xlBook.Close
    xlApp.Quit
End Sub