2016-07-14 16 views
-1

この質問 How to access textBox placed on sheet in VBA module?Excel-VBA:ワークシートに配置されたコントロールの奇妙な動作。バグですか?

に答えながら、私はワークシート上TextBoxDeveloper --> Insert --> ActiveX Controlsからタブを追加し、Worksheet型変数を使用してVBAにそのコントロールにアクセスしようとするのであれば、VBAは、そのコントロールを発見するために失敗したこの出くわしました。しかし、私がワークシートのCodeNameを使用するとうまくいきます。また、バリアント型を使用してワークシートを割り当てても、コードは正常に動作します。

私が何か間違っているのか、それともバグかだけを理解しようとしています。


あなたはワークシート型の変数を使用する場合、ExcelがVBAにそのシート上のコントロールを発見するために失敗しました。したがって、シート変数をObject/Variantとして宣言すると、コードは正常に動作します。

他の代替は、あなたがすべてのオブジェクトをVBA IDEのプロパティグリッドでwksDBSheetとしてワークシートの名前を設定して、あなたのコードで、それがテキストボックス

​​
+1

あなたは 'activex'をタグ付けされたが、' MSForms'コントロールを持っています。 –

+0

@ScottHoltzmanそのActiveXは、開発者 - >挿入 - >フォームコントロールの 'TextBox'コントロールは不一致です。それを挿入することはできません。 – cyboashu

+0

これは 'Set objDBsheet = Application.Worksheets("データベース情報 ")が間違っているようです。同じ名前のワークシートで2つの異なるワーキングブックを開くことができると想像してください。私は使用します: 'ThisWorkbook.Worksheets(" TheNameOrIndex ")' –

答えて

0

を発見することに使うので、もし直接、ワークシートのCodeNameを使用することですDeveloper -> Insert -> Form ControlsOleObjectsコレクションに所属しています。

チェックこのサンプルコード:

Option Explicit 

Sub Whatever() 

EnumAllSettledObjectsInSheet ThisWorkbook.Worksheets(1) 

End Sub 

Sub EnumAllSettledObjectsInSheet(wsh As Worksheet) 
Dim obj As OLEObject 
For Each obj In wsh.OLEObjects 
    Debug.Print obj.Name 
Next 

End Sub 

エラーが会う場合、私に知らせてください。

より:OLEObjects Object (Excel)

関連する問題