Supportnet / Forum / Tabellenkalkulation
Textfelder aktualisieren
Frage
Ich bin mit meiner Geduld am Ende!!!!! Bitte helft mir!!
Hi zusammen,
ich habe in einem Tabellenblatt 4 Textfelder, welche beim Ausführen des folgenden Ereignisses durch Werte eines anderen Tabellenblattes gefüllt werden (Beispiel):
Private Sub Worksheet_Activate()
Textfeld1 = sheets("Tabelle2").Range("A1")
End Sub
Das Feld A1 wird aus einer Userform gefüttert. Nun: Möchte ich das Tabellenblatt mit den Textfeldern (aus der Userform heraus) drucken, sollen diese 4 Textfelder vorgängig aktualisiert werden. Dies wollte ich damit erreichen, indem ich das Tabellenblatt vorgängig aktiviere (Sheets("Tabelle1").Select).
Ein erstes Mal funktioniert dies ja auch, ändere ich aber dann in der Userform den Wert für das Feld A1, werden die Textfelder nicht mehr aktualisiert... Das Feld A1 hingegen schon!
Hoffe irgend jemand hat erbarmen...
Danke schon mal zum Voraus
Rahel
Antwort 1 von Ahnan
Hallo,
warum schreibst du deine Aktualisierungen (der Textfelder) nicht in das Workbook-Ereignis
Workbook_BeforePrint
Also in der Art:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Textfeld1 = sheets("Tabelle2").Range("A1")
End Sub
Dann werden die Textfelder vor jedem Drucken aktualisiert !
Gruss
warum schreibst du deine Aktualisierungen (der Textfelder) nicht in das Workbook-Ereignis
Workbook_BeforePrint
Also in der Art:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Textfeld1 = sheets("Tabelle2").Range("A1")
End Sub
Dann werden die Textfelder vor jedem Drucken aktualisiert !
Gruss
Antwort 2 von Rahel04
Hi Ahnan,
scheint zu funktionieren; ...bin eben nicht wirklich ein Excel-*Z*..! Aber, wie verweise ich nun auf die Textfelder?
Also in dem Sinn:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
??Textfeld??? = Sheets("Tabelle2").Range("A1")
End Sub
Die Textfelder befinden sich eben nicht in der Tabelle 2..
Danke schon mal
Rahel
scheint zu funktionieren; ...bin eben nicht wirklich ein Excel-*Z*..! Aber, wie verweise ich nun auf die Textfelder?
Also in dem Sinn:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
??Textfeld??? = Sheets("Tabelle2").Range("A1")
End Sub
Die Textfelder befinden sich eben nicht in der Tabelle 2..
Danke schon mal
Rahel
Antwort 3 von Rahel04
Ich schon wieder.. Sollte versuchen das Problem heute noch zu beheben.
Kann mir jemand sagen, wie ich diese Textfelder mit den Zellinhalten bei Workbook_BeforePrint aktualisieren kann? Wie kann ich auf diese verweisen?
Danke für nen Tipp.
Rahel
Kann mir jemand sagen, wie ich diese Textfelder mit den Zellinhalten bei Workbook_BeforePrint aktualisieren kann? Wie kann ich auf diese verweisen?
Danke für nen Tipp.
Rahel
Antwort 4 von Ahnan
Hallo,
wenn es sich um eine TextBox aus der Symbolleiste Steuerelemente-Toolbox handelt:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Tabelle1").TextBox1.Text = Sheets("Tabelle2").Range("A1")
End Sub
In dem Fall wäre die TextBox in Tabelle1 !
Musst du angleichen u. natürlich auf die korrekte Zuweisung (TextBox u. 1 oder 2.....) achten !
Gruss
wenn es sich um eine TextBox aus der Symbolleiste Steuerelemente-Toolbox handelt:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Tabelle1").TextBox1.Text = Sheets("Tabelle2").Range("A1")
End Sub
In dem Fall wäre die TextBox in Tabelle1 !
Musst du angleichen u. natürlich auf die korrekte Zuweisung (TextBox u. 1 oder 2.....) achten !
Gruss
Antwort 5 von knattamatt
freak?
Antwort 6 von Rahel04
Danke Ahnan, für deine Mühe.
Ich weiss nun nicht ob ich einfach unfähig bin oder was...! Ich werde echt WAHNSINNIG!!!!!
Es funktioniert leider immer noch nicht. Erhalte jeweils nur den freundlichen Laufzeitfehler 438.
Ich habs genau so gemacht wie du beschrieben hast. Die Namen habe ich vorgängig natürlich angepasst.
Und ja, es handelt sich um eine TextBox aus der Symbolleiste Steuerelemente-Toolbox.
Hättest Du vielleicht noch andere Ideen auf Lager? Kompliziert oder einfach, is egal, hauptsache es funktioniert irgendwie.
Gruss Rahel
Ich weiss nun nicht ob ich einfach unfähig bin oder was...! Ich werde echt WAHNSINNIG!!!!!
Es funktioniert leider immer noch nicht. Erhalte jeweils nur den freundlichen Laufzeitfehler 438.
Ich habs genau so gemacht wie du beschrieben hast. Die Namen habe ich vorgängig natürlich angepasst.
Und ja, es handelt sich um eine TextBox aus der Symbolleiste Steuerelemente-Toolbox.
Hättest Du vielleicht noch andere Ideen auf Lager? Kompliziert oder einfach, is egal, hauptsache es funktioniert irgendwie.
Gruss Rahel
Antwort 7 von Ahnan
Hallo Rahel,
so auf die Entfernung habe ich keine andere Lösung ! Denn bei mir funktioniert mein Code einwandfrei ! Da müsste ich mir die Datei schon anschauen, um zu sehen, was du noch alles da rein gepackt hast u. was den Laufzeitfehler auslöst.
Wenn du magst:
held1233@aol.com
Ansonsten, viel Glück
Gruss
so auf die Entfernung habe ich keine andere Lösung ! Denn bei mir funktioniert mein Code einwandfrei ! Da müsste ich mir die Datei schon anschauen, um zu sehen, was du noch alles da rein gepackt hast u. was den Laufzeitfehler auslöst.
Wenn du magst:
held1233@aol.com
Ansonsten, viel Glück
Gruss
Antwort 8 von Rahel04
Hi Ahnan,
danke trotzdem für Deine Mühe. Habe nun was anderes versucht. Die Aktualisierung wird mittels einer Befehlsschaltfläche auf dem Tabellenblatt vorgenommen.
Betätige ich diesen Button, funktionierts.
Wie aber kann ich diesen Button nun aus einer Form (VBA) heraus aktivieren? Habs wie folgt versucht:
Sheets("Tabelle1").btn_aktualisieren.Value = True
Geht "natürlich" auch nicht... Hättest hier ne Idee?
Gruss Rahel
danke trotzdem für Deine Mühe. Habe nun was anderes versucht. Die Aktualisierung wird mittels einer Befehlsschaltfläche auf dem Tabellenblatt vorgenommen.
Betätige ich diesen Button, funktionierts.
Wie aber kann ich diesen Button nun aus einer Form (VBA) heraus aktivieren? Habs wie folgt versucht:
Sheets("Tabelle1").btn_aktualisieren.Value = True
Geht "natürlich" auch nicht... Hättest hier ne Idee?
Gruss Rahel
Antwort 9 von coros
Hallo Ihr beiden,
das was Du vor hast, geht auch aus einer UserForm heraus. Bei den Textfeldern in dem Tabellenblatt handelt es sich um OleObjecte und so müssen sie auch angesprochen werden. Mal als Beispiel einen Code, der Dir die Textfelder 1 bis 4 in Tabellenblatt "Tabelle1" mit den Daten aus Tabellenblatt "Tabelle2" Bereich A1:A4 füllt und danach das Tabellenblatt "Tabelle1" ausdruckt. Füge den Code in das VBA Projekt der UserForm ein und platziere in der UserForm einen ComandButton mit dem Namen "CommandButton1".
Ich hoffe, Du kommst klar mit dem Code. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
das was Du vor hast, geht auch aus einer UserForm heraus. Bei den Textfeldern in dem Tabellenblatt handelt es sich um OleObjecte und so müssen sie auch angesprochen werden. Mal als Beispiel einen Code, der Dir die Textfelder 1 bis 4 in Tabellenblatt "Tabelle1" mit den Daten aus Tabellenblatt "Tabelle2" Bereich A1:A4 füllt und danach das Tabellenblatt "Tabelle1" ausdruckt. Füge den Code in das VBA Projekt der UserForm ein und platziere in der UserForm einen ComandButton mit dem Namen "CommandButton1".
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
With Sheets("Tabelle1")
.OLEObjects("TextBox1").Object.Text = Sheets("Tabelle2").Range("A1")
.OLEObjects("TextBox2").Object.Text = Sheets("Tabelle2").Range("A2")
.OLEObjects("TextBox3").Object.Text = Sheets("Tabelle2").Range("A3")
.OLEObjects("TextBox4").Object.Text = Sheets("Tabelle2").Range("A4")
.PrintOut
End With
End SubIch hoffe, Du kommst klar mit dem Code. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 10 von Rahel04
Hi,
erhalte leider wiederum einen Laufzeitfehler. Hab den Code bei einem ComandButton hinterlegt und einfach nur die Namen ausgewechselt.
Muss ich, damit diese OleObjecte angesprochen werden können, erst was in Excel einstellen?
Gruss
Rahel
erhalte leider wiederum einen Laufzeitfehler. Hab den Code bei einem ComandButton hinterlegt und einfach nur die Namen ausgewechselt.
Muss ich, damit diese OleObjecte angesprochen werden können, erst was in Excel einstellen?
Gruss
Rahel
Antwort 11 von coros
Hallo Rahel,
was für einen Laufzeitfehler erhältst Du? Heißen Deine Blätter ebenfalls "Tabelle1" und "Tabelle2". Heißen Deine Textboxen ebenfalls TextBox1. TextBox2 usw.?
Du musst schon etwas mehr über Deine Datei berichten. Denn mit dem hellsehen haben wir es hier alle nicht so.
Bei Bedarf kann ich Dir auch mal eine Beispieldatei zukommen lassen, in der das funktioniert.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
was für einen Laufzeitfehler erhältst Du? Heißen Deine Blätter ebenfalls "Tabelle1" und "Tabelle2". Heißen Deine Textboxen ebenfalls TextBox1. TextBox2 usw.?
Du musst schon etwas mehr über Deine Datei berichten. Denn mit dem hellsehen haben wir es hier alle nicht so.
Bei Bedarf kann ich Dir auch mal eine Beispieldatei zukommen lassen, in der das funktioniert.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 12 von Rahel04
Hallo Oliver,
ich habe die Namen "Tabelle1" usw... auf meine eigenen angepasst. An dem kanns also nicht liegen. Als Fehler erhalte ich:
Laufzeitfehler ´438´
Objekt unterstützt diese Eigenschaft oder Methode nicht...
Aber wenn du mir so ne Datei schicken könntest, das wäre WUNDERBAR! Geht hier im Büro allerdings nur über meinen "Chef", aber das macht ja nix:
patrick.hammel@bluewin.ch
Danke schon mal (bin ja gespannt)
Rahel
ich habe die Namen "Tabelle1" usw... auf meine eigenen angepasst. An dem kanns also nicht liegen. Als Fehler erhalte ich:
Laufzeitfehler ´438´
Objekt unterstützt diese Eigenschaft oder Methode nicht...
Aber wenn du mir so ne Datei schicken könntest, das wäre WUNDERBAR! Geht hier im Büro allerdings nur über meinen "Chef", aber das macht ja nix:
patrick.hammel@bluewin.ch
Danke schon mal (bin ja gespannt)
Rahel
Antwort 13 von coros
Hallo Rahel,
bevor ich Dir eine Datei schicke, noch eine Frage zu dem Laufzeitfehler: Was wird beim Betätigen der Debuggtaste, in dem Code gelb markiert?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
bevor ich Dir eine Datei schicke, noch eine Frage zu dem Laufzeitfehler: Was wird beim Betätigen der Debuggtaste, in dem Code gelb markiert?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 14 von Rahel04
Hi Oliver,
das ist die folgende Zeile:
.OLEObjects("TextBox1").Object.Text = Sheets("Tabelle2").Range("A1")
Gruss Rahel
das ist die folgende Zeile:
.OLEObjects("TextBox1").Object.Text = Sheets("Tabelle2").Range("A1")
Gruss Rahel
Antwort 15 von coros
Hi Rahel,
sorry, dass ich mich erst jetzt wieder melde, aber aus Zeitgründen bin ich erst gerade dazu gekommen mir Deine Datei anzusehen. Das Problem in Deiner Datei und dem damit auftretenden Laufzeitfehler ist, dass Du keine Textfelder, sondern Labelfelder in Deiner Datei einsetzt. Das Problem, das auch die Fehlermeldung aussagt, ist, dass ein Labelfeld nicht die Eigenschaft ".Text" kennt, sondern anstelle die Eigenschaft ".Caption" hat. Somit muss dann der Teil in Deinem Makro zum Füllen der Labelfelder folgendermaßen lauten:
Tausche den Teilcode in Deiner Datei aus und es funktioniert dann.
Ich hoffe, Du kommst klar. Bei fragen melde Dich noch mal.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
sorry, dass ich mich erst jetzt wieder melde, aber aus Zeitgründen bin ich erst gerade dazu gekommen mir Deine Datei anzusehen. Das Problem in Deiner Datei und dem damit auftretenden Laufzeitfehler ist, dass Du keine Textfelder, sondern Labelfelder in Deiner Datei einsetzt. Das Problem, das auch die Fehlermeldung aussagt, ist, dass ein Labelfeld nicht die Eigenschaft ".Text" kennt, sondern anstelle die Eigenschaft ".Caption" hat. Somit muss dann der Teil in Deinem Makro zum Füllen der Labelfelder folgendermaßen lauten:
Application.ScreenUpdating = False
With Sheets("Begleitbrief")
.OLEObjects("Name_Links_d").Object.Caption = Sheets("Berechnung").Range("BN33")
.OLEObjects("Name_Rechts_d").Object.Caption = Sheets("Berechnung").Range("BN26")
.OLEObjects("Name_Links_f").Object.Caption = Sheets("Berechnung").Range("BN33")
.OLEObjects("Name_Rechts_f").Object.Caption = Sheets("Berechnung").Range("BN26")
End WithTausche den Teilcode in Deiner Datei aus und es funktioniert dann.
Ich hoffe, Du kommst klar. Bei fragen melde Dich noch mal.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 16 von Rahel04
Hallo Oliver,
klappt ja nun eigentlich. Das mit dem Label.. naja, mein Fehler. Aber man lehrt ja nie aus.
Aber es scheint als ob ich nicht fürs Excel geboren wäre: Beim erstmaligen Ausdrucken klappts wunderbar. Ändere ich aber dann die Namen in der Userform, welche in die Tabelle übertragen und dann in die Labels (mit deinem Code) eingelesen werden, wirds wiederum nicht aktualisiert. Funktioniert also nur beim ersten Mal...
Klappen würds wenn ich jeweils wieder das Userform schliesse und erneut öffnen würde, aber das ist ja auch keine Lösung.
Falls Du noch nen letzten Tipp auf Lager hast...
Gruss Rahel
klappt ja nun eigentlich. Das mit dem Label.. naja, mein Fehler. Aber man lehrt ja nie aus.
Aber es scheint als ob ich nicht fürs Excel geboren wäre: Beim erstmaligen Ausdrucken klappts wunderbar. Ändere ich aber dann die Namen in der Userform, welche in die Tabelle übertragen und dann in die Labels (mit deinem Code) eingelesen werden, wirds wiederum nicht aktualisiert. Funktioniert also nur beim ersten Mal...
Klappen würds wenn ich jeweils wieder das Userform schliesse und erneut öffnen würde, aber das ist ja auch keine Lösung.
Falls Du noch nen letzten Tipp auf Lager hast...
Gruss Rahel
Antwort 17 von coros
Hallo Rahel,
also so ganz verstehe ich Dein Anliegen jetzt nicht. Wenn der Button in Deiner UserForm betätigt wird, schließt doch die UserForm. Jedenfalls steht in Deinem Code am Ende der Befehl "Unload Me" und das schließt nun mal Deine UserForm. Somit muss doch die Form sowieso wieder geöffnet werden und dann sollte es doch laut Deiner Aussage auch funktionieren. Oder verstehe ich da jetzt etwas falsch?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
also so ganz verstehe ich Dein Anliegen jetzt nicht. Wenn der Button in Deiner UserForm betätigt wird, schließt doch die UserForm. Jedenfalls steht in Deinem Code am Ende der Befehl "Unload Me" und das schließt nun mal Deine UserForm. Somit muss doch die Form sowieso wieder geöffnet werden und dann sollte es doch laut Deiner Aussage auch funktionieren. Oder verstehe ich da jetzt etwas falsch?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 18 von Rahel04
Hallo Oliver,
du hast natürlich recht, ich wiederspriche mir völlig. Kommt wohl aus meiner Verzweiflung heraus...!
Es ist einfach nur so; manchmal gehts dann und manchmal eben doch nicht. Mehr kann ich dazu nicht sagen. Es ist echt wie verhext.
Habe nun folgendes ausprobiert: Ich klicke auf Drucken, damit all die Codes ausgeführt werden können, inkl. dieser von Dir. Das eigentliche Ausdrucken habe ich aber weggelassen. Hinten im Tabellenblatt sehe ich, dass die Labels nicht aktualisiert werden. Wenn ich die UserForm nun schliesse, kann ich mitverfolgen, wie die Labels angepasst werden. Eigentlich alles wunderbar, würde die Aktualisierung vor dem Schliessen, oder anders gesagt vor dem Ausdrucken, stattfinden.
Hoffe es wird Dir nicht langsam zuviel mit mir, sonst einfach sagen. Ich würds verstehen...
Liebe Grüsse
Rahel
du hast natürlich recht, ich wiederspriche mir völlig. Kommt wohl aus meiner Verzweiflung heraus...!
Es ist einfach nur so; manchmal gehts dann und manchmal eben doch nicht. Mehr kann ich dazu nicht sagen. Es ist echt wie verhext.
Habe nun folgendes ausprobiert: Ich klicke auf Drucken, damit all die Codes ausgeführt werden können, inkl. dieser von Dir. Das eigentliche Ausdrucken habe ich aber weggelassen. Hinten im Tabellenblatt sehe ich, dass die Labels nicht aktualisiert werden. Wenn ich die UserForm nun schliesse, kann ich mitverfolgen, wie die Labels angepasst werden. Eigentlich alles wunderbar, würde die Aktualisierung vor dem Schliessen, oder anders gesagt vor dem Ausdrucken, stattfinden.
Hoffe es wird Dir nicht langsam zuviel mit mir, sonst einfach sagen. Ich würds verstehen...
Liebe Grüsse
Rahel
Antwort 19 von coros
Moin Rahel,
lösche mal die Befehlszeile
Application.ScreenUpdating = False
die vor den Befehlen für das Füllen der Labelfelder steht, heraus. Diese Zeile bewirkt, dass die Bildschirmaktualisierung ausgeschaltet wird. Das macht man, damit man beim Ausführen des Makros nicht ein ständiges Flackern am Bildschirm bekommt, so wie es ja auch bei Deinem Code ist, weil Du z.B. ständig mit den Befehlen
ActiveWorkbook.Worksheets("Blattname").Select
zwischen den Tabellen hin- und herspringen lässt. Mit obigen Befehl sieht man das nicht mehr. In einem normalen Makro wird diese am Ende des Makros automatisch auf True gesetzt und somit wieder ausgeschaltet. Bei der Verwendung in einer UserForm ist das etwas anders. Die Eigenschaft nimmt hier erst beim Entladen der UserForm, also beim Schließen, den Zustand True wieder an oder man setzt sie durch den Befehl
Application.ScreenUpdating = True
wieder auf True.
Noch ein Tipp am Rande, verzichte möglichst auf Select-Anweisungen, also auf z.B.
ActiveWorkbook.Worksheets("Blattname").Select
Man kann zu 99% darauf verzischten. Um Zellen eines bestimmten Blattes anzusprechen muss dieses nicht vorher aktiviert werden. Man kann anstelle
ActiveWorkbook.Worksheets("Berechnung").Select
Cells(3, 66) = Cells(Benutzer_Rechts, 69)
auch
Worksheets("Berechnung").Cells(3, 66) = Cells(Benutzer_Rechts, 69)
schreiben. Wenn, wie in Deiner Datei, mehrere Zellen angesprochen werden soll, packt man das ganze in eine With-Anweisung, was dann z.B. folgendermaßen aussehen würde:
With Worksheets("Berechnung")
.Cells(3, 66) = Cells(Benutzer_Rechts, 69)
.Cells(4, 66) = Cells(Benutzer_Rechts, 70)
.Cells(5, 66) = Cells(Benutzer_Rechts, 71)
.Cells(6, 66) = Cells(Benutzer_Rechts, 72)
.Cells(8, 66) = Cells(Benutzer_Rechts, 73)
.Cells(9, 66) = Cells(Benutzer_Rechts, 74)
.Cells(11, 66) = Cells(Benutzer_Rechts, 75)
.Cells(12, 66) = Cells(Benutzer_Rechts, 76)
.Cells(13, 66) = Cells(Benutzer_Rechts, 77)
.Cells(15, 66) = Cells(Benutzer_Rechts, 78)
End With
Somit entfällt das ständige aktivieren der Tabellenblätter und auch das man das beim Ausführen des Codes am Bildschirm mitverfolgen kann. Außerdem kann es durch viele Select-Anweisungen zu Resorcenproblemen bei größeren VBA Coden kommen, so dass im schlimmsten Fall der PC abstürzen kann.
So, das war´s erst mal. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
lösche mal die Befehlszeile
Application.ScreenUpdating = False
die vor den Befehlen für das Füllen der Labelfelder steht, heraus. Diese Zeile bewirkt, dass die Bildschirmaktualisierung ausgeschaltet wird. Das macht man, damit man beim Ausführen des Makros nicht ein ständiges Flackern am Bildschirm bekommt, so wie es ja auch bei Deinem Code ist, weil Du z.B. ständig mit den Befehlen
ActiveWorkbook.Worksheets("Blattname").Select
zwischen den Tabellen hin- und herspringen lässt. Mit obigen Befehl sieht man das nicht mehr. In einem normalen Makro wird diese am Ende des Makros automatisch auf True gesetzt und somit wieder ausgeschaltet. Bei der Verwendung in einer UserForm ist das etwas anders. Die Eigenschaft nimmt hier erst beim Entladen der UserForm, also beim Schließen, den Zustand True wieder an oder man setzt sie durch den Befehl
Application.ScreenUpdating = True
wieder auf True.
Noch ein Tipp am Rande, verzichte möglichst auf Select-Anweisungen, also auf z.B.
ActiveWorkbook.Worksheets("Blattname").Select
Man kann zu 99% darauf verzischten. Um Zellen eines bestimmten Blattes anzusprechen muss dieses nicht vorher aktiviert werden. Man kann anstelle
ActiveWorkbook.Worksheets("Berechnung").Select
Cells(3, 66) = Cells(Benutzer_Rechts, 69)
auch
Worksheets("Berechnung").Cells(3, 66) = Cells(Benutzer_Rechts, 69)
schreiben. Wenn, wie in Deiner Datei, mehrere Zellen angesprochen werden soll, packt man das ganze in eine With-Anweisung, was dann z.B. folgendermaßen aussehen würde:
With Worksheets("Berechnung")
.Cells(3, 66) = Cells(Benutzer_Rechts, 69)
.Cells(4, 66) = Cells(Benutzer_Rechts, 70)
.Cells(5, 66) = Cells(Benutzer_Rechts, 71)
.Cells(6, 66) = Cells(Benutzer_Rechts, 72)
.Cells(8, 66) = Cells(Benutzer_Rechts, 73)
.Cells(9, 66) = Cells(Benutzer_Rechts, 74)
.Cells(11, 66) = Cells(Benutzer_Rechts, 75)
.Cells(12, 66) = Cells(Benutzer_Rechts, 76)
.Cells(13, 66) = Cells(Benutzer_Rechts, 77)
.Cells(15, 66) = Cells(Benutzer_Rechts, 78)
End With
Somit entfällt das ständige aktivieren der Tabellenblätter und auch das man das beim Ausführen des Codes am Bildschirm mitverfolgen kann. Außerdem kann es durch viele Select-Anweisungen zu Resorcenproblemen bei größeren VBA Coden kommen, so dass im schlimmsten Fall der PC abstürzen kann.
So, das war´s erst mal. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 20 von Rahel04
Hallo Oliver,
so, habe nun noch etwas am Code rumgebastelt, deine Tipps implementiert und noch etwas abgeändert: Ich habe bemerkt, dass die Aktualisierung erst nach dem Druckvorgang durchgeführt wird. Also lasse ich das Übertragen der Namen in die Tabelle und Aktualisieren der Labels beim AfterUpdate der Combobox durchführen. Somit ist dann beim Klick auf ´Drucken´ bereits alles so wies sein muss. Jedenfalls funktioniert jetzt!
An dieser Stelle vielen lieben Dank für deinen unermüdlichen Einsatz!!!
Liebe Grüsse
Rahel
so, habe nun noch etwas am Code rumgebastelt, deine Tipps implementiert und noch etwas abgeändert: Ich habe bemerkt, dass die Aktualisierung erst nach dem Druckvorgang durchgeführt wird. Also lasse ich das Übertragen der Namen in die Tabelle und Aktualisieren der Labels beim AfterUpdate der Combobox durchführen. Somit ist dann beim Klick auf ´Drucken´ bereits alles so wies sein muss. Jedenfalls funktioniert jetzt!
An dieser Stelle vielen lieben Dank für deinen unermüdlichen Einsatz!!!
Liebe Grüsse
Rahel

