使用VBA将列从一张图纸复制到另一张图纸

使用VBA将列从一张图纸复制到另一张图纸,vba,excel,Vba,Excel,我正试着把专栏从一张纸复制到另一张不同的工作手册上。这是我的复制代码: Private Sub CommandButton2_Click() Dim sourceColumn As Range, targetColumn As Range Set sourceColumn = wb.Worksheets(cmb).Columns(Form.ComboBox2.Value) Set targetColumn = ActiveWorkbook.ActiveSheet.Colu

我正试着把专栏从一张纸复制到另一张不同的工作手册上。这是我的复制代码:

Private Sub CommandButton2_Click()
    Dim sourceColumn As Range, targetColumn As Range
    Set sourceColumn = wb.Worksheets(cmb).Columns(Form.ComboBox2.Value)
    Set targetColumn = ActiveWorkbook.ActiveSheet.Columns("PART NUMBER")
    sourceColumn.Copy Destination:=targetColumn
End Sub
cmb
是一个全局变量。我在
Set sourceColumn=wb.Worksheets(cmb.Columns)(Form.ComboBox2.Value)处得到一个
运行时错误13:类型不匹配

有人能指出发生了什么事以及如何解决吗

全部代码:

Public wb As Workbook
Public cmb As String

Private Sub ComboBox1_Change()
    Dim Cell As Range, rng As Range, sht As Worksheet
    cmb = Form.ComboBox1.Value
    Set sht = wb.Worksheets(cmb)
    'assuming your headers are always on the first row...
    Set rng = sht.Range(sht.Range("A1"), _
                        sht.Cells(1, Columns.Count).End(xlToLeft))

    'add some code here to clear the lists first!...
    For Each Cell In rng.Cells
        If Len(Cell.Value) > 0 Then
            Form.ComboBox2.AddItem (Cell.Value)
            Form.ComboBox3.AddItem (Cell.Value)
            Form.ComboBox4.AddItem (Cell.Value)
            Form.ComboBox5.AddItem (Cell.Value)
            Form.ComboBox6.AddItem (Cell.Value)
            Form.ComboBox7.AddItem (Cell.Value)
            Form.ComboBox8.AddItem (Cell.Value)
            Form.ComboBox9.AddItem (Cell.Value)
            Form.ComboBox10.AddItem (Cell.Value)
            Form.ComboBox11.AddItem (Cell.Value)
            Form.ComboBox12.AddItem (Cell.Value)
            Form.ComboBox13.AddItem (Cell.Value)
        End If
    Next Cell
End Sub


Private Sub CommandButton1_Click()
    Dim sFilePath As String
    sFilePath = Application.GetOpenFilename()
    Set wb = Workbooks.Open(sFilePath)
    For Each sht In wb.Worksheets
          Form.ComboBox1.AddItem sht.Name
    Next sht
End Sub


Private Sub CommandButton2_Click()
    Dim sourceColumn As Range, targetColumn As Range
    Set sourceColumn = wb.Worksheets(cmb).Columns(Form.ComboBox2.Value)
    Set targetColumn = ActiveWorkbook.ActiveSheet.Columns("PART NUMBER")
    sourceColumn.Copy Destination:=targetColumn
End Sub

可能您没有在Columns()中作为参数传递正确的值。如果使用宏记录器,将看到列的参数如下所示:

“E:G”
在一个简单的宏中作为
列(“E:G”)。选择
。或一个数字作为
列(5)。选择

尝试一个非常简单的修复,将出现错误的行更改为以下内容:


Set sourceColumn=wb.Worksheets(cmb).Columns(“A:D”)
如果它有效,请尝试重新生成代码。

可能您没有在Columns()中作为参数传递正确的值。如果使用宏记录器,将看到列的参数如下所示:

“E:G”
在一个简单的宏中作为
列(“E:G”)。选择
。或一个数字作为
列(5)。选择

尝试一个非常简单的修复,将出现错误的行更改为以下内容:


Set sourceColumn=wb.Worksheets(cmb).Columns(“A:D”)
如果有效,则尝试重新生成代码。

在错误前的行上写入
debug.print Form.ComboBox2.Value
。在即时窗口中可以看到什么?它会打印“零件号”,这是所选的
表单。ComboBox2.Value
查看答案,它应该是一个
字符串,带有列的名称或列的编号。@vityta:零件号是列标题。如何使用列标题进行复制?您应该找到带有
零件号的列。有几种方法可以做到这一点,
WorksheetFunction.Match
就是其中之一。在错误发生前的行中写入
debug.print Form.ComboBox2.Value
。在即时窗口中可以看到什么?它会打印“零件号”,这是所选的
表单。ComboBox2.Value
查看答案,它应该是一个
字符串,带有列的名称或列的编号。@vityta:零件号是列标题。如何使用列标题进行复制?您应该找到带有
零件号的列。有几种方法可以做到这一点,
WorksheetFunction.Match
就是其中之一。我想按列标题名称进行复制。@user248884-您的方法应该有所不同-您必须找到具有此特定标题的列,然后通过将其编号作为参数引用到
Columns()
,来复制它。尝试使用
工作表功能。匹配(“零件号”,行(1))
。它会给你列号。这是您应该作为参数提供的内容。我想按列标题名称进行复制。@user248884-您的方法应该有所不同-您必须找到具有此特定标题的列,然后通过将其编号作为参数引用到
Columns()
,来复制它。尝试使用
工作表功能。匹配(“零件号”,行(1))
。它会给你列号。这是您应该作为参数给出的。