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; schau dir mal deine UserForm_QueryClose und UserForm_Terminate subs an. die hast du z.b. so "UserForm4" benannt. Also mit dem Namen der Userform.... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von LiGru, 21. Dezember 2020.

  1. VBA Code für UserForm kürzen


    schau dir mal deine UserForm_QueryClose und UserForm_Terminate subs an.

    die hast du z.b. so "UserForm4" benannt. Also mit dem Namen der Userform. Wenn du die Funktionen aus dem Dropdown des Editors erstellst, dann fehlen dort die Zahlen. Und dann werden die auch durchlaufen.

    zudem wird queryclose und terminate nacheinander durchlaufen. dort stehen gleiche Codes drin, das gibt wieder Fehler. Das unload me in diesen beiden subs ist überflüssig, da in dem Moment schon das Unload läuft.

    ich bin gespannt auf deine Zusammengefasste Datei. Sensible Daten kann man anonymisieren. aber löschen bringt nur Fehler wenn sie nicht abgefangen werden.


    gruß

    rb
     
    ralf_bx, 18. Januar 2021
    #31
  2. "Wenn du die Funktionen aus dem Dropdown des Editors erstellst, dann fehlen dort die Zahlen. Und dann werden die auch durchlaufen." - Den Punkt verstehe ich leider nicht. Kannst du das einmal für Laien erklären?

    Kann ich bei beiden - QueryClose und Terminate - das Unload Me rausnehmen? Ich dachte ich muss wenigstens bei einem vom beiden das Unload Me drinlassen, falls die UserForm durch das "x" geschlossen wird.

    Wie kann ich die Daten denn am besten anonymisieren? Und wie lade ich die Datei für dich am besten hoch? Ist jetzt 1.500 kb groß.
     
  3. Ich habe hier im Forum einen Code gefunden, der die Liste anonymisiert. Das Problem ist, dass die sensiblen Daten zwar perfekt anonymisiert werden, aber ich ja darauf angewiesen bin, dass die Daten auch übereinstimmen.

    Zudem muss ich die Reiter und den Code von Hand anpassen, da mache ich lieber gleich alles selber *entsetzt

    Bräuchte nur einen Tipp wie ich die Datei am besten hochlade.
     
  4. VBA Code für UserForm kürzen

    ralf_bx, 19. Januar 2021
    #34
  5. Anbei jetzt endlich die Datei. Du musst dir nur vorstellen, dass es von den Listen und Raumtabellen nicht nur 2 sondern 17 gibt, aber das macht ja an sich kein Unterschied.

    Manche eben besprochenen Sachen sind noch nicht umgesetzt.

    Ich hoffe es sind nicht zu viele Fehler drin, sodass es dich noch mehr Nerven kostet *rolleyes.gif*
     
  6. so ich habe dir mal was zum knabbern hingelegt.

    ein paar Funktionen mit Parametern, die die Arbeit etwas erleichtern sollen.
    die UF1 habe ich etwas umgebaut. Ist nur ein Versuch die Elemente thematisch zusammenzufassen.
    Im Code der UF1 habe ich den alten Code auskommentiert und die Anwendung der eigenen Funktionen eingepflegt.
    Die Nutzung sollte selbst erklärend sein. Andernfalls frag!

    In der Datei habe ich die Vorlagentabellen alle rausgehauen. Wegen dieser bekloppten Dateigrößenbeschränkung. Die Tabelle Alle beinhaltet die mir bisher bekannten Raumnummern.
    Die Eintragung der Werte in die Zellen habe ich ebenfalls als Funktion ausgelagert. Du hattest dort schon zwei Funktionen dafür gemacht. Mir war nicht so ganz klar warum du nur Teile des Datensatzes zurückschreibst. Im Grunde werden alle Daten in die Felder gelesen und dann kann man auch alle wieder zurückschreiben.

    die globale Variable sAktOption erhält immer den aktuellen Namen des Optionbuttons , der gerade auf true ist. Das dürfte dir bei den wenns und abers evtl. etwas Mühe sparen.

    gruß

    rb
     
    ralf_bx, 19. Januar 2021
    #36
  7. Vielen Dank dafür, es sieht so weit schon gut aus! Ich werde mir alles genau angucken und mich dann melden, falls ich etwas nicht verstehe. Es wird aber ein bisschen dauern bis ich alles durchgeguckt und halbwegs verstanden habe *biggrin.gif*

    Ich habe noch zwei Fragen..

    1. Ist es möglich eine Art Vorlage zu haben? Ich habe in der Datei ja die Briefvorlagen, die perfekt befüllt werden. Um Speicherplatz zu sparen, wäre es doch aber sinnvoller, die Vorlage nach jedem benutzen wieder zurückzusetzen, sodass sie wieder leer ist. Hast du eine Idee wie ich das am besten löse?

    2. Ich habe in den Foren gelesen, dass durch Arrays viel Speicherplatz gespart werden kann und die Abfrage leichter sowie schneller ist. Was hältst du davon, wenn man die Mangellisten, Datenbank und Raumnummern in ein Array schreibt? Ich kenne mich damit nicht so aus, aber ich denke das wäre am Anfang viel Arbeit, doch würde danach schneller und leichter gehen.

    Ich hoffe du reißt mir nicht den Kopf ab, wenn ich mit der Idee jetzt wieder alles umdrehe *rolleyes.gif*
     
  8. VBA Code für UserForm kürzen

    1. Konnte ich schon mit .ClearContents und .PageSetup.CenterHeader = "" lösen, hätte ich auch früher drauf kommen können.

    Habe schon ein paar Fragen zu deinem Code, aber ich stelle lieber nachher alle zusammen *biggrin.gif*
     
  9. dann wirds wohl stimmen. *Smilie
    du mußt trotzdem das Array mit irgend etwas füllen und das muß dann in deiner Datei schon vorhanden sein. Wenn die riesige Datenmenge dann im Array ist, dann befindet sie sich ja auch automatisch im Speicher. Denn das Array ist ja auch nur ein belegter Speicherbereich.
    Sicher es ist schneller nur auf Daten im Speicher zuzugreifen als immer das Workbook abzufragen und dessen Objekte zu nutzen. Aber Hand aufs Herz, wieviel schneller kann das sein, das du es bei deiner Arbeit bemerkst und selbst auch viel schneller arbeitest?

    Die Variante mit der ich die Listen für die Dropdowns hole ist schon angeblich eine der schnellsten. Wenn dein Programm irgendwann mal läuft kannst du ja immer noch dran rumoptimieren.

    eine Frage meinerseits: Die laufende Nr. scheint sehr wichtig zu sein. Denn in fast jeder Contrl_sub wird geprüft ob die vorhanden ist. Den Umgang(Vergabe, Prüfung usw. )mit dieser Nr könnte man nochmal überdenken.

    Gruß

    rb
     
    ralf_bx, 20. Januar 2021
    #39
  10. *grins

    Das Makro an sich läuft jetzt bei mir schon flüssig und öffnet sich sofort. Das Problem ist, dass die Datei bei mir mindestens 15 Sekunden zum Öffnen braucht, deshalb bin ich am überlegen wie ich Daten eventuell einsparen kann.

    Ich habe jetzt 17 Tabellen in denen die einzelnen Mangellisten sind. Was hältst du davon, wenn ich nur eine Tabelle als Vorlage mache und die ganzen Daten ganz simpel ohne Tabelle separat als Datensätze speichere und bei Bedarf in die Vorlage reinziehe. An sich ist es nämlich egal wie die Daten gespeichert werden, es muss nur die Option geben, dass die Liste auch gedruckt bzw. als PDF verschickt werden kann (und trotzdem schön aussieht). Da würde sich die eben genannte Methode doch anbieten oder? So würde ich wenigstens 16 Tabellen + die ganzen Formatierungen sparen. Hoffe es ist verständlich so, wenn nicht frag einfach.

    Die Laufende Nummer ist eigentlich mit am wichtigsten! Jeder Eintrag bekommt eine Nummer (je Residenz) anhand der wir sowie externe die Punkte zuordnen können. Was für eine Idee hast du denn da?

    Dann erstmal zu deinem Code:
    1. Bei deinem Code zeigt er mir direkt beim Öffnen den Fehler "Index außerhalb des gültigen Bereiches" bei der Zeile "Set ws = ThisWorkbook.Worksheets(sSheet)" in der Funktion erzeugeListe. Bin ich gerade einfach nur zu blöd?

    2. Zu deiner Variante beim OptionButton_Status (A/B etc.) - die CommandButtons sollen nicht direkt beim auswählen des Status geöffnet werden, ansonsten soweit perfekt. Habe ich übernommen!

    3. Zu der Lfd. Nr. - Warum würdest du die Lfd. Nr. nicht im Change Ereignis vergeben bzw. was wären die Optionen wie/wann sie sonst vergeben werden soll?

    4. Finde es richtig gut wie du die Abfrage bei den Sachbearbeitern und Gewerken gelöst hast, sodass man angezeigt bekommt was genau der Fehler ist. Ein Sachbearbeiter oder Gewerk kann z. B. nicht in der Datenbank sein, wenn es ein früherer Eintrag war und es entweder zu dem Zeitpunkt die Datenbank noch nicht gab / es nicht erfasst wurde / oder der Sachbearbeiter bspw. nicht mehr im Unternehmen tätig ist.

    5. Bei der Zurückweisung werden zwei Funktionen benötigt (hast du aber glaube ich umgesetzt) da bei der einen Variante ein bestehender Eintrag geändert und zurückgewiesen wird und bei der anderen Variante ein komplett neuer Eintrag angelegt wird, aber direkt zurückgewiesen wird - deshalb der Status immer auf D.

    Bei deinen ganzen Funktionen etc. brauche ich noch ein bisschen um durchzusteigen, das ist echt komplex.
     
  11. was steht denn in ssheet ? das sollte wie der Name schonsagt ein Blattname sein. Ich habe das mit den Residenznamen und nicht mit den Kürzeln oder ner Nr gemacht.
    Das schöne an der function für die Listen, einfach den gesuchten Spaltennamen als Parameter anpassen und fertig.

    das war aber so im Code drin.

    Naja anhand der lfdNr erkennt man ja eigentlich so rein gar nichts. In dem Fall würde ich sie gar nicht so in den Vordergrund stellen. Im Grunde ist sie nur ein Zähler oder Index einer bestimmten Tabelle. Wäre es eine Nr aus der man auch was ablesen könnte. Also sowas wie eine ID mit Kürzel und Datum und und und, dann wäre die Information schon wichtig genug um sie im UF zu zeigen. Aber hier kann sie im Hintergrund als Vergleichsnr agieren. Sobald du die Residenz änderst, hat die lfdNr mit dem gleichen Wert eine andere Bedeutung.

    danke. An die möglichen Änderungen habe ich gar nicht gedacht. Naja für so einen Fall muß auch eine Lösung her. Zumindest beim Zurückschreiben der Daten sonst gehen Informationen verloren. Man brauch immer einen Schuldigen. Dann wäre für das Zurückschreiben von vorhandenen Datensätzen evtl ein neuer Datensatz notwendig. Um das nachverfolgbar zu machen wäre dann auch interne Zeitstempel gut.

    in der Funktion zum Eintragen der Daten mach ich es von der lfdnr abhängig ob eine neue Zeile geschrieben wird oder in eine vorhandene Daten eingetragen werden. die ldfnr wird übergeben wenn nicht,dann wird default 0 angenommen und eine neue Zeile erzeugt. Wie die neue Zeile in einem Listobject angelegt wird, mußte ich erst recherchieren.


    die datei: endung .txt entfernen und als modul importieren. Ich habe die Functions dokumentiert. den Inhalt mußt du nicht analysieren. Nur wenn es Fehler gibt.


    gruß rb
     
    ralf_bx, 20. Januar 2021
    #41
  12. 1.
    Alles klar, dann gucke ich mir das nochmal an!

    2. Glaube das war in der alten Datei so drin, aber in der neuen die ich hochgeladen habe nicht mehr. Ich hätte vielleicht auf die Änderungen hinweisen können, sorry!

    3. Da hast du wohl recht mit der laufenden Nummer, dann hat sich das auch erledigt.

    4. Es ist so, dass das Kürzel von dem Mitarbeiter bei dem Eintrag vorhanden ist. Dadurch kann man im Endeffekt den Schuldigen ausfindig machen. Seine Daten sind nur nicht mehr in dieser Datenbank drin. Aber eine gute Idee von dir, nehme das auf jeden Fall mal mit ins Gespräch!

    5. Dann hatte ich das wohl nicht ganz verstanden gucke ich mir auch nochmal an, danke!

    Bin leider erst Freitag wieder im Büro und kann es testen, aber ich melde mich dann sofort!
     
  13. VBA Code für UserForm kürzen

    Moin Ralf,

    vielen Dank nochmal für die Datei und das du es noch ausführlicher für mich erklärt hast, aber um da durchzusteigen werde ich ein bisschen brauchen! Will nicht immer alles fragen, sondern versuchen es selber zu verstehen.

    Vielleicht kannst du mir ja aber in der Zwischenzeit bei einem ganz anderem Problem helfen - Datei im Anhang.

    Also das Ziel ist es, nur den Button zu drücken und die entsprechenden Datensätze in die Tabellenvorlage "Liste" zu kopieren. Habe einen Code selber geschrieben, der auch bei mir gut funktioniert. Jetzt zu den Problemen:

    1. Bei großen Datenmengen braucht der Code logischerweise lange, da er natürlich jede Zeile durchgeht. Hast du da vielleicht eine bessere Alternative oder weißt wie ich meinen Code verbessern kann?

    2. Kriege das mit dem ganzen zuweisen von den Variablen etc. noch nicht wirklich hin, sodass es unter Option Explicit läuft. Kannst du mir das an meinem Beispiel versuchen zu erklären?

    Die nächsten Punkte wären eher Extras, falls es nicht geht, ist es nicht schlimm.

    3. In meinem Code fügt er am Ende immer noch eine leere Zeile ein. Kann ich das verhindern?

    4. Wie kriege ich es hin, dass nur die Werte kopiert werden und keine Formate? Habe es mit .PasteSpecial Paste:=xlValues versucht, aber da ging der Code bei mir nicht mehr..

    Hoffe ich raube dir nicht wieder zu viel Zeit und Nerven! Wenn ich für das neue Thema einen eigenen Thread erstellen soll, dann einfach sagen.

    Danke schon mal!
     
  14. zu 1. vermeide select

    zu 2. wenn du im Editor auf Debuggen und Kompilieren klickst ,dann wird dir angezeigt welche Fehler da sind ohne das das Programm startet. Dann kannst du inRuhe die fehlenden Variablen per Dim einbinden.
    Wähle den Datentyp entsprechend oder lass ihn weg ,dann ist es ein Variant.

    zu 3 weis ich nicht ,scheint zu laufen mit den Anpassungen
    zu 4 siehe beispiel

    das mit den Listobjects ist nicht so simpel wie die Range() oder cells() Addressierung. Ich muß mich da auch erst mal reinfuchsen.
    Aber der Vorteil liegt darin das du nur in der Tabelle agierst und nicht irgendwo im Blatt.
    Ich habe deinen Code soweit auskommentiert, das nur das übrig bleibt was nötig ist. Den Rest hab ich passend gemacht.
     
    ralf_bx, 22. Januar 2021
    #44
  15. Wie schafft man es so viel über Makros zu wissen wie du? Echt verblüffend *boah

    2. Das mit dem Debuggen und Kompilieren wusste ich schon, aber ich weiß immer nicht was für einen Datentyp ich wählen soll oder wie ich das mit dem set zuweise und wenn ich dann deine ganzen variablen sehe *depressed

    3. Jetzt habe ich es, dass er oben eine Zeile freilässt. Das hatte ich bei mir am Anfang auch, weil er die erste Zeile nicht als leer erkannt hat irgendwie..

    4. Läuft!

    Das stimmt auf jeden Fall, aber wie du schon sagst, da muss man sich reinfuchsen. Wird noch dauern bis ich selber sowas richtig anwenden kann *biggrin.gif*

    Vielen Dank wieder für deine Hilfe, ich melde mich wenn ich deinen Code verstanden habe!
     
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. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  3. VBA Code für Zeilen ausblenden einblenden mit JA/Nein

    in Microsoft Excel Hilfe
    VBA Code für Zeilen ausblenden einblenden mit JA/Nein: Hallo, habe eine Exceltabelle, bei der ich bei einer Zelle eine Ja/Nein abfrage mache, wenn in der Zelle Nein steht, dann soll ein bestimmter Zeilenbereich, den ich definieren möchte, ausgeblendet...
  4. VBA Code ohne ergebnis

    in Microsoft Excel Hilfe
    VBA Code ohne ergebnis: Hallo, ich habe einen VBA Code der in meiner Tabelle nicht funktioniert. Kann mir vielleicht jemand bei der Korrektur ggf. weiter helfen? Danke und Gruß Private Sub Worksheet_Change(ByVal Target...
  5. VBA Code Anpassen "Wert Einfügen statt Formel"

    in Microsoft Excel Hilfe
    VBA Code Anpassen "Wert Einfügen statt Formel": Hallo alle zusammen. Ich benötige bitte Hilfe von einem Experten, da ich mit meinem Code unzufrieden bin und dieser bei größeren Datenmengen respektive Zeilen ziemlich langsam wird. Wie müsste man...
  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