根据ComboBox值自动复制并粘贴特定的列

我一直在把一个macros从Sheet1中读入单元格,并把它们放到Sheet2上的一个ComboBox中

该macros将所选单元格的列复制到Sheet2上的列。

到目前为止,我已经能够做到这一点,但它需要每次引用每个单元格并运行macros。

一旦ComboBox值发生变化,我正在查找列的自动更新,并只使用一个“If语句”来复制和粘贴列。

这是我的代码到目前为止:

 Option Explicit Sub ComboBox1_Change() Dim cmbx As ComboBox Dim myRange As Range Dim i As Integer Dim c As Range Set cmbx = Sheet2.ComboBox1 cmbx.Clear Set myRange = ActiveWorkbook.Sheets("Sheet1").Range("C4:I4") For Each c In myRange If c.Value <> "" Then cmbx.AddItem c.Value cmbx.ListIndex = 0 End If Next If (cmbx.ListIndex = 0) Then With ActiveSheet .Range(.Range("D4"), .Range("D" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If If (cmbx.ListIndex = 1) Then With ActiveSheet .Range(.Range("E4"), .Range("E" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If If (cmbx.ListIndex = 2) Then With ActiveSheet .Range(.Range("F4"), .Range("F" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If If (cmbx.ListIndex = 3) Then With ActiveSheet .Range(.Range("G4"), .Range("G" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If If (cmbx.ListIndex = 4) Then With ActiveSheet .Range(.Range("H4"), .Range("H" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If If (cmbx.ListIndex = 5) Then With ActiveSheet .Range(.Range("I4"), .Range("I" & .Rows.Count)).Copy End With Sheets("Sheet2").Paste Destination:=Sheets("Sheet2").Range("B4") End If End Sub 

编辑:

刚刚意识到这个代码只适用于ListIndex为0和ListIndex不是正确的函数使用。 这已经在ComboBox中的第一个项目。 还不确定需要改变什么。


任何帮助表示赞赏。 提前致谢。

将如下所示的数据添加到Sheet1中:

在这里输入图像描述

打开VBA编辑器/ IDE。 创builduserform1并拖放combobox1。

 Private Sub UserForm_Initialize() Dim cell As Range For Each cell In Worksheets("Sheet1").Range("A1:C1") Me.ComboBox1.AddItem (cell.Value) Next cell End Sub Private Sub ComboBox1_Change() Select Case True Case ComboBox1.Text = "fruit" Worksheets("Sheet1").Range("A2:A100").Copy Worksheets("Sheet2").Range("A2") Case ComboBox1.Text = "vegetable" Worksheets("Sheet1").Range("B2:B100").Copy Worksheets("Sheet2").Range("A2") Case ComboBox1.Text = "tree" Worksheets("Sheet1").Range("C2:C100").Copy Worksheets("Sheet2").Range("A2") End Select End Sub 

在VBA编辑器的Worksheet2下,添加

 Private Sub Worksheet_Activate() UserForm1.Show End Sub 

在这里find示例文件。