更改Excel userform组合框的列

时间:2014-11-17 13:17:38

标签: excel vba userform combobox

早上好,

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

示例:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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()方法将返回相同的结果,除非我们抵消它。