Userform2 Fehler in Anzeigebox
#1
Hallo ihr fleissigen Helfer.
Ich habe  UF1 (zum suchen), UF2 (zum Daten editieren) und ein Klassemodul.
Habe die Exceltabelle um einige Spalten erweitert, was bis auf ein Eintrag auch funktioniert.
Darum möchte ich um eure Hilfe bitten.
Wenn ich in UF1 ein Suchbegriff eingebe, in der Listbox markiere und Personendaten editieren wähle 
erscheint in der UF2 im Texfeld "Quelle 2 Seite" der Eintrag nicht.  Huh Huh

Wo liegt der Fehler? Sehe vor lauter Wald die Bäume nicht mehr.
Mit  dankbaren grüssen
Martin


Angehängte Dateien
.xlsm   Klasse 25 erweitert.xlsm (Größe: 1,02 MB / Downloads: 12)
Antworten Top
#2
Hallo Martin,

wenn du eine Datei hochlädst, dann sollte diese zumindest mal zu kompilieren sein, sonst kann man nichts testen. Also in jedes Modul und in jede Klasse ein "Option Explicit"  am Anfang hinzufügen und dann kompilieren. Es sollten dabei keine Fehler auftreten; dann kann man weiter sehen.

Knobbi38
Antworten Top
#3
Hallo Martin,

wenn du den Namen dieser Textbox änderst muss du dies im Code anpassen.

Du hast die Textbox "Quelle2Serite" statt "Quelle2Seite" benannt.

Das mit dem Option Explicit in der 1. Zeile, sollest du die zu Herzen nehmen. Das wirst du sicherlich bei meinen Lösungsvorschlägen regelmäßig vorgefunden haben. Du kannst den VBA Editor dahingehend einstellen, dass in jeden neu erzeugten Modul Option Explicit automatisch eingetragen wird.

Du hast auch die Initialisierung der Klasse im Userform2 entfernt.
Willst du die Klasse nicht mehr nutzen? Das wäre schade um die Mühe die ich mir damals gemacht hatte um den afunktionalen und verkorksten Kram in geordnete Bahnen zu lenken.

Gruß Uwe
Antworten Top
#4
anbei mal die Klasse initialisiert im Userform 2 nebst Controls in Array und via Schleife geladen.
Ich hoffe, dass dies dein Ziel ist.

.xlsm   Klasse 25 erweitert.xlsm (Größe: 998,83 KB / Downloads: 13)

Gruß Uwe
Antworten Top
#5
Hallo allerseits.
Danke für die Antworten und auch die Kritiken sind angebracht.
Werde sie zu Herzen nehmen.
Herzlichen  98  an Uwe. 
Peinlich, wenn mann nicht mal Schereibfehler findet.
Habe lange gebraucht, biss ich Dein Code begriffen habe.
Du hast mir das Projekt gerettet.
Gruss Martin
Antworten Top
#6
Hallo ihr fleissigen Helfer.
Habe versucht, die Datei (erstellt von Uwe) etwas flexibler zu gestallten 
und an Stelle der Spaltenbezeichnungen die Spaltenüberschriften zu verwenden.
Leider werden die Boxen nicht in die UF2 eingelesen. 
Was habe ich falsch gemacht. Bitte um Hilfe. 
Mit dankbaren Grüssen
Martin


Angehängte Dateien
.xlsm   Klasse 25 erweitert Arbeitsdatei fehler UF2.xlsm (Größe: 995,66 KB / Downloads: 5)
Antworten Top
#7
Du brauchst nur 1 UF.

zB. https://snb-vba.eu/VBA_Userform_in_database_en.html
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#8
Hallo Martin,

beschreibe bitte mal das Ziel deiner Änderungsversuche. 
Mal abgesehen von diversen Fehlern ist nicht wirklich erkennbar was du erreichen willst.

Und ja, man kann das eigentlich in einem Userform machen (@snb). Aber das ist wahrscheinlich ja nicht das was du möchtest.

Gruß Uwe
Antworten Top
#9
Moin,

zum Fehler:
Programmieren ist nicht raten. Du kannst auch keine eigene Syntax erfinden. Wenn du auf Events einer Klasse reagieren willst, musst du auf die richtige Schreibweise achten. Die UserForm-Events einer UserForm-Klasse werden immer über den Namen "UserForm" bereitgestellt, auch wenn du die Klasse in UserForm2 umbenannt hast. Das Initialize-Event der UserForm2 wird also gar nicht abgefangen.

sonstiges:
Ich bin im Übrigen der Meinung, dass du ohnehin nicht die Default-Instanzen verwenden solltest. Auch würde ich davon absehen, von Objekten direkt auf andere Objekte zuzugreifen. Sinniger wäre es, wenn die Instanz der UserForm1-Klasse die Informationen zum zu editierenden Datensatz an eine Instanz der UserForm2-Klasse übergibt. Noch besser wäre es, wenn du den Klassen direkt sprechende Namen schenkst.

Genau so sollte die Klasse cls_TextBox meiner Ansicht nach auch nicht einfach so auf FindeSpalte in der Standardinstanz der UserForm2 zugreifen dürfen. Ebenso sollte die Klasse keinen direkten Zugriff auf ein Worksheet-Objekt erhalten, erst recht nicht schreibend.

FindeSpalte gibt zudem 1 zurück, wenn eine Spaltenüberschrift nicht gefunden wurde. Hier sollte ein Fehler oder ein abfangbarer Wert erzeugt werden.

Die Spaltenüberschriften im Code in ein Array zu packen ist ziemlich unnötig. du könntest auch einfach direkt den Inhalt der Überschriftszeile in ein Array legen, in dem du auf die .Value-Eigenschaft der Range zugreifst (und doppelt transponierst, um die unnötige 2. Dimension zu verlieren). Dann kannst du mit Match die Position Schleifenfrei ermitteln:
Code:
Option Explicit
'Codemodul der Tabelle
Sub testen()
    Dim ueberschriften

    ueberschriften = Application.Transpose(Application.Transpose(Range(Me.Cells(6, 1), Me.Cells(6, 1).End(xlToRight)).Value))
    Debug.Print Application.Match("Vornamen", ueberschriften, 0)
End Sub

Viele Grüße
derHöpp
Antworten Top
#10
Guten Tag  derHöpp
Danke für deine Ratschläge und den Code.
Werde mal versuchen, das ganze zu integrieren.
Mit freundlichen Grüssen
Martin
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste