Office: VBA Code für UserForm kürzen

Helfe beim Thema VBA Code für UserForm kürzen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich versuche mich seit einigen Wochen an Excel-VBA´s aber komme momentan nicht weiter.. Ich arbeite an einer UserForm mit der die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von LiGru, 21. Dezember 2020.

  1. VBA Code für UserForm kürzen


    Hallo zusammen,

    ich versuche mich seit einigen Wochen an Excel-VBA´s aber komme momentan nicht weiter..

    Ich arbeite an einer UserForm mit der die Bearbeitung von Mängeln erfolgen soll. Dazu ist es notwendig, dass die Gebäude, Ebenen, Raum-Nummern und die jeweiligen Raumbezeichnungen abhängig voneinander ausgewählt werden können. Ich habe das bereits hinbekommen, sodass es ohne Probleme funktioniert, würde aber eine kürzere Version bevorzugen.

    In der UserForm werden die Daten aus einer externen Datei abgerufen. Per ComboBox kann ein Gebäude ausgewählt werden. Dann werden in einer weiteren ComboBox die Ebenen dieses Gebäudes angezeigt und in einer weiteren ComboBox können dann die Räume auf dieser Ebene ausgewählt werden. Nach Auswahl eines Raumes wird die Bezeichnung des Raumes automatisch in eine TextBox geschrieben.

    Ich habe mal eine Beispieldatei ohne UserForm angehangen. Hoffentlich macht es keine Umstände so einen langen Code durchzugucken..

    Vielen Dank im Voraus!

    :)
     
  2. Moin,

    ohne das jetzt alles im Detail zu verstehen.


    Du kannst deinen Code massgeblich verkürzen indem du mit Parent arbeitest. Will heissen:

    Statt jedes mal
    Code:
    zu schreiben, kannst du folgendes machen:
    Code:
    Dann:
    Prüf doch ob du das if-then-elseif ändern kannst.
    Ohne das jetzt im Detail zu erurieren kannst du auch die Variable direkt übergeben

    Code:
    Hier zB. könntest deine 700 Coezeilen mit einer einfachen Kombination abfackeln

    Code:
    Dann doppelst du unnötig: Zb in der
    in der Private Sub ComboBox_Residenz_Change()

    Stellst du IMMER auf True
    Dann setz doch vor die IF-Abfrage (sofern die überhaupt notwendig ist) das
    das "TRUE"
    Code:
    So sparste mal schlappe 16 Codezeilen.

    Und so weiter.

    Mach dich mit Logik an das was du vorhast. Bring Struktur rein, der Rest wird wachsen =)
    und sei dir sicher, auch wenn du noch Jahre programmierst, du wirst immer wieder dinge kennenlernen wo du dich nachher an den Kopf greifst und dich fragst was du für ein Stümper warst *grins *grins

    Grüße Jack
     
  3. Moin!
    ALso ungetestet (dafür fehlt die UF), würde ich deine IF Konstrukte so umbauen.
    Code:
    Da die Zeilen ziemlich lang waren, die Zeilenumbrüche wieder weg machen. DAbei werden die Zahlen durch die Einträge in der UF gleich ersetzt. Ansonsten ist der Code ja gleich.
    Bei der zweiten UF wird zudem noch der Eintrag gekürzt um zu passen. Du solltest aber vorher noch eine Prüfung einbauen, ob auch was ausgewählt wurde. Das habe ich mal mit reingemacht. Danach sollte der Code ja nur noch gelistet Werte haben und wenn die entsprechenden Blätter / Tabellen existieren, sollte es klappen. Alternativ noch dem else Zweig anpassen. Der tritt in Kraft, wenn in den Combos nix ausgewählt wurde. Der Zweig fehlt im Code.
    VG
     
    1Matthias, 22. Dezember 2020
    #3
  4. VBA Code für UserForm kürzen

    Vielen Dank für eure schnellen Antworten!

    Ein paar Sachen konnte ich schon umsetzen, klappt gut.

    Jedoch habe ich das Problem, dass die Tabellen aufgrund von dem Zeichen "-" nicht den gleichen Namen haben können wie die ComboBox_Residenz. Deshalb bräuchte ich noch eine Lösung wie ich den Residenzen die Namen der Tabelle zuweisen kann oder die Namensgebung bei Tabellen umgehen kann *wink.gif*

    Falls es dafür keine kürzere Lösung gibt konnte ich durch eure Hilfe aber schon den Großteil des Makros sparen. Vielen Dank!
     
  5. Du kannst Tabellen auch über den Index ansprechen (ohne Namen)

    Worksheets(Index)

    Grüße
     
  6. Wie würde das über den Index funktionieren?

    Habe bei den Ebenen jetzt nämlich das selbe Problem, dass die Ebenen als "1. OG" in der UserForm stehen, die Tabelle aber "1OG" heißt..

    LG
     
  7. Ich habe das mit dem ListIndex hinbekommen. Vielen Dank!

    Vielleicht könnt ihr mir ja noch bei weiteren Fragen helfen..

    1. Ich befülle eine ComboBox mit Werten aus einer externen Datei per .List. Es gibt jedoch auch die Möglichkeit Werte aus einer Tabelle per Suchfunktion in die ComboBox zu ziehen. Wie kann ich dort eine Fehlermeldung einbauen, sodass nur Werte aus .List angenommen werden?

    2. Ich drücke bei UserForm1 einen Button und gelange in UserForm2. Ist es möglich, der UserForm2 erst beim Activate Werte aus der UserForm1 zu übergeben? Habe es bis jetzt nur hinbekommen, wenn ich die Werte bereits beim Button vorgebe..

    Hoffe ihr könnt es auch ohne UserForm halbwegs verstehen, sorry dafür und vielen Dank schon im Voraus!
     
  8. VBA Code für UserForm kürzen

    Du meinst Index - Nicht Listindex. Oder?


    Vielleicht könnt ihr mir ja noch bei weiteren Fragen helfen..

    Code:
    Keine Ahnung was du meinst. Vielleicht skizzierst du es mal in Form einer Tabelle. Und lad doch bitte deine Datei mit UF hoch.
    1.Wird keiner hier sowas nachbauen,
    2.fällt antworten ohne doch sehr schwer



    Sicher kannst du den Moment der Übergabe bestimmen. Aber auch da. Wenn man nicht sieht was du machst, fällt es schwer dem zu folgen.


    Hoffe ihr könnt es auch ohne UserForm halbwegs verstehen, sorry dafür und vielen Dank schon im Voraus!

    Grüße Jack
     
    Zuletzt von einem Moderator bearbeitet: 9. Februar 2021
  9. Moin!
    Das mit dem Namen für die Tabellenblätter hatte ich bei mir schon mit replace mit gelöst gehabt. Bzgl. der Combobox kannst du der ein Exit oder Change Event geben. Je nachdem was du mit reinziehen meinst. In dem Ereignis prüfst du dann den Eintrag mit den Einträgen in der Listbox. Geht zB mit einer Schleife und einem Vergleich.
    Bei der UF2 kannst du auch das activate Ereignis nutzen. Wenn die UF aktiviert wird, springt der Code an und holt sich je nachdem die Daten aus der UF1. Die sollte dazu aber nicht beendet sein.
    VG
     
    1Matthias, 24. Dezember 2020
    #9
  10. Moin zusammen,

    vorab wünsche ich erstmal ein frohes sowie besinnliches Fest und hoffe euch und euren Familien geht es gut!

    Anbei ist jetzt die Beispieldatei.

    Ich habe die Tabellenreiter rausgelöscht, aber an sich wären 17 Reiter und je nach Auswahl der Residenz würden die Daten in den entsprechenden Reiter eingetragen werden.

    Meine Probleme sind folgende:

    1. Durch den Button "Suche" würden die Daten anhand der Residenz und der Nummer in die entsprechenden Felder der UserForm eingetragen. Das klappt alles perfekt, jedoch müssen Fehler abgefangen werden, wenn die Werte aus den Tabellen nicht mit denen aus der Datenbank übereinstimmen. Hauptsächlich benötige ich das für die ComboBoxen.

    2. Baut auf dem 1. Problem auf. Ich will, dass vor dem Wechsel von UserForm1 in weitere UserFormen die ComboBox_Sachbearbeiter und ComboBox_Angezeigt_an verglichen werden, ob diese Werte in der Datenbank vorhanden sind, da darauf folgende Prozesse mit den Daten weiterarbeiten.

    3. Das Abrufen der Daten von UserForm2/3/4 aus klappt bei mir nicht, obwohl UserForm1 geöffnet ist. Deshalb habe ich es wieder so gelöst, dass ich sie bereits in UserForm1 übergebe.

    4. Wenn ich bspw. in UserForm1 die ComboBox_Beweissicherung auswähle, dann etwas anderes auswähle und erneut die ComboBox öffne, zeigt er mir die Werte im Dropdownmenü doppelt an. Kann ich dagegen etwas machen?

    5. Die Datei braucht allgemein ziemlich lange zum Öffnen und es dauert bis die UserForm1 lädt. Habt ihr dafür Tipps, wie ich das verbessern kann?

    Ich weiß es ist viel, aber vielen Dank schon mal im Voraus und ich hoffe es macht euch nicht zu große Umstände.

    Schöne Feiertage weiterhin!
     
  11. \@1Matthias das mit dem Namen der Tabellenblätter habe ich dank dir mit dem Replace hinbekommen!

    Danke dafür!
     
  12. zu 4. du füllst die Liste im Activate event. das wird schon mal öfter durchlaufen. gerade wenn du "was Anderes" machst. es sollte reichen davor ein .clear zu setzen. aber die evtl bereits bestehende Auswahl geht dabei verloren.

    zu 5. leider blockiert sich mein Excel weil deine UF Dateien öffnen will, die nicht existieren. Eine Prüfung davor wäre nicht schlecht. Wieso erzeugt du eine neue Excel Instanz für die Datenbankdateien?

    Ohne passende Dateien läßt sich der Rest nicht gut testen.
     
  13. VBA Code für UserForm kürzen

    Moin!
    Zu 1. Da müsstest du überprüfen, ob der Wert schon da ist. Da kannst du eine eigene Funktion nehmen, an die du den zu prüfenden Wert und den Comboboxnamen übergibst. Damit kannst du es für mehrere Boxen nutzen. Könnte bspw. so aussehen:
    Code:
    zu2. Weiß nicht, wo das auftritt. Im Zweifel dort auch mit einer Schleife prüfen, ob sie vorhanden sind. Evtl. kannst du da ja die Funktion von 1 nehmen.

    zu3. Lässt sich schlecht nachverfolgen.
    VG
     
    1Matthias, 27. Dezember 2020
    #13
  14. Servus Leute!

    Sorry, dass ich mich jetzt erst wieder melde. Ich hoffe erstmal Ihr hattet besinnliche Feiertage und seid gut ins neue Jahr gekommen!

    Leider ist das Dokument mittlerweile zu groß um es hochzuladen... habt ihr Tipps wie ich es trotzdem hochladen kann?

    Ich habe viel von euren Tipps umgesetzt, eigene aber leider nicht verstanden..

    @ralf_bx zu 5.: würde es allgemein schneller gehen wenn ich alle Dateien zu einer zusammenfasse oder würde es sich nichts nehmen, weil die Datei dann so groß ist?

    @1Matthias zu 1.: kannst du mir das nochmal genauer erklären? Ich müsste zum einen Fehler abfangen wenn durch die Suchfunktion Daten aus der Liste in die UserForm eingespielt werden, die jedoch nicht in den ComboBoxen (Werte aus Datenbank) hinterlegt sind. Zum anderen würde ich sonst gerne allgemein alle Fehler abfangen, egal welcher Art, da die Anwender sonst ja automatisch in das Makro gelangen...

    Dann noch eine Frage. Habt ihr eine Idee wie ich den folgenden Code kürzen kann? Das Problem ist, dass der Wert der Residenz nicht mit dem Wert krzlsr übereinstimmt. Residenz wäre bspw. ein Stadtname wie München, das Kürzel lässt sich aber nicht pauschal in "SR MUE" etc. zusammenfassen. Das selbe gilt auch für den Seniorenpark in der Briefvorlage. Der Bearbeiter ist in der Datenbank gelistet.

    Code:
    Ich weiß es ist nicht optimal ohne Datei, aber vielleicht hat ja trotzdem jemand eine Idee. Vielen Dank wieder im Voraus!
     
  15. was genau hast du nicht verstanden?
    wie groß ist die Datei denn jetzt?

    Man kann Dateien auch als Ziparchiv erstellen und hochladen.
    Man kann sie bei anderen Filehostern hochladen und den Link posten usw.#

    Aber keine persönlichen Daten in der Datei lassen.
     
    ralf_bx, 12. Januar 2021
    #15
Thema:

VBA Code für UserForm kürzen

Die Seite wird geladen...
  1. VBA Code für UserForm kürzen - Similar Threads - VBA Code UserForm

  2. Excel VBA - Code Hilfe (Spalten, Werte kopieren etc.)

    in Microsoft Excel Hilfe
    Excel VBA - Code Hilfe (Spalten, Werte kopieren etc.): Hallo, ich benötige Hilfe für ein Problem, welches ich leider selbst schwerlich als Anfänger nicht lösen kann: Ich möchte von dem Tabellenblatt "Tabelle1" aus den Zellen B8:B14, K8:K14, B18:B25,...
  3. VBA Code " Zeilenhöhe bei Verb. Zellen Funktioniert fasst"

    in Microsoft Excel Hilfe
    VBA Code " Zeilenhöhe bei Verb. Zellen Funktioniert fasst": Hallo Leute dieser Code für Zellenhöhe bei Verbundenen Zellen Funktioniert fast. Ich habe ein Code von jemand anderem bekommen der nicht in einem Forum ist. Ich kann gerade diese Person nicht...
  4. PDF mit Namen,Datum speichern im Zielordner

    in Microsoft Excel Hilfe
    PDF mit Namen,Datum speichern im Zielordner: Hallo, habe das Problem den Namen in Zelle D2, Vorname in Zelle D5 , das Datum steht in der Zelle B 10 und soll beim speichern so angezeigt werden (Max Mustermann 2023 Oktober) wie und wo muß ich...
  5. Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen

    in Microsoft Excel Hilfe
    Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen: Hallo Zusammen, mein erster Beitrag hier, also schon mal Sorry im Voraus, wenn unvollständig beschrieben *:)* Ich habe das Forum schon nach einem brauchbaren Lösungsansatz durchsucht, bin aber...
  6. UserForm zum bearbeiten von Tabellen und speichern

    in Microsoft Excel Hilfe
    UserForm zum bearbeiten von Tabellen und speichern: Guten Tag Ich habe leider ein Problem, das mich zur Verzweiflung bringt. Vielleicht findet hier jemand einen Lösung für mein Problem. Ich bekommen leider einen Laufzeitfehler '1004'. Zur...
  7. VBA Code Tabellenblatt kopieren und UserForm

    in Microsoft Excel Hilfe
    VBA Code Tabellenblatt kopieren und UserForm: Hallo, ich hoffe mir kann jemand helfen. Schon mal vielen Dank für die Unterstützung. Folgende Thematik: In dem Blatt 1 ist ein ComandButton. Mit Klick soll über VBA folgendes abgefragt...
  8. Userform code - "best practices"?

    in Microsoft Excel Hilfe
    Userform code - "best practices"?: Hallo Ich arbeite mit Userforms. Wo speichert ihr den Code für die Formulare? In den Userforms oder in Module? Gruss Maria
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden