PDA

Vollständige Version anzeigen : VBA Userform aktivieren


Hajo_Zi
31.07.2012, 11:38
Hallo,

ich habe mal ein Beispiel hochgeladen. Die Datei sollte da abgelegt werden wo schon einige Datein sind. Es geht im Programm nur darum, dass welche da sind die werden nicht geöffnet oder bearbeit.
Der Ablauf:
Es wird der Schalter betätigt und es wird die Userform geöffnet, Eine Nummer eingeben (ist grundlage für die Datei die erstellt wird) und beim zweiten irgendwas.
Es wird der Schalter übernehmen eingeblendet und geklick. Das Ist die Prozedur
Private Sub Cmd_Auswahl_Click()
in der UserForm und da der Teil Case ="0"
Die Datei wird unter einem neuen Namen gespeichert.
In diesem Programmteil wird das Makro "Baugruppe" aufgerufen das im mdl_symbolleiste ist und von dort SearchInFolder ActiveWorkbook.Path
das Makro ist im Modul mdl_Ordner. (dieses Verfahren muss so sein, wegen dem Gesamtprogramm. Dies ist nur eine Starkt geküzte Version)
Im Makr SearchInFolder wird jetzt für jede Datei die Label zur Beschriftung der Textboxen angepast und sollte auf Eingaben gewartet werden.
Setze ich ein Haltepunkt in Zeile 50 im mdl_Ordner sehe ich auch das die Userform geändert wird.
Das Problem der Code hält nicht an zur Eingabe der Daten.
Wie ändere ich das?

<img src="http://www.hajo-excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/" onclick="window.open(this.href);return false"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Beverly
31.07.2012, 13:41
Hi Hajo,

du lässt den Code in einer Schleife über alle Dateien laufen und am Ende schließet du das UserForm wieder mit Unload frm_AV - wo soll der Code da anhalten können? Wenn ich das richtig sehe, dass du zwischendurch eine Eingabe tätigen willst, müsstest du also das "Weiterschalten" zur nächsten Datei nicht in einer Schleife ablaufen lassen sondern z.B. mittels eines Schalters auslösen, nachdem die 1. Datei abgearbeitet ist.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Hajo_Zi
31.07.2012, 14:41
Hallo Karin,

Ich habe eine Frage gestellt da ich überhaupt keine Ansatz Punkt habe.
Ich wußte auch nicht wie ich Deinen Hinweis umsetzen soll.
Ich würde das so interpretieren. Der Dateinamen der schon abgearbeiteten Datei steht in der Datei. Verlasse die Schleife wenn der Dateiname nicht schon eingetragen ist, Zur Userform nach Userform "Übernehmen" wieder die Schleife überprüfe ob Datei schon eingetragen bis es kein Datei mehr gibt. Das erscheint mir Recht Zeitaufwendig.

<a href="http://www.hajo-excel.de/" onclick="window.open(this.href);return false" title="Hajo's Excelseiten">Gruß Hajo</a>

haklesoft
31.07.2012, 15:21
Hallo HaJo, StOrdner = ThisWorkbook.Path & "\"
' Datei speichern
ActiveWorkbook.SaveAs Filename:=StOrdner & "\" _
& Txt_ProjektNr & " AV Liste.xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnablednach StOrdner fügst Du vor Txt_ProjektNr noch einen zweiten Backslash ein. Das würd' ich schon mal lassen.

Hang loose, haklesoft

Beverly
31.07.2012, 16:03
Hi Hajo,

ich würde die Dateienamen zuerst in einer Schleife in ein Array (oder einen Zellbereich, was aber langsamer ist) schreiben und dann anschließend in der Prozedur Baugruppen das UserForm mit den Angaben der 1. Datei aufrufen. Auf dem UserForm würde ich einen Schalter (z.B. Weiter) anbringen, der das mit den neuen Einträgen Gewünschte ausführt und anschließend die Angaben der nächsten Datei aus dem Array aufruft.

Codeänderunge/Ergänzungen (sind mit ***** hervorgehoben):

mdl_Symbolleiste Änderung in Sub Baugruppe, Ergänzung Sub BaugruppeEintragen
mdl_Ordner Änderung in Sub SearchInFolder, Ergänzung 2 Public-Variablen
frm_AW Ergänzung Schalter Weiter mit Code

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

haklesoft
31.07.2012, 16:09
Hallo Hajo,

in meiner Umgebung müsste ich dafür sorgen, dass im Verzeichnis Dateinamen ohne Extender keinen Ärger machen. Etwa so: Dim lPos As Long, sBG As String
For Each FI In EachFil ' Schleife über alle Dateien
lPos = InStrRev(FI.Name, ".")
If lPos > 1 Then 'Dateiname enthält dot
sBG = Left(FI.Name, lPos - 1)
Else
sBG = FI.Name 'Dateiname ohne dot
End If
With frm_AV
.Tag = "3"
.LbL_Auswahl.Caption = "Bitte geben sie die Angaben für Baugruppe " & sBG _
& " ein!!!"
Ansonsten würde ich die Baugruppen NICHT in der selben UserForm abfragen, sondern innerhalb der Schleife eine nur dafür gedachte UserForm vbModal anzeigen lassen. Dann macht die Datei-Schleife erst weiter, wenn diese UserForm entladen wurde.

Hang loose, haklesoft

Hajo_Zi
31.07.2012, 18:25
Halllo,

ich bin jetzt zu Hause und das ist ein dienstlichenn Problem. Ich werde mir das mal morgen zu gGemüte führen.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Hajo_Zi
01.08.2012, 06:39
Hallo,
Ich habe Deinen Vorschlag jetzt mal getestet und Deine vorgeschlagene Lösung geht in meiner Testdatei. Jetzt ist die UserForm 2x da aber das erscheint mir noch einfacher als meine im Beitrag #3 vorgeschlagene Lösung.
Jetzt muss ich nur sehen das ich die Lösung auch in meinem umfangreichen Projekt rein bekomme.

<a href="http://www.hajo-excel.de/" onclick="window.open(this.href);return false" title="Hajo's Excelseiten">Gruß Hajo</a>

Beverly
01.08.2012, 13:27
Hi,

weshalb muss man ein extra UserForm verwenden, wenn man - so wie ursprünglich gewünscht - das selbe verwenden kann?

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

haklesoft
01.08.2012, 15:04
Hi,

niemand muss müssen; - oder doch? :mrcool: Welche Gründe Hajo veranlasst haben, die selbe UserForm für zwei unterschiedliche Aufgaben zu benutzen, habe ich nicht herauslesen können.

Im Sinne einer klaren Programmstruktur finde ich es einfach besser, für unterschiedliche Abfragen auch unterschiedliche UserFormen einzusetzen. Man muss dann nicht Zustände hin- und herschalten, Labels umbenennen, CommandButtons umtaufen oder disablen und andere Überschneidungen der Steuerelemente bedenken. Außerdem würde - wie es Hajo's Wunsch war - eine umlaufende Schleife erst nach dem Ende der UserForm fortgesetzt werden. Bei meinen UserFormen besteht auch immer die Möglichkeit, jede Eingabe dauerhaft zu merken und beim erneuten Aufruf dem User wieder zur Verfügung zu stellen, was natürlich Ein-Zweck-UserFormen voraussetzt.

Hang loose, haklesoft

Beverly
01.08.2012, 15:47
Hi,

die Intension des Fragestellers war, das selbe UserForm für verschiedene Bedingungen benutzen zu können - das sieht man an seinem Ursprungscode. Schau dir einfach das Activate-Ereignis des UserForms an, dort wird bereits mit verschiedenen Zuständen gearbeitet und in Abhängigkeit davon verschiedene Beschriftungen für Labels verwendet. Das gesamte Konzept basiert offensichtlich darauf. Und dass es auch für den konkreten Fall möglich ist, zeigt mein Beispiel. Meine Frage war also weniger an dich als an den Fragesteller gerichtet.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Hajo_Zi
01.08.2012, 17:09
Hallo,

Karin Du hast es korreklt erkannt, die Userform sollte für mehrere Arbeitsschritte benutzt werden.
Da dieser Teil Bestandteil eines recht großen Projektes ist und dieses Problem fast zu Anfang des Projektes Auftritt und ich nur über Umwege an meinen Projekt weiter arbeiten konnte. War ich an einer kurzfristigen Lösung intressiert. Der vorgeschlagene Weg konnte mit geringen Zeitaufwand umgesetzt werden, ohne das ich mein grobes Konzept des Projektes umschreiben mußte. Darum habe ich diese Lösung umgestzt.
Die andere Lösung hätte ich erst noch einiges testen müssen und mein Konzept umschreiben müssen und diese Zeit hatte ich nicht bei diesem Projekt.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>