Autor
|
Thema: Textbox in Formular leider vorbelegt (4026 mal gelesen)
|
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 27. Mai. 2011 07:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe in verschiedenen Formularen Textboxen, in denen Werte eingegeben werden. Leider ist beim erneuten Öffnen der Formulare wieder der Standardwert (siehe im Anhang die "108") drin. Was muß ich bei den Eigenschaften ändern, damit er den eingegebenen Wert behält? ------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 27. Mai. 2011 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Guten Morgen Pille, soweit ich weiß, bietet dir VBA keine Möglichkeit, von Haus aus / per Drag&Drop, den Wert für die Textbox zu speichern. Du wirst dir also eine Routine überlegen müssen, wo du die Werte speicherst und beim erneuten öffnen ausliest. Dafür bietet sich eine Textdatei an, die in einer definierten Reihenfolge (oder per Trennzeichen) die Werte der Textboxen "merkt", bzw. sofern dein Formular in ein Excel - File eingebettet ist, kannst du dort in einer (ausgeblendeten) Tabelle (sollte dann per VBA auf "xlSheetVeryHidden" gesetzt werden, sonst kann es per Hand wieder eingeblendet werden) die Werte ebenfalls ablegen. Außerdem kannst du beide Möglichkeiten für deine Vorgabewerte nutzen, die dann bei Bedarf überschrieben werden. Sollte ich mich dennoch irren, so bitte ich um Korrektur... [edit] hab ich gerade noch gefunden: http://www.vbarchiv.net/faq/faq_textbox_save.html [/edit] Grüße und HTH Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." [Diese Nachricht wurde von MWN am 27. Mai. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 27. Mai. 2011 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
|
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 27. Mai. 2011 08:25 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Hallo Pille, Eine Userform kann keine Werte Speichern! Das was du bei 'Eigenschaften' einträgst wird beim Initialisieren der Form gesetzt. Dieser Code ist in VBA nicht sichtbar. Es gibt folgende Auswege: 1: in den Eigenschaften wird eine ControlSource eingetragen (in der Regel eine Zelle auf einem Arbeitsblatt), dann wird grundsätzlich dieser Wert in der Form angezeigt und kann auch geändert werden. Die geschieht für den Anwender völlig transparent. 2: man kümmert sich selber um das Laden und Speichern des Wertes. Dazu kann man die Ereignisse 'UserForm_Initialize() bzw UserForm_Terminate() nutzen. Da aber auch hier als Speicherort in der Regel die Zelle eines Arbeitsblattes genutzt wird ergibt das so kaum Vorteile. Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 27. Mai. 2011 08:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, die Werte, die in das Formular eingetragen werden, werden beim Schließen mit z.B. Range("B12").Value = CDec(Me.Blisterabmessung_längs) in eine Zelle geschrieben. Dieses Excel-File ist ein Anhängsel von SolidWorks, mit der ich die Geomstrie eines Bauteils steuere. Sollte nun z.B. der falsche Wert eingegeben worden sein, dann öffne ich das Formular wieder gebe den neuen Wert ein. Das Problem ist jetzt, das ich im gesamten Formular wieder die Werte neu eingeben muß. @runkel ruebe: Öffnen tu ich die Forms mit: Sub Anzeige_Blister() ' Userform starten Load Blister Blister.Show End Sub Als VBA-Legastheniker muß ich mir Eure Vorschläge im Selbststudium erstmal noch anschauen.
------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 27. Mai. 2011 08:47 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Interessant ist halt auch, wie Du die form wieder schließt. Sauber ist natürlich ein echtes Schließen inkl. löschen der Daten (Unload). Ich mache es aber oft mit .hide, das blendet die form nur aus, läßt aber alle Werte im Speicher. Aufgerufen wird dann wieder mit .show, ohne load oder initialze vorher. Solang die Datei geöffnet ist, klappt das, kostet aber natürlich je nach Umfang unnötigen Speicher. Mußt Du selbst entscheiden, ob Du das in Deinem Projekt brauchen kannst. Ansonsten mußt Du den Weg wählen, der Dir hier genannt wurde: Beim Initialisieren der Form die Werte (aus welcher Quelle auch immer) mitgeben. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 27. Mai. 2011 08:55 <-- editieren / zitieren --> Unities abgeben:
Hallo runkelruebe, schließen tu ich die Form mit Private Sub CommandButton2_Click() ' Abbrechen Unload Blister End Sub Damit die Werte in das CAD-Bauteil einfließen muß das Excel-File geschlossen werden. Dieses File ist kein separates File, sondern in dem SolidWorks-File integriert. Zitat: Ansonsten mußt Du den Weg wählen, der Dir hier genannt wurde: Beim Initialisieren der Form die Werte (aus welcher Quelle auch immer) mitgeben.
Muß ich noch ausprobieren ------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 27. Mai. 2011 10:26 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Comos User: Hallo Pille,1: in den Eigenschaften wird eine ControlSource eingetragen (in der Regel eine Zelle auf einem Arbeitsblatt), dann wird grundsätzlich dieser Wert in der Form angezeigt und kann auch geändert werden. Die geschieht für den Anwender völlig transparent.
Hallo Peter, wenn ich den Wert, den ich durch die ControlSource bekomme, im Textfeld ändere, schreibt er Trotzdem den Wert aus der ControlSource in meine Zelle. Läßt sich das ändern? ------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 27. Mai. 2011 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
|
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 27. Mai. 2011 15:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Comos User: Hi, das habe ich nicht ganz verstanden, die Controlsource ist normalerweise eine Zelle Gruß Peter
Stimmt, da steht dann z.B. 100 drin. Wenn ich mein Formular öffne erscheint in der Textbox auch diese 100. Wenn ich nun in der Textbox den Wert auf 110 ändere, dann schickt mir die Textbox trotzdem die 100 in eine andere Zelle ------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 28. Mai. 2011 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Hallo nochmal, Zitat: Stimmt, da steht dann z.B. 100 drin
Die Controlsource muß eine Variablenbezeichnung enthalten aus der EXCEL Hilfe! Zitat: ControlSource-Eigenschaft Gibt die Datenposition an, mit der die Value-Eigenschaft eines Steuerelements festgesetzt oder gespeichert wird. Die ControlSource-Eigenschaft akzeptiert auch Tabellenblattbereiche aus Microsoft Excel. Syntax object.ControlSource [= String] Die Syntax für die ControlSource-Eigenschaft besteht aus folgenden Teilen: Teil Beschreibung object Erforderlich. Ein gültiges Objekt. String Optional. Gibt die Tabellenblattzelle an, die mit der Value-Eigenschaft eines Steuerelements verknüpft ist. Hinweise
Die ControlSource-Eigenschaft kennzeichnet eine Zelle oder ein Feld; sie enthält nicht die Daten, die in der Zelle oder in dem Feld gespeichert sind. Wenn Sie die Value-Eigenschaft des Steuerelements ändern, wird die Änderung automatisch in der verknüpften Zelle oder dem verknüpften Feld wiedergegeben. Gleichermaßen wird automatisch die Veränderung in der Value-Eigenschaft des Steuerelements wiedergegeben, wenn Sie den Wert der verknüpften Zelle oder des Feldes ändern. Wird ein weiteres Steuerelement für die ControlSource-Eigenschaft festgelegt, erzeugt dies einen Fehler. Der Standardwert für ControlSource ist eine leere Zeichenfolge. Wenn die ControlSource-Eigenschaft einen anderen Wert als eine leere Zeichenfolge enthält, wird eine verknüpfte Zelle oder ein verknüpftes Feld erkannt. Der Inhalt dieser Zelle oder dieses Feldes wird automatisch in die Value-Eigenschaft kopiert, wenn das Steuerelement geladen wird. Anmerkung Wenn die Value-Eigenschaft den Wert Null hat, wird an der durch ControlSource identifizierten Position kein Wert angezeigt.
jetzt verstanden wie es geht? Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 29. Mai. 2011 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Hi, definiere in einem allgemeinen Modul eine Public Variable und schreibe deinen Wert beim Schließen des UserForms auf diese Variable - so lange diese Variable nicht überschrieben wird, ist sie während der kompletten Excel-Sitzung abrufbar, auch wenn das UserForm mit Unload Me geschlossen wurde. Willst du dagegen den Wert auch nach Schließen der Arbeitsmappe zur Verfügung haben, musst du ihn beim Schließen der Mappe in eine Zelle schreiben. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 30. Mai. 2011 07:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Karin, hallo Peter, das Ganze wird mir jetzt mit, meinem Wissenstand, doch zu heftig. Hatte es mit folgendem Code bisher probiert. Private Sub CommandButton1_Click() Range("B13").Select Selection.Copy Range("I40").Select ActiveSheet.Paste Application.CutCopyMode = False Range("B13").Value = CDec(Me.Blisterabmessung_quer) End Sub Muß zugeben, daß ich mir das einfacher vorgestellt habe. Aber vielleicht könnt Ihr mir nochmals intrensiver auf die Sprünge helfen. (eventl. mit einem kleinen praktischem Bsp????)
------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 30. Mai. 2011 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Hi, du hast eine Zelle I40, die den Start-Wert enthält und der im UserForm in der TextBox angezeigt wird wenn es gestartet wird - so weit so gut. Den Wert in dieser TextBox kann man dann ändern - dadurch dass du ControlSource verwendest, wird der Wert beim Ändern in der TextBox gleichzeitig in die ControlSource-Zelle I40 geschrieben, sodass beim nächsten Start der neue Wert angezeigt wird. Um ehrlich zu sein, ist mir aber nicht ganz klar, wo nun das eigentliche Problem ist und was du mit deinem geposteten Code machen willst. Du schreibst den Wert aus B13 in I40 und den aus der TextBox in B13 - was willst du damit erreichen?
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 30. Mai. 2011 08:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Karin, mein Ziel ist es, daß beim erneuten öffnen der Userform in der Textbox der Wert drin steht, der zuletzt eingegeben worden ist (dieser steht in B13). Jedoch möchte ich die Möglichkeit haben diesen Wert aber zu verändern. I40 ist nur dazu da, den letzten Wert aus B13 zu kopieren (war nur so ne Idee von mir). ------------------ Gruß Pille Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 30. Mai. 2011 08:17 <-- editieren / zitieren --> Unities abgeben: Nur für pi-design
Hallo, eigentlich ist alles gesagt Code: Range("B13").Select Selection.Copy Range("I40").Select ActiveSheet.Paste Application.CutCopyMode = False Range("B13").Value = CDec(Me.Blisterabmessung_quer) End Sub
das ist einfach grausel, siehe hier http://www.online-excel.de/excel/singsel_vba.php?f=61 Ich glaube das Problem ist ein anderes: Zitat: das Ganze wird mir jetzt mit, meinem Wissenstand, doch zu heftig. ...... Aber vielleicht könnt Ihr mir nochmals intrensiver auf die Sprünge helfen.
Aber ja: - Handbuch lesen, - sonstige Literatur zu VB(A) studiern, - Hilfe beachten und üben, üben, üben ....Gruß Peter P.S. Ich glaube wenn du einfach als Controlsource B13 einträgst und dein Code so läßt wie er war ist schon das Ziel erreicht. [Diese Nachricht wurde von Comos User am 30. Mai. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pi-design Mitglied Design Engineer
Beiträge: 948 Registriert: 09.08.2002 Excel 2007 WIN 7 64bit
|
erstellt am: 30. Mai. 2011 08:38 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Comos User: Hallo, Aber ja: - Handbuch lesen, - sonstige Literatur zu VB(A) studiern, - Hilfe beachten und üben, üben, üben ....Gruß Peter P.S. Ich glaube wenn du einfach als Controlsource B13 einträgst und dein Code so läßt wie er war ist schon das Ziel erreicht. [Diese Nachricht wurde von Comos User am 30. Mai. 2011 editiert.]
Hallo Peter, da hast Du vollkommen recht. Ich glaube, ich hab den Fehler auch schon gefunden: mit [B13] = Me.Blisterabmessung_quer.Value und in "ControlSource": I40 und ohne irgend ein Copy/Paste scheint es zu funktionieren. Auf jeden Fall schon mal vielen Dank für Eure Hilfe. ------------------ Gruß Pille [Diese Nachricht wurde von pi-design am 30. Mai. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |