【问题标题】:Changing columns for Excel userform comboboxes更改 Excel 用户表单组合框的列
【发布时间】:2014-11-18 08:46:35
【问题描述】:

早上好,

我又陷入了另一个困境,需要一些帮助。我创建了一个用户表单,允许用户删除第二张工作表(原始数据)上的整行数据。使用下面的代码一切正常,但组合框仅显示行号。我迫切需要更改列,以便显示需要删除的行的项目名称。

例子:

Row:  Project
1     Alpha
2     Beta

我希望组合框显示 Alfa 和 Beta,并让用户能够根据该标准选择他们想要删除的行。

下面的代码将取消隐藏,然后隐藏我希望进行此删除的工作表。这是有目的的。

    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim lRw As Long
    ActiveWorkbook.Sheets("RAWDATA").Visible = xlSheetVisible
     'get the row number. add 1 because ListIndex starts at zero
    lRw = Me.ComboBox1.ListIndex + 1

    ActiveWorkbook.Sheets("RAWDATA").Select
    Cells(lRw, 1).EntireRow.Delete
    ActiveWorkbook.Sheets("RAWDATA").Visible = xlSheetHidden
    End Sub

Private Sub CommandButton1_Click()

End Sub

Private Sub UserForm_Initialize()
     'assumes data starts in A1 and has a header row
    Me.ComboBox1.List = ActiveWorkbook.Sheets("RAWDATA").Cells(1, 1).CurrentRegion.Offset(1).Value
End Sub

感谢您的帮助!

【问题讨论】:

  • 你有一个名为“行”的列吗?
  • 您只需要更改ComboBox属性中的列数,然后将链接范围也更改为2列。

标签: excel vba userform combobox


【解决方案1】:

.Cells(1, 1) 更改为.Cells(1, 2)

Cells() 方法使用行号和列号将代码坐标指定到特定范围,如下所示:

Cells(r, c)

所以在您的原始代码中,.Cells(1, 1) 指向“A1”,然后使用 .CurrentRegion 获取 A1 区域内的所有单元格。

通过替换列号并使用 .Cells(1, 2) 我们告诉它改为查看“B1” - 因此将列向右移动。

编辑:

您可以将此逻辑应用于 Offset(r, c) 函数以将返回值移动 1 列 - 所以:

.Cells(1, 1).CurrentRegion.Offset(1, 1)

这很可能是罪魁祸首,因为 .Cells() 方法将指向特定的单元格,但 .CurrentRegion() 方法将返回相同的结果,除非我们偏移它。

【讨论】:

  • 请解释您的解决方案,以便 OP 了解此解决方案的工作原理和原因。
  • 由于某种原因,这仍在拉动工作表的第一列。此外,当我不想删除一行并点击“X”关闭表单时 - 脚本仍然运行并删除该行!!!顺便说一句 - 我非常感谢您的帮助。这让我发疯了。
  • 好了好了!疯狂的抵消,让我发疯。在修补并使用您的建议后,我们完成了!现在我只需要弄清楚每次我在下拉框中选择某些内容时如何不让它出错,但退出!这很奇怪,因为它想在退出时运行脚本。再次感谢。
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2017-12-12
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多