在Excel工作表中获取combobox的位置

我有一张带有combobox的表格。 在combobox的左边有一个列,用户可以使用“X”标记位置,如果其右侧的combobox应该做些什么(用dynamic范围内的值填充)。 我正在考虑这样的事情,但我没有设法使其工作:

Dim ComBx As ComboBox Dim ws2 As Worksheet Set ws2 = ActiveWorkbook.Worksheets("Tool") For Each ComBx In ws2.ComboBox If ComBx.Offset(0, -1).Value = "X" Then With ComBx 'do stuff End With End If Next ComBx 

任何想法如何引用一个combobox的位置? 我必须做类似的checkbox,它工作得很好,但是这逃避了我。

如果您的comboboxtypes是Active-X尝试下面的代码。

ComBx.TopLeftCell.Offset(, -1).Value返回位于combobox所在单元格左侧一列的单元格的值。

注意 :除此之外,你的代码中有一个Typo ,你定义并设置了ComBx ,但是接着使用If CmBx.Offset(0, -1).Value = "X" Then还要closuresNext CmBx – 这不应该甚至编译。

 Option Explicit Sub CmbBoxPosition() Dim ComBx As OLEObject Dim ws2 As Worksheet Set ws2 = ActiveWorkbook.Worksheets("Tool") For Each ComBx In ws2.OLEObjects If ComBx.progID Like "Forms.ComboBox.1" Then ' for DEBUG Only Debug.Print ComBx.Name & " located at " & ComBx.TopLeftCell.Address(False, False, xlA1) If ComBx.TopLeftCell.Offset(, -1).Value = "X" Then With ComBx ' the rest of your code goes here End With End If End If Next ComBx End Sub 

如果你正在使用ActiveXcombobox,那么你可以运行这个例子来看看所有combobox的“TopLeftCell”值(或者它的任何偏移量)只是为了确定你正在看的是正确的。

 Sub GetCombos() Dim shp As Shape Dim ws2 As Worksheet Dim cel As Range Set ws2 = ActiveWorkbook.Worksheets("Tool") For Each shp In ws2.Shapes If shp.FormControlType = xlDropDown Then Set cel = shp.TopLeftCell.Offset(0, -1) If cel.Value = "X" Then Debug.Print "cell at row=" & cel.Row & " column=" & cel.Column & " has an X in it" ' do stuff End If End If Next End Sub 

如果不是正确的,可以将shp.TopLeftCell.Offset(x,y)的x和y值更改为正确的偏移量,并相应地更新您的代码。