Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Benötige Hilfe bei Userform(Variablen)

Benötige Hilfe bei Userform(Variablen)
08.03.2021 10:39:26
Jürgen
Moin zusammen,
hatte mich vor kurzen schon mal an die Profis hier gewandt und mit viel Gedult und unzähligen Tests und Recherche ist mein Projekt nun eigentlich soweit fertig.
Während dieser Zeit und dem ganzen Nachlesen musste ich allerdings feststellen dass mir das nun doch nicht reicht und ich gerne am Ende aus meinem eigentlichen Makro/VBA Code ein lauffähgies ADDIN erstellen will.
Aber nun zum folgenden Problem:
Ursprünglich hatte ich zwei Buttons (Für jeden Ablauf inkl. Umbennung, welche in einer Userform "Live" zu sehen war, einen). Bedeutet man klick zb. auf Start CVT, kann anschließend die CSV auswählen und öffnen, diese wird Importiert nach meinen Vorstellungen angepasst und abschließend als neue Mappe gespeichert. Vor dem eigentlichen Speichern wird mir in eine Userform angezeigt in der ein Dateiname als Vorgabe erscheint und in der ich bestimmte Vorgaben anpassen kann. Was auch bestens klappt....
Der gleiche Ablauf nur eben mit einem anderen Dateinamen und einem Button Start IEDUB gibt es ebenfalls im alten Projekt.
Für das am Ende entstehende ADDIN versuche ich nun das ganze in eine einzige Userform zu bekommen die permanent Sichtbar ist, einen Button nur fürs Öffnen, Importieren und anpassen hat. Und dann eben einen Button der auf eine SUB zugreift die die Umbennung für CVT ermöglich sowie einen für IEDUB. Abschließend noch ein Speicherbutton der den neuen Dateinnamen übernimmt und die CSV speichert.
Im Grunde suche ich nun jemanden der mir sagen kann wie ich:
Option Explicit
Public cvtName As String
Public dubName As String
Private strUser As String
Dim Converter As String
Private Const EX_PFAD As String = "C:\Users\Public\cda\cup\vF\BDV"
'*Öffnen der CSV Datei inkl. der Bearbeitung
Private Sub openCSV_Click()
Call ImportFull
End Sub
'*Speicher Button inkl. eingegeben Umbennung für CVT
Private Sub cmdCloseCVT_Click()
cvtName = EX_PFAD & "\" & strUser & "_" & "GBCVTAACE_CVT0" & txtCVT.Text & "_" & Format(Now, " _
YYYYMMDDhhmmss") & ".csv"
Me.Hide
End Sub
Private Sub lblFileNameCVT_Click()
End Sub
'*Routine für die Umbennung von GB CVT
Private Sub runCVT_Click()
Call gbcvtaace
End Sub
'*Anpassung des Dateinamens CVT0XX
Private Sub txtCVT_Change()
lblFileName.Caption = EX_PFAD & "\" & strUser & "_" & "GBCVTAACE_CVT0" & txtCVT.Text & "_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub
'*"Live Ansicht" der Umbennung von CVT0XX
Private Sub UserForm_Activate()
strUser = Environ("USERNAME")
cvtName = vbNullString
txtCVT.Text = "XX"
lblFileName.Caption = EX_PFAD & "\" & strUser & "_" & "GBCVTAACE_CVT0" & txtCVT.Text & "_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub
'*Hier der Ablauf den ich gerne als Variable für die Userform hätte
'*Speicher Button inkl. eingegeben Umbennung für IEDUB
Private Sub cmdCloseIEDUB_Click()
cvtName = EX_PFAD & "\" & strUser & "_" & "IEDUBGACE_DUB0" & txtDUB.Text & "_" & Format(Now, " _
YYYYMMDDhhmmss") & ".csv"
Me.Hide
End Sub
Private Sub lblFileNameDUB_Click()
End Sub
'*Routine für die Umbennung von IE DUB
Private Sub runDUB_Click()
Call iedubgace
End Sub
'*Anpassung des Dateinamens DUB0XX
Private Sub txtDUB_Change()
lblFileName.Caption = EX_PFAD & "\" & strUser & "_" & "IEDUBGACE_DUB0" & txtCVT.Text & "_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub
'*"Live Ansicht" der Umbennung von DUB0XX
Private Sub UserForm_Activate()
strUser = Environ("USERNAME")
cvtName = vbNullString
txtDUB.Text = "XX"
lblFileName.Caption = EX_PFAD & "\" & strUser & "_" & "IEDUBGACE_DUB0" & txtCVT.Text & "_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub

