Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1100to1104
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
TextBox im Klassenmodul - keine Automatisierung
Andreas
Hallo Forum,
ich habe da ein Problem:
In einem Klassenmodul vereinbare ich eine Variable als Textbox mit dazugehörigen Ereignissen, um später während der Laufzeit mehrere dieser Klassen zu erstellen. Dazu soll jede dieser Textboxen im Change-Ereignis denselben Code besitzen.
Dazu schreibe ich im Klassenmodul: Public WithEvents TeBo as TextBox
Nun sagt mir Excel: "Das Objekt unterstützt keine Automatisierungsprozesse"
Wie soll ich das nun verstehen? Es gibt doch einige Ereignisse, welche die TextBox standardmäßig mitbringt.
Bei einem Frame oder einem ListView klappt das, um im Klassenmodul dann an die Ereignisse heranzukommen.
Kann da jemand helfen?
Gruß Andreas
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 10:40:23
Tino
Hallo,
hier mal ein Beispiel.
Dialog UserForm1
Option Explicit 
Dim meTextBo() As New Klasse1 
 
 
Private Sub UserForm_Initialize() 
Dim i As Integer 
     
    For i = 0 To 3 
     Redim Preserve meTextBo(i) 
     'Textbox 1 bis 4 
     Set meTextBo(i).TeBo = Me("TextBox" & i + 1) 
    Next i 
 
End Sub 
 
Private Sub UserForm_Terminate() 
 Erase meTextBo 
End Sub 
Klassenmodul Klasse1
Option Explicit 
 
Public WithEvents TeBo As MSForms.TextBox 
 
Private Sub TeBo_Change() 
 MsgBox TeBo.Name 
