Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Excel用户表单组合框的列_Excel_Vba_Userform_Combobox - Fatal编程技术网

更改Excel用户表单组合框的列

更改Excel用户表单组合框的列,excel,vba,userform,combobox,Excel,Vba,Userform,Combobox,早上好 我又陷入了另一个困境,需要一些帮助。我创建了一个用户表单,允许用户删除第二张工作表(rawdata)上的整行数据。使用下面的代码,一切正常,但是组合框只显示行号。我迫切需要更改列,以便它显示需要删除的行的项目名称 例如: Row: Project 1 Alpha 2 Beta 我希望组合框显示Alfa和Beta,并让用户能够根据该标准选择要删除的行 下面的代码取消隐藏,然后隐藏我希望进行此删除的工作表。这是有目的的 Private Sub ComboBox1_

早上好

我又陷入了另一个困境,需要一些帮助。我创建了一个用户表单,允许用户删除第二张工作表(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
谢谢你的帮助

.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()方法将返回相同的结果,除非我们对其进行偏移。

是否有一个名为“行”的列?您只需更改组合框属性中的列数,然后将链接范围也更改为2列。请解释您的解决方案,以便OP了解此解决方案的作用和原因。出于某种原因这仍然是拉动工作表的第一列。另外,当我不想删除一行时,点击“X”关闭表单-脚本仍然运行并删除该行!!!顺便说一句,我非常感谢你的帮助。这让我快发疯了。好了,开始吧!疯了,快把我逼疯了。在修改和使用您的建议后,我们完成了!现在,我只需要弄清楚如何避免每次在下拉框中选择某个内容时出错,但退出!这很奇怪,因为它想在退出时运行脚本。再次感谢。