ich diese Userform durch eventuelle Variablen oder auch sonst wie "verkürzen" kann.
Der CVT Teil funktioniert soweit eigentlich sowie auch das Aufrufen von "Call gbcvtaace" nur wie bekomme ich es hin das ich nur eine "lblFileName.Caption" habe die Quasi darauf reagiert welche Sub genutzt wurde bzw. zwischen Call gbcvtaace und Call iedubgace unterscheidet. Und das ganze dann natürlich noch so das die jeweilge "Live Umbennung" angezeigt und übernommen wird.
Für die .Caption könnte ich mich ja noch an einer Variable versuchen wobei ich mich damit auch noch schwer tue. Aber wie ich das ganze dann auch noch in die "Live Ansicht" bekomme ist mir bisher schleierhaft. Daher wende ich mich nun erstmal an Euch bevor ich mich Sinnlos versuche in die Variable .Caption einzulesen wenn das am Ende eh der falsche Weg war.
Ich hoffe Ihr könnt mir folgen :-)
Danke schonmal und einen schönen Start in die Woche.
VG

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Benötige Hilfe bei Userform(Variablen)
08.03.2021 17:33:32
Hajo_Zi
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
ändern.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
Falls Link nicht ausgeführt wird:
1. Link kopieren
2. rechte Maustaste neues Fenter.
3. Umschaltstaste drücken und Klick auf den Link
4. STRG+ Link mit Maus aktivieren


Anzeige
AW: Benötige Hilfe bei Userform(Variablen)
08.03.2021 21:05:48
Jürgen
Eure Probleme bezüglich einer Datei werde ich wohl nie verstehen zumal es etliche Threads ohne gibt
und trotzdem nur Anhand des Codes geholfen wurde.
Klar ich könnte jetzt auch ne Demo Datei vom gesamten Projekt Basteln allerdings brauche ich "nur" Hilfe bei der Userform und diese ist im gesamten Code vorhanden.
Ich könnte zwar ein zweite Textfeld einbauen und so:
Private Sub txtCVT_Change()
lblFileNameCVT.Caption = EX_PFAD & "\" & strUser & "_" & "GBCVTAACE_CVT0" & txtCVT.Text & " _
_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub

und

Private Sub txtDUB_Change()
lblFileNameDUB.Caption = EX_PFAD & "\" & strUser & "_" & "IEDUBGACE_DUB0" & txtDUB.Text & " _
_" & _
Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Sub

erstellen. Allerdings ist das Unschön und nicht der Weg den ich gehen will.

Anzeige
AW: Benötige Hilfe bei Userform(Variablen)
08.03.2021 22:18:01
Tobias
Hallo Jürgen,
also ich bin da leider auch raus, kannst du es mal ganz einfach runterbrechen wie die Userform aufgebaut werden soll und welche Steuerelemente welche Funktion ausüben sollen? Was ist denn eine Liveansicht für dich?
Ich denke du brauchst einen Button um die CSV einzulesen, die Prozedur ist immer gleich.
Dann eine Combobox/Optionsfeld in der du auswählen kannst welche "Version" du benutzen möchtest, CVT oder IEDUB.
Ein Label für die Ansicht des vorläufigen Dateinamens.
Ein Textfeld für Eingabe eines Zusatz zum Dateinamen.
Einen Button zum Speichern der Mappe
Korrekt?
Schöne Grüße
Tobias

