Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/testing/3.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
Vba 自动复印&;根据组合框值粘贴特定列_Vba_Excel_Combobox - Fatal编程技术网

Vba 自动复印&;根据组合框值粘贴特定列

Vba 自动复印&;根据组合框值粘贴特定列,vba,excel,combobox,Vba,Excel,Combobox,我把一个宏放在一起,从Sheet1读取单元格,并将它们放在Sheet2上的组合框中 此宏将所选单元格的列复制到Sheet2上的列 到目前为止,我已经能够做到这一点,但它需要引用每个单元格并每次运行宏 我希望在ComboBox值更改后自动更新列,并且只使用一个“If语句”来复制和粘贴列 以下是我目前的代码: Option Explicit Sub ComboBox1_Change() Dim cmbx As ComboBox Dim myRange As Range Dim i As

我把一个宏放在一起,从
Sheet1
读取单元格,并将它们放在
Sheet2
上的组合框中

此宏将所选单元格的列复制到
Sheet2
上的列

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

我希望在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
选项显式
子组合框1_Change()
将cmbx设置为组合框
将myRange变暗为Range
作为整数的Dim i
调光范围
设置cmbx=Sheet2.ComboBox1
cmbx,明白了
设置myRange=ActiveWorkbook.Sheets(“Sheet1”).Range(“C4:I4”)
对于myRange中的每个c
如果c.值为“”,则
cmbx.附加项c.值
cmbx.ListIndex=0
如果结束
下一个
如果(cmbx.ListIndex=0),则
使用ActiveSheet
.Range(.Range(“D4”),.Range(“D”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
如果(cmbx.ListIndex=1),则
使用ActiveSheet
.Range(.Range(“E4”),.Range(“E”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
如果(cmbx.ListIndex=2),则
使用ActiveSheet
.Range(.Range(“F4”),.Range(“F”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
如果(cmbx.ListIndex=3),则
使用ActiveSheet
.Range(.Range(“G4”),.Range(“G”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
如果(cmbx.ListIndex=4),则
使用ActiveSheet
.Range(.Range(“H4”),.Range(“H”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
如果(cmbx.ListIndex=5),则
使用ActiveSheet
.Range(.Range(“I4”),.Range(“I”和.Rows.Count)).Copy
以
板材(“板材2”)。粘贴目的地:=板材(“板材2”)。范围(“B4”)
如果结束
端接头
编辑: 刚刚意识到,此代码仅在ListIndex为0且ListIndex不是正确使用的函数时有效。这对组合框中的第一项有效。还不确定需要改变什么



感谢您的帮助。提前感谢。

将如下所示的数据添加到第1页:

打开VBA编辑器/IDE。创建userform1并拖放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编辑器的工作表2下,添加

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

找到了示例文件。

现在告诉我问题我有
Sheet1
,X列上分别有X个产品的产品数据。在
Sheet2
上,我有一个组合框,其中加载了每个产品的标签。在组合框中选择的任何内容都会将其列自动复制到
Sheet2
上的列中。如果这还不够清楚,请告诉我,我一直很难用简洁的方式解释它。@RobertEnglish在第一个For语句中,您是如何创建ComboBox对象的?我已将其回滚到mehow的答案之前。请不要做任何进一步的编辑来更改代码中的问题。