2017-04-30 10 views
0

私はコンボボックスのあるシートを持っています。コンボボックスの左側には、コンボボックスがそのようなことをしなければならない場合(ダイナミックレンジから取られた値でそれ自身を埋める)ユーザが位置を「X」でマークできるカラムがあります。私はこのような何かを考えていたが、それを動作させるために管理していないのです。Excelワークシートでコンボボックスの位置を取得

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 

任意のアイデアコンボボックスの誰の位置を参照する方法?私はチェックボックスのためにそれと似たようなことをしなければならなかったが、それはうまくいきましたが、これは私には分かりません。

+1

コンボボックスのどのような? ActiveXまたはフォームコントロール? –

+0

これはアクティブなXコンボボックスです –

答えて

1

コンボボックスタイプがActive-Xの場合は、以下のコードを試してください。

ComBx.TopLeftCell.Offset(, -1).Valueは、コンボボックスが配置されているセルの左側に1列にあるセルの値を返します。

:そのほかに、あなたが定義しComBxを設定し、あなたのコードで誤植を持っているが、その後If CmBx.Offset(0, -1).Value = "X" Thenを使用してもNext 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 
+0

これは素晴らしい仕事でした、ありがとう!私はまた私の質問のタイプを修正した –

0

ActiveXコンボボックスを使用している場合、この例を実行すると、すべてのコンボボックスの '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の値を変更することができます正しいものではありません場合。

+0

これはxldropDown行のために私にとってはうまくいかなかったが、Shai Radosの答えがしました。より少ないあなたの入力をありがとう! –

関連する問題