Anzeige
AW: Benötige Hilfe bei Userform(Variablen)
08.03.2021 23:24:58
Yal
Hallo Jürgen,
ja, Tobias hat recht. Es ist ein Bisschen viel von was man nicht braucht und zu wenig, von was nötig wäre. Aber gut, so war jeder am Anfang.
Und Hajo beschwert sich, dass keine Datei da ist und wenn eine Datei da ist, beschwert er sich, dass es Makros enthält, weil er übersehen hat, dass es sich hier um VBA handelt! (merkt aber selber nicht, dass seinen Textbaustein sich wiederholt ;-)
Was Du vorhast, nennt man Faktorisieren. Genau wie in Mathe aus a.x + b.x mache (a + b).x
Also die Sachen zusammenbringen, die zusammengehören, um die Wiederholung zu vermeiden.
Mein Code ist nur ein Vorschlag. Funktioniert eh nicht als solche. Da muss selber dein Fleisch um den Knochen legen.
Public Enum enVerf
enVerf_csv
enVerf_dub
End Enum
Public Verfahren As enVerf

Ein Enum erlaubt Konstanten zu definieren ohne sie einzel definieren zu müssen. Es wird nur benutzt, um eine Variable zu initialisieren, und danach zu testen, ob es eine Wert hat oder die andere (Plus ein anderen oder, wenn 3 Möglichkeiten, usw)
In dem Fall wird enVerf_csv die konstante Werte 0 zugeordnet, enVerf_dub 1, nächste wäre 2. Aber es ist für uns nicht interessant.
Dementsprechend 2 Schalter, die nicht in dem Userform sind:
ein für csv ein für dub. Verfahren wird gesetzt. Userform wir gerufen.

'*Routine für die Umbennung von GB CVT
Private Sub runCVT_Click()
Verfahren = enVerf_csv
Userform1.Show
End Sub
Private Sub runDUB_Click()
Verfahren = enVerf_dub
Userform1.Show
End Sub
Im Userform selbst, kein OpenCSV, OpenBUD, txtCSV, txtDUB, CloseCSV, CloseDUB, usw sondern nur Open, txt (habe ich in txtZusatz geändert), Close

'*Öffnen der CSV Datei inkl. der Bearbeitung
Private Sub Open_Click()
ImportFull
End Sub
Private Sub UserForm_Activate()
txtZusatz.Text = "XX"
lblFileName.Caption = Dateiname
End Sub
'*Anpassung des Zusatzs zum Dateinamen
Private Sub txtZusatz_Change()
lblFileName.Caption = Dateiname
End Sub
'*Speicher Button inkl. eingegeben Umbennung für CVT
Private Sub cmdClose_Click()
Name = Dateiname
Me.Hide
End Sub
Die Komplexität ist da, wo eine Unterscheidung notwendig ist. Dementsprechend geht es darum, diese minimal zu halten.
Und auch da: don't repeat yourself. Alles was für beide Fälle gilt, nur einmal vorkommen lassen:
strUSer: nicht notwendig, weil jetzt nur einmal vorkommt.
Const EX_PFAD: jetzt eigentlich auch nicht mehr notwendig.
Unterscheidung wird durch den Test auf das gesetzte "Verfahren" gemacht: ist es = enVerf_csv oder = enVerf_dub ? (siehste: es ist uns egal, ob 0, 1, oder , oder ..)
Dann dementsprechend handeln.

