早上好,
我在另一个车辙,需要一些帮助。我创建了一个用户表单,允许用户在第二张表(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
感谢您的帮助!
答案 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()方法将返回相同的结果,除非我们抵消它。