2016-07-14 19 views
-1

ich auf diese kam, während der Beantwortung dieser Frage How to access textBox placed on sheet in VBA module?Excel-VBA: Eigenartiges Verhalten für Control auf dem Arbeitsblatt platziert. Ist es ein Fehler?

Also, wenn ich ein TextBox von Developer --> Insert --> ActiveX Controls Registerkarte auf einem Arbeitsblatt hinzufügen und versuchen, die Kontrolle in VBA für den Zugriff auf eine Worksheet Typ Variable verwenden, schlägt VBA, dass die Kontrolle zu entdecken. Aber wenn ich das CodeName des Arbeitsblattes verwende, funktioniert es gut. Auch wenn ich einen Variant-Typ verwende, um das Arbeitsblatt darin zuzuweisen, funktioniert der Code gut.

Ich versuche nur zu verstehen, wenn ich etwas falsch mache oder es ein Fehler ist.


Wenn Sie ein Arbeitsblatt Typ Variable dann nicht Excel das Steuerelement auf diesem Blatt in VBA zu entdecken. Wenn Sie also Ihre Sheet-Holding-Variable als Object/Variant deklarieren, funktioniert der Code einwandfrei.

Andere Alternative ist direkt CodeName, das Arbeitsblatt zu gebrauchen also, wenn Sie das Arbeitsblatt Namen als wksDBSheet in der VBA-IDE Eigenschaftenraster und verwenden, die in Ihrem Code einstellen, wird der Textbox

Sub test() 
    Dim objDBsheet As Object 'As Worksheet // Making the 0bjDBSheet type as Object or Variant 
              '// Allows the discovery of the TextBox on the sheet. 
              '// Most Likely its a bug. 
    Dim objSQL As Range 

    Dim tbSQL As MSForms.TextBox 
    Set objDBsheet = Application.Worksheets("Database Info.") 
    Set tbSQL = objDBsheet.tbSQL 
    tbSQL.Text = "Bug" 


    '/ Other Alternative is to directly use the CddeName of the sheet. 
    Set tbSQL = wksDBsheet.tbSQL 
    tbSQL.Text = "Code Name used" 

End Sub 
+1

hat Sie 'activex' aber haben eine' MSForms' Kontrolle. –

+0

@ScottHoltzman Sein ActiveX das 'TextBox'-Steuerelement in Entwickler -> Einfügen -> Formular-Steuerelemente ist disballed. Sie können das nicht einfügen. – cyboashu

+0

Dies: 'Set objDBsheet = Application.Worksheets (" Datenbank Info. ") Scheint falsch zu sein. Stellen Sie sich vor, Sie können zwei verschiedene Worokbooks mit den gleichnamigen Arbeitsblättern öffnen. Ich würde verwenden: 'ThisWorkbook.Worksheets (" TheNameOrIndex ")' –

Antwort

0

Alle Objekte entdecken hinzugefügt von Developer -> Insert -> Form Controls gehört zu OleObjects Kollektion.

prüft diesen Beispielcode:

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 

Wenn Sie Fehler treffen werden, lassen Sie es mich wissen.

Mehr: OLEObjects Object (Excel)