'*Herstelle die Dateiname, Verfahren-abhängig
Private Function Dateiname() As String
Dim D As String
Const EX_PFAD As String = "C:\Users\Public\cda\cup\vF\BDV"
D = EX_PFAD & "\" & Environ("USERNAME") & "_"
Select Case Verfahren
Case enVerf_csv
D = D & "GBCVTAACE_CVT0" & txtZusatz.Text
Case enVerf_dub
D = D & "IEDUBGACE_DUB0" & txtZusatz.Text
End Select
Dateiname = D & "_" & Format(Now, "YYYYMMDDhhmmss") & ".csv"
End Function

Siehst Du, wo ich noch etwas liegen lassen habe?
& txtZusatz.Text wiederholt sich!
Gehört daher daraus und unten zwischen D und "_"
So. Dass war mein Klugscheisser-Stunde des Tages. Ich hoffe, Du kannst was daraus machen.
Rückmeldung wäre nett.
VG
Yal

Anzeige
AW: Benötige Hilfe bei Userform(Variablen)
13.03.2021 20:33:30
Jürgen
Nabend zusammen,
sorry das ich mich jetzt erst wieder Melde aber beruflich bin ich einfach zu sehr Eingespannt.
Ich habe es allerdings seit meinem Eröffnungsposting geschafft die Beispieldateien zu erstellen
und wahrscheinlich liegt es an meinen wenigen Erfahrungen mit VBA dass ich es nie Verstehen werden wieso manche immer eine Datei wollen oder es liegt daran das zu viel Threads bzw. Antworten damit anfangen.
Wie dem auch sei, hier mal meine Dateien:
- Das ist mein "Start" Projekt, welches mittlerweile ja auch läuft und Euch Zeigt worum es eigentlich geht. (Button klicken, CSV auswählen, importieren und anpassen, Speichern mit vorgegebenen Namen der halt direkt angepasst werden kann) In der Datei wird der gesamte Ablauf allerdings über einen Button bzw. einem Mausklick gestartet.
https://www.herber.de/bbs/user/144745.xlsm
- Hier die "Erweiterte" Version die auf dem Start-Projekt aufbaut.
Da das ganze zum Schluss in einem ADDIN Enden soll wollte ich hingehen und den gesamten Ablauf inkl. den vorherigen beiden Buttons in einer Userform unterzubringen.
Verzeiht mir das Chaos im VBA Code aber ich wollte wenigstens im Code unterbringen was ich vorhabe und/oder versucht habe.
https://www.herber.de/bbs/user/144747.xlsm
Grundprinzip ist folgendes (Der Button in dem Tabellenblatt dient quasi als Ersatz fürs ADDIN):
- ADDIN zeigt eine Schaltfläche/Button zb.: "CSV Umwandeln" oder so
- Nach dem klick darauf wird die Userform angezeigt so wie in dem Tabellenblatt auch
- Ein Button um die CSV zu suchen und zu öffnen/importieren
Unter diesem Button ein Textfeld(lblFileName) in dem der Speicherpfad und der vorgeschlagene Dateiname angezeigt wird. Wobei lblFileName halt, wenn möglich, variable ist und erkennt/anzeigt ob es sich um
GBCVTAACE_CVT0XX oder IEDUBGACE_DUB0XX handelt und eben über eine Texteingabe geändert werden kann.
-Ein Button der dann das Speichern für GBCVTAACE_CVT ermöglich und eine Abfrage startet was für die beiden XX eingesetzt werden soll.
-Ein Button der dann das Speichern für IEDUBGACE_DUB ermöglich und eine Abfrage startet was für die beiden XX eingesetzt werden soll.
-Entweder wird dann nach der Eingabe der Zahlen/Werte für XX direkt die neue Datei als CSV gespeichert oder es gibt halt dafür noch einen extra Button.
Hoffe das ihr damit nun was Anfangen könnt ;-)
Ein extra Dank geht auch an Yal.
Ich hoffe ich kommen morgen oder die Tage mal dazu deine Vorschlage in Ruhe durch zu testen.
Bis dahin wünsche ich euch allen ein schönen Samstagabend sowie ein schönes Rest Wochenende.
VG
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige