【问题标题】:Inserting selected row in ListBox to Sheet将列表框中的选定行插入到工作表
【发布时间】:2018-12-01 04:11:39
【问题描述】:

我的 ListBox 是一个 4 列的 ListBox,我将在其中插入最后 3 列数据。

我设法编写了一个代码,将 ListBox 的第 n 行插入到电子表格的相应单元格中。但是,我想要插入用户从 ListBox 中选择的任何行......如果他们什么都不选择,它不会插入任何东西。

我插入第 n 行的代码是:

Dim LastRow As Long
Dim n as integer
LastRow = Sheets("Sheet1").Cells(Rows.count, "F").End(xlUp).row
n = inputbox("enter value")
With Worksheets("Sheet1")
    .Range("F" & LastRow + 1) = ListBox1.Column(1, n)
    .Range("G" & LastRow + 1) = ListBox1.Column(2, n)
    .Range("H" & LastRow + 1) = ListBox1.Column(3, n)
End With

您能否建议如何修改我的代码以选择所选值而不是第 n 个?不选中怎么不插入?

【问题讨论】:

  • 您的代码假设InputBox 将返回一个可以隐式转换为Integer 的值。而是将InputBox 结果分配给String,然后您可以执行If StrPtr(result) = 0 来查看输入框是否被取消,然后If IsNumeric(result)知道您正在查看一个值可以转换为Integer。然后执行n = CInt(result) 进行显式转换。
  • 这表示我不知道“选择所选值而不是第 n 个”是什么意思。 n 不是选中的值吗?

标签: vba excel


【解决方案1】:

如果您只允许选择一项,那么您可以简单地引用列表框元素的.Value

Dim LastRow As Long
Dim n as integer
LastRow = Sheets("Sheet1").Cells(Rows.count, "F").End(xlUp).row
n = ListBox1.Value
With Worksheets("Sheet1")
    .Range("F" & LastRow + 1) = ListBox1.Column(1, n)
    .Range("G" & LastRow + 1) = ListBox1.Column(2, n)
    .Range("H" & LastRow + 1) = ListBox1.Column(3, n)
End With

如果您允许选择多个项目,那么您将需要遍历列表框中的每个项目并使用.Selected(n) 来确定该项目是否被选中。

Dim LastRow As Long
Dim n as integer
LastRow = Sheets("Sheet1").Cells(Rows.count, "F").End(xlUp).row
For n = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(n) Then
        With Worksheets("Sheet1")
            .Range("F" & LastRow + 1) = ListBox1.Column(1, n)
            .Range("G" & LastRow + 1) = ListBox1.Column(2, n)
            .Range("H" & LastRow + 1) = ListBox1.Column(3, n)
        End With
    End If
Next n

【讨论】:

  • 嘿 - 我尝试了你的第一个解决方案。它给了我一个运行时错误'6':溢出。这是什么意思?
  • 你在哪里得到错误?这通常意味着您尝试为变量分配过大的值。
  • 我尝试将 'n' 声明为 Long。错误更改为“无法获取 Column 属性。无效的属性数组索引'
  • 调试器中突出显示哪一行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多