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
Excel 将数据列从一个工作簿复制到编译工作簿时不跳过列_Excel_Vba - Fatal编程技术网

Excel 将数据列从一个工作簿复制到编译工作簿时不跳过列

Excel 将数据列从一个工作簿复制到编译工作簿时不跳过列,excel,vba,Excel,Vba,我正在从几个不同的数据库导入数据,并将它们合并到一个简单的报告中,但是所有的数据库都有不同的布局。例如,第一个数据库的名称在第1列,第二个数据库的名称在第2列 我在论坛上找到了一些很好的例子,但是将它们与进口商联系起来并没有产生正确的结果 这段代码以正确的顺序调用我需要的所有列,但是它将它们全部放在一列中 Sub importoer() Dim wb1 As Workbook Dim wb2 As Workbook Dim Sheet As Worksheet Dim PasteStart As

我正在从几个不同的数据库导入数据,并将它们合并到一个简单的报告中,但是所有的数据库都有不同的布局。例如,第一个数据库的名称在第1列,第二个数据库的名称在第2列

我在论坛上找到了一些很好的例子,但是将它们与进口商联系起来并没有产生正确的结果

这段代码以正确的顺序调用我需要的所有列,但是它将它们全部放在一列中

Sub importoer()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim Sheet As Worksheet
Dim PasteStart As Range
Dim v As Long, vcols As Variant

Set wb1 = ActiveWorkbook
Set PasteStart = [oer!A1]
vcols = Array(1, 2, 11, 4, 6, 7, 10, 3) 'columns to copy in this order

Sheets("oer").Select
Cells.Select
Selection.ClearContents
FileToOpen = Application.GetOpenFilename _
(Title:="Please choose OER File", _
FileFilter:="All Files (*.*),*.*")

If FileToOpen = False Then
MsgBox "No File Specified.", vbExclamation, "ERROR"
Exit Sub
Else

Set wb2 = Workbooks.Open(Filename:=FileToOpen)
For Each Sheet In wb2.Sheets
    With Sheet.UsedRange.Cells(1, 1).CurrentRegion
    For v = LBound(vcols) To UBound(vcols)
        .Columns(vcols(v)).Copy
        PasteStart.PasteSpecial xlPasteValues
    Set PasteStart = PasteStart.Offset(.Rows.Count)
    Next v
    '.Copy

End With
Next Sheet
End If
Application.CutCopyMode = False
wb2.Close SaveChanges:=False
End Sub
因此,我通过更改pastestart定义在目标页面上添加了一个列选择

Set PasteStart = PasteStart.Cells(1, v + 1)
这调用了除第一列以外的所有列,并将它们放置在OER表上,每个列之间都有空列

第1列未复制 第2列放在第1列中 第11列置于第2列 第4列置于第4列中 第6列置于第7列,依此类推

我需要弄清楚如何把它们都放在通话顺序的第1列到第8列

有什么想法吗


>也许是这个?您是按行而不是按列进行偏移的

Sub importoer()

Dim wb1 As Workbook
Dim wb2 As Workbook
Dim Sheet As Worksheet
Dim PasteStart As Range
Dim v As Long, vcols As Variant

Set wb1 = ActiveWorkbook
Set PasteStart = wb1.Sheets("oer").Range("A1")
vcols = Array(1, 2, 11, 4, 6, 7, 10, 3) 'columns to copy in this order

wb1.Sheets("oer").UsedRange.Cells.ClearContents
FileToOpen = Application.GetOpenFilename(Title:="Please choose OER File", _
            FileFilter:="All Files (*.*),*.*")
If FileToOpen = False Then
    MsgBox "No File Specified.", vbExclamation, "ERROR"
    Exit Sub
Else
    Set wb2 = Workbooks.Open(Filename:=FileToOpen)
    For Each Sheet In wb2.Sheets
        With Sheet
            For v = LBound(vcols) To UBound(vcols)
                .Columns(vcols(v)).Copy
                PasteStart.PasteSpecial xlPasteValues
                Set PasteStart = PasteStart.Offset(, 1)
            Next v
        End With
    Next Sheet
End If

Application.CutCopyMode = False
wb2.Close SaveChanges:=False

End Sub

这解决了没有调用第一列的问题,但仍然保留了其余列之间的间距。别介意我最后的评论,它起作用了,我没有删除v+1谢谢