【问题标题】:excel vba: How to paste the combobox value to the next column cellexcel vba:如何将组合框值粘贴到下一列单元格
【发布时间】:2018-04-01 13:08:13
【问题描述】:

我是 vba 新手,请问如何将我从组合框中选择的项目粘贴到每个单元格中?

示例: Combobox2 项目为 10-STD、12-40、8-STD。

我将选择 10-STD 并且它应该粘贴在 E9 列上,接下来我将选择 12-40 它应该粘贴在下一个空单元格 E10 上,与选择 8-STD 的情况相同,它应该粘贴在 E11 上。

感谢您的热心帮助。

【问题讨论】:

  • 组合框有 2 种类型。这是 表单控件 组合框,还是 ActiveX 控件 组合框? (我有详细说明区别here。)

标签: excel vba


【解决方案1】:

对于表单控件“组合框”,以下代码将起作用:

Sub DropDown1_Change()
    Dim dD As Object
    Dim selectedValue As String

    Set dD = DropDowns("Drop Down 1")

    selectedValue = dD.List(dD.ListIndex)

    If Range("E9") = Empty Then
        Range("E9") = selectedValue
    Else
        lrow = Cells(Rows.Count, 5).End(xlUp).Row
        Cells(lrow + 1, 5) = selectedValue
    End If  
End Sub

对于 ActiveX ComboBox,如下:

Private Sub ComboBox1_Change()
    Dim cB As ComboBox
    Dim selectedValue As String

    Set cB = OLEObjects("ComboBox1").Object

    selectedValue = cB.Value

    If Range("E9") = Empty Then
        Range("E9") = selectedValue
    Else
        lrow = Cells(Rows.Count, 5).End(xlUp).Row
        Cells(lrow + 1, 5) = selectedValue
    End If
End Sub

编辑:正如 QHarr 所说,代码可以嵌入到工作表代码中,因此无需 Dim ws As Worksheet Set ws As ActiveWorksheet 代码即可工作。 Range("E9") = Empty也可以替换成isEmpty(Range("E9"))

【讨论】:

  • 可以使用 IsEmpty(ws.Range("E9")) 则......不知道是否更有效率。整个事情都可以在 With ws 中,然后使用 .Cells?
  • 感谢 QHarr 的评论。对于 IsEmpty,我认为效率并不重要,但同样适用。将其放入工作表代码实际上是一个非常好的主意,我将其添加到帖子中。谢谢你,+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2019-03-14
  • 2017-04-18
  • 2017-02-06
相关资源
最近更新 更多