End Sub 
Gruß Tino
Anzeige
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 10:59:02
Andreas
Hi Tino, danke!
"MSForms" war das Zauberwort.
Interessant finde ich, wie du dir Klasse beim Beenden aus dem Speicher nimmst.
Ich hätte geschrieben: Set meTextBo = Nothing
Wäre das falsch?
Andreas
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 11:07:04
Tino
Hallo,
bei mir ist meTextBo ein Array und diese kann man mit Erase leeren.
Gruß Tino
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 11:07:58
Tino
Hallo,
bei mir ist meTextBo ein Array und diese kann man mit Erase leeren.
Gruß Tino
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 11:18:34
Andreas
OK, danke!
Gruß Andreas
AW: TextBox im Klassenmodul - keine Automatisierung
09.09.2009 18:19:28
Andreas
Hi Tino, Leute,
es stellt sich als Problem heraus, da ich das Change-Event der Textboxen in einer anderen Klasse benötige.
Also quasi ist die besagte UserForm in Wirklichkeit Klassenmodul X und in der TextBox-Klasse müsste ein Event eingerichtet werden, welches ich mit RaiseEvent auslöse.
Leider funktioniert WithEvents im Klassenmodul X nicht mit einem Feld.
Ist es sinnvoll, kein Feld zu füllen und den Bezug über die Controls-Eigenschaft des Parent der Textboxen zu realisieren?
Andreas
Anzeige
AW: TextBox im Klassenmodul - keine Automatisierung
10.09.2009 08:32:01
Andreas
Hi Tino, Leute,
es stellt sich als Problem heraus, da ich das Change-Event der Textboxen in einer anderen Klasse benötige.
Also quasi ist die besagte UserForm in Wirklichkeit Klassenmodul X und in der TextBox-Klasse müsste ein Event eingerichtet werden, welches ich mit RaiseEvent auslöse.
Leider funktioniert WithEvents im Klassenmodul X nicht mit einem Feld.
Ist es sinnvoll, kein Feld zu füllen und den Bezug über die Controls-Eigenschaft des Parent der Textboxen zu realisieren?
Andreas
verstehe nicht richtig
10.09.2009 08:44:00
Tino
Hallo,
erlich gesagt verstehe ich nur Bahnhof, kann aber auch an mir liegen.
Kannst Du mal ein Beispiel hochladen, in dem ersichtlich ist was Du vor hast?
Gruß Tino
Anzeige
AW: verstehe nicht richtig
10.09.2009 10:07:53
Andreas
Hi, das ist bissel schwierig, würde ich aber machen.
Ich möchte erst mal noch erklären, was ich damit vorhabe:
Mein Ziel ist, eine eigene ListBoxSpecial zu basteln. Da meine Listeneinträge überschaubar sind, wollte ich das ganze mit Textboxen als Tabellenzellen quasi machen.
Ich initialisiere ein Frame und in diesem werden dann, je nach Spaltenanzahl, die Textboxen angeordnet.
Von meiner UserForm1 aus initialisiere ich die Klasse LiBoSpec. Daraufhin wird in der Klasse ein Frame angelegt, der auf dem mit übergebenem Parent-Objekt (UserForm1) hineingebastelt wird. Sobald ich mit der Klassen-Prozedur AddItem eine Zeile/Zelle anlege, wird aus der TextBox-Klasse ein Element initialisiert und dem Frame hinzugefügt.
Der Vorteil: Ich kann Teboxen ganz anders Formatieren und behandeln, was mir ein ListView einfach nicht bieten kann.
Klar, VBA hat keine Möglichkeit AktivX-Steuerelemente zu erstellen, aber ich bin mir sicher, dass ich mit den zwei Klassen das auch hinbekomme. Ich mich mit den Ereignissen, Methoden und Eigenschaften an die ListBox anlehnen möchte.
Also, bei Bedarf stelle ich den Code mit ein.
Gruß Andreas
Anzeige
vielleicht ein ansatz...
10.09.2009 11:31:35
Tino
Hallo,
verstanden habe ich eigentlich nur,
Du möchtest Dir eine Userform mit Textboxen zusammenbasteln
die wie eine Tabelle aufgebaut ist.
Habe hier mal was zusammengebastelt.
https://www.herber.de/bbs/user/64311.xls
Gruß Tino
AW: vielleicht ein ansatz...
10.09.2009 13:10:37
Andreas
Danke!
Ja, ok, und jetzt stelle dir vor, die UserForm im Beispiel wäre kein Formular sondern eine andere Klasse, welche ein Frame auf einer UserForm erzeugt und die Textboxen in den Frame anordnet. Diese neue Klasse ist eine eigene/spezielle Listbox (ListBoxSpecial), mit der man durch eine selbst gebaute Funktion 'AddItem' (im Klassenmodul der Listbox) neue Listeneinträge (Textboxen) erzeugt.
Diese ListBoxSpecial-Klasse hat ein Event 'LabelEdit', welches durch das Change-Ereignis einer der Textboxen ausgelöst wird. Und dieses Event LabelEdit schlägt in der UserForm dann zu bzw. kann dort verwendet werden.
Andreas
Anzeige
AW: vielleicht ein ansatz...
10.09.2009 13:34:49
Tino
Hallo,
verstehe was du vor hast.
Habe auch eine Vorstellung wie es gehen könnte.
Kann aber erst morgen wieder bin auf der Arbeit.
Gruß Tino
AW: vielleicht ein ansatz...
10.09.2009 14:10:06
Andreas
Ja, kein Problem, gut, dass du bei meinem Gewirr durchsiehst.
Also dann bis morgen.
Gruß Andreas
AW: vielleicht ein ansatz...
11.09.2009 13:09:16
Tino
Hallo,
Du fragst wie es mit mehreren geht.
In meinem Beispiel sind es doch mehrere.
Gruß Tino
AW: vielleicht ein ansatz...
10.09.2009 16:30:36
Andreas
...vielleicht könnte man bei der Instanzierung der jeweiligen Textboxklasse die ID der ListBoxSpecial-Klasse (Stammklasse) mitteilen, welche dann in der Textboxklasse als konstanter Bezugswert gespeichert wird.
Beim Change-Ereignis in der jeweiligen Textboxklasse wird nun gezielt eine öffentliche Prozedur in der ListBoxSpecial-Klasse ausgelöst und die betreffende Textbox als Referenz zurückgegeben.
Problem für mich ist, ich weiß nicht, wie man die einzelnen Komponenten adressiert.
Am Ende ist das total umständlich und es gibt einen anderen Weg (?).
Nur wollte ich gerne in der ListBoxSpecial-Klasse ein Event 'LabelEdit' bereitstellen.
Andreas
Anzeige
meinst Du so...
11.09.2009 09:52:45
Tino
Hallo,
habe hier mal etwas angefangen, kann noch weiter ausgebaut werden.
In der Klasse kannst Du dir ja ein Event aussuchen was dir gefällt,
es gibt aber nur die die zur Auswahl stehen. ;-)
Für die Labels (Überschrift) habe ich mal doppelklick und für die Textboxen
das Change Ereignis eingebaut.
https://www.herber.de/bbs/user/64328.xls
Gruß Tino
meine version...
11.09.2009 11:12:39
Andreas
Also, ich habe mal eine vereinfachte Version gestrickt...
https://www.herber.de/bbs/user/64333.xls
Gruß Andreas
Anzeige
AW: meinst Du so...
11.09.2009 16:39:37
Andreas
Tino, Ich benötige aber Events der Textboxen in meiner ListBoxSpecial-Klasse, um sie dann schließlich als Events an die UserForm weiterzureichen und verarbeiten zu können. Erst dann ist es eine universelle Geschichte wie ein Steuerelement der Toolbox, weil ich die Beiden Klassen einfach nur in neue Projekte kopieren brauch und von der UserForm her initialisieren kann.
Alles, was ich für das Projekt speziell in der Textbox-Klasse z.B. im Change-Ereignis vereinbare, nützt mir in einem anderen Projekt wahrscheinlich nichts. Also muss es doch zwei Klassen geben, die völlig allgemein sind.
Dazu auch meine Version von vorher.
Weißt du, was ich will?
Gruß Andreas
Anzeige
AW: meinst Du so...
11.09.2009 19:05:50
Andreas
Tino, Ich benötige aber Events der Textboxen in meiner ListBoxSpecial-Klasse, um sie dann schließlich als Events an die UserForm weiterzureichen und verarbeiten zu können. Erst dann ist es eine universelle Geschichte wie ein Steuerelement der Toolbox, weil ich die Beiden Klassen einfach nur in neue Projekte kopieren brauch und von der UserForm her initialisieren kann.
Alles, was ich für das Projekt speziell in der Textbox-Klasse z.B. im Change-Ereignis vereinbare, nützt mir in einem anderen Projekt wahrscheinlich nichts. Also muss es doch zwei Klassen geben, die völlig allgemein sind.
Dazu auch meine Version von vorher.
Sorry, aber weißt du, was ich meine?
Gruß Andreas
Anzeige
AW: meinst Du so...
12.09.2009 11:11:47
Tino
Hallo,
hier die Version wo ich alles in ein Klassenmodul und ein Modul ausgelagert habe.
Bei doppelklick auf ein Label (Spalte 1, Spalte 2 ...) kannst Du änderungen an der Überschrift machen.
Beim schreiben in eine Textbox, schlägt das Change- Event zu.
https://www.herber.de/bbs/user/64350.xls
Mehr kann ich jetzt auch nicht mehr machen.
Gruß Tino

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige