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
hat Sie 'activex' aber haben eine' MSForms' Kontrolle. –
@ScottHoltzman Sein ActiveX das 'TextBox'-Steuerelement in Entwickler -> Einfügen -> Formular-Steuerelemente ist disballed. Sie können das nicht einfügen. – cyboashu
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 ")' –