如何在Excel VBA中提取多个列数据

我正在做一个macros,从另一个文件的某些列中提取数据。 我遇到了一个错误信息

types不匹配

在行Set row = Columns("O,Q,W")我知道这是不正确的,我也尝试过联盟,但那也是行不通的。

 Sub ImportDatafromotherworksheet() Dim wkbCrntWorkBook As Workbook Dim wkbSourceBook As Workbook Dim rngSourceRange As Range Dim rngDestination As Range Dim row As Range Dim row1 As Integer Dim hello As Range Dim hello1 As Range Dim lastRow As Long, i As Long Dim CopyRange As Range Set wkbCrntWorkBook = ActiveWorkbook With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel 2007-13", "*.xlsx; *.xlsm; *.xlsa" .AllowMultiSelect = False .Show If .SelectedItems.Count > 0 Then Workbooks.Open .SelectedItems(1) Set wkbSourceBook = Workbooks.Open(.SelectedItems(1)) With wkbSourceBook.Worksheets(1) lastRow = .Range("A" & .Rows.Count).End(xlUp).row For i = 4 To lastRow If Len(Trim(.Range("A" & i).Value)) <> 0 Then If CopyRange Is Nothing Then Set CopyRange = .Rows(i) Else Set CopyRange = Union(CopyRange, .Rows(i)) Set row = Columns("O,Q,W") End If End If Next If Not CopyRange Is Nothing Then wkbCrntWorkBook.Activate Set rngDestination = Application.InputBox(Prompt:="Select destination cell", Title:="Select Destination", Default:="A1", Type:=8) row.Copy rngDestination rngDestination.CurrentRegion.EntirdoeColumn.AutoFit wkbSourceBook.Close False '~~> Change Sheet2 to relevant sheet name End If End With End If End With End Sub 

用这个:

 Set MyRange = Union(Columns(1), Columns(4)) 

会立即抓住几列

你不能像这样使用Columns() 。 也避免使用Row作为variables。 这是一个保留字。

将其更改为

 Set rw= .Range("O:O,Q:Q,W:W") 

或者像@KKowalczykbuild议的那样

 Set rw = Union(.Columns(15), .Columns(17), .Columns(23)) 

忘了提及,请也限定您的细胞对象。 注意他们面前的点点? 如果你不这样做,他们会处理Activesheet ,它可能是也可能不是你实际上认为它的表单。