VBA将excel文件中的列复制到第一个空列中的另一列中

Private Sub CommandButton1_Click() Dim selection As Variant selection = UserForm1.ComboBox1.Text Sheets("Sheet1").Select Cells(1, 2) = selection Sheets("Sheet1").Select selection = Cells(1, 2) namefile = "C:\Users\xxx\" & Left(selection, 1) & "\" & selection & ".xls" Workbooks.Open Filename:=namefile Dim wk1 As Workbook Dim wk2 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Set wk1 = Workbooks("file1.xlsm") Set wk2 = Workbooks(selection & ".xls") Set sh1 = wk1.Worksheets("Sheet2") Set sh2 = wk2.Worksheets("Sheet1") sh2.Activate Dim firstempty As Variant Dim x As Integer Dim y As Integer Dim A1 As Variant Dim R1 As Variant Dim C1 As Variant x = 0 y = 0 While x = 0 If Range(Cells(1, y), Cells(1, y)) <> "" Then y = y + 1 Else: Range(Cells(1, y), Cells(1, y)).Select A1 = Target.Address R1 = Target.Row C1 = Replace(A1, R1, "") firstempty = (C1 & ":" & C1) x = 1 End If Wend With sh1 .Columns("D:D").Copy Destination:=sh2.Range(firstempty) End With End End Sub 

我需要复制第二个Sheet2的sheet1 file1.xls列的第一个空白列第二个文件的名称被select的combobox。 我无法定义第二个文件的空列的字母。 我得到运行时错误424和我的debugging器带我到代码中的点:A1 = Target.Address

我究竟做错了什么?

不应该y = 0是y = 1吗? 现在你指的是0列。

然后这应该工作:

 If Cells(1, y) <> "" Then y = y + 1 Else firstempty = y x = 1 End If 

接着:

 .Columns("D:D").Copy Destination:=sh2.Columns(firstempty) 

这是获得最后一列的更快的方法:

 Private Sub CommandButton1_Click() Dim selection As Variant selection = UserForm1.ComboBox1.Text Sheets("Sheet1").Select Cells(1, 2) = selection Sheets("Sheet1").Select selection = Cells(1, 2) namefile = "C:\Users\xxx\" & Left(selection, 1) & "\" & selection & ".xls" Workbooks.Open Filename:=namefile Dim wk1 As Workbook Dim wk2 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Set wk1 = Workbooks("file1.xlsm") Set wk2 = Workbooks(selection & ".xls") Set sh1 = wk1.Worksheets("Sheet2") Set sh2 = wk2.Worksheets("Sheet1") Dim LastColumn As Long LastColumn = sh2.Cells(1, Columns.Count).End(xlToLeft).Column + 1 sh1.Columns("D:D").Copy sh2.Cells(, LastColumn) End Sub 

作为一个便笺,你可以解释这部分代码:

 Sheets("Sheet1").Select Cells(1, 2) = selection Sheets("Sheet1").Select selection = Cells(1, 2) 

它看起来像你正在得到一个值,然后将值分配给一个单元格,然后单元格值(你刚刚分配)回到指定原始值的variables。

至多你应该只需要一行:

 Sheets("Sheet1").Cells(1, 2) = selection 

其他人不需要了。