Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1116to1120
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
Eingabe in Inputbox in mehreren Proz verwenden
Jörg-HH
Guten Abend an alle Nachteulen
in einer Prozedur wird der Name des Users in einer Inputbox erfaßt:
strAnbieterName = Application.InputBox(MldgFa, "Registrierung")
Ich möchte strAnbieterName in einer anderen Prozedur desselben Moduls verwenden:
If Not ActiveWorkbook.Name Like "* Ausschr * " & strAnbieterName Then
Da wird mir aber strAnbieterName als Leer angezeigt. Wie kann ich den eingegebenen Namen auch in anderen Prozeduren verwenden?
Danke für'n Tip...
Jörg

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Eingabe in Inputbox in mehreren Proz verwenden
23.11.2009 23:52:17
Oberschlumpf
Hi Jörg
Schreib in die oberste Zeile eines allgem. Moduls:

Public strAnbieterName As String
...und lösch innerhalb des Sub, wo strAnbieterName verwendet wird, die Dim-Zeile mit strAnbieterName
Mit Public wird eine Variable für alle Subs "bekannt" gemacht, und behalt so lange ihren zugewiesen Wert, bis Makro beendet.
Hilfts?
Ciao
Thorsten
perfekt... danke! owT
24.11.2009 01:07:06
Jörg-HH
hmm... da is noch was :-(
24.11.2009 01:40:20
Jörg-HH
Hi Thorsten
auf ein Problem im Kielwasser des vorigen stoße ich erst jetzt:
Ich hab deinen Tip gleich an anderen Stellen auch eingebaut und dachte mir das so schön...
In Datei1 gebe ich in Inputboxen ProjName und TPName ein. (Die habe ich jetzt wie empfohlen Public deklariert und kann sie an mehr Stellen nutzen als bisher.)
Dann wird aus der Datei per Makro durch Umbau und SpeichernUnter die Datei2 gemacht. Wenn man die öffnet, wird in einem Input strAnbieterName erstellt.
Weiter unten in Datei2 frage ich dann
If Not ActiveWorkbook.Name = ProjName & " Ausschr " & TPName & " " & strAnbieterName Then
und brauch mich wohl nicht zu wundern, daß nicht passiert, was ich erhoffte...
Gibt es einen Weg, ProjName und TPName aus Datei1 nach Datei2 "hinüberzuretten"?
Grüße - Jörg
Anzeige
...noch bissl unklar...
24.11.2009 15:18:55
Jörg-HH
Hallo Matthias,
danke für den Link. Hab da mal reingeguckt und erstmal nicht so viel verstanden. Muß mal sehen, welche der beiden Wege, die ihr mir aufgezeigt habt, passen...
Grüße - Jörg
AW: hmm... da is noch was :-(
24.11.2009 08:14:32
fcs
Hallo Jörg,
alle Informationen, die du du nach dem Schließen oder in einer anderen Datei benötigst. Muss du in einer Tabelle, unter Namen oder was manchmal auch Sinn mach in einer externen Datei speichern.
In deinem Fall geht es wahrscheinlich via Namen.
Gruß
Franz
Beispiel:
'Code in einem allgemeinen Modul
Public strAnbieterName As String, ProjName$, Ausschr$, TPName$
Sub ProjDatenSpeichern()
'Kenndaten der Ausschreibung in Namen Speichern
Dim wbAktiv As Workbook
'Testdaten
ProjName = "TestProj"
TPName = "Innenausbau"
Set wbAktiv = ActiveWorkbook
With wbAktiv
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPName & """"
End With
End Sub
'Code unter diese Arbeitsmappe
Private Sub Workbook_Open()
'Informationen aus Namen einlesen
ProjName = Application.Names("Ausschreibung.Projekt")
TPName = Application.Names("Ausschreibung.TP")
'Test-Anzeige
strAnbieterName = "testAnbieter"
MsgBox "Anbieter: " & strAnbieterName & vbLf _
& "Projekt:" & ProjName & vbLf _
& "Ausschreibung - Teilprojekt:" & TPName
End Sub

Anzeige
...hakt noch...
24.11.2009 15:14:20
Jörg-HH
Hallo Franz
danke für deine Idee. Hab das mal eingebaut... bei ProjName = Application.Names("Ausschreibung.Projekt") stoppt der Code und zeigt ProjName als leer an.
Trotz meiner laienhaften Kenntnisse wundert mich das irgendwie nicht: Ich habe ja den anderen Abschnitt, mit dem die Namen hinzugefügt werden, "nur" in ein allgemeines Modul getan. Bei welch einem Ereignis springt denn die Proz eigtl an? Müßte ich die nicht ins BeforeSave oder BeforeClose setzen?
Grüße - Jörg
AW: hakt noch PS
24.11.2009 18:25:24
fcs
Hallo Jörg,
die Prozedur "ProjDatenSpeichern" muss du ausführen, bevor du die Datei reduzierst und an die Bieter verschickst.
Gruß
Franz
nu hakt nix mehr...
24.11.2009 23:50:07
Jörg-HH
Hallo Franz
das ist insgesamt genau, was ich brauche!
Das Nameninfo einlesen hab ich in DieseArbeitsmappe hinter das If Me.Sheets.Count <= 3 Then gestellt, weil die Großversion der Datei das ja nicht braucht.
Diese Nachhilfestunde hat mir wieder einen Lernschritt gebracht - hab schon eine Idee, wo ich das später nochmal anwenden will.
Frage noch zu .Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
Wozu wird das hintere Gleichheitszeichen gebraucht? In der Msgbox ergibt das ein zusätzliches =, aber ich vermute mal, du hast das mit Absicht da reingeschrieben?
Danke - und gute Nacht
Jörg
Anzeige
AW: nu hakt nix mehr...
25.11.2009 08:58:26
fcs
Hall0 Jörg,
die Zuweisung von Refersto der Namen wird wie eine Formel in einer Zelle geschrieben. Deshalb des Gleichheitszeichen
Die unerwünschten Zeichen muss du ggf. durch Textoperatioen beseitigen.
  MsgBox "Inhalt von Name Test: " & Mid(Application.Names("Test").Value, 2)

Gruß
Franz
unerwünschtes Gleichheitszeichen...
25.11.2009 22:52:55
Jörg-HH
Hallo Franz,
das hab ich jetzt so geschreiben, aber da stoppt der Code:
...
ProjName = Application.Names("Ausschreibung.Projekt")
TPName = Application.Names("Ausschreibung.TP")
...
MsgBox "Anbieter: " & Mid(Application.Names("strAnbieterName").Value, 2) & vbLf _
& "Projekt:" & Mid(Application.Names("ProjName").Value, 2) & vbLf _
& "Teilprojekt:" & Mid(Application.Names("TPName").Value, 2)
Was hab ich denn da falsch geschrieben?
Grüße - Jörg
Anzeige
noch ne Idee...
26.11.2009 02:00:49
Jörg-HH
Hallo Franz,
du hast mich mit deinem Vorschlag ja richtig unternehmungslustig gemacht :-)
Also:
Mit dem ersten Button "Ausschreibung einrichten" wird ein Formular sowie eine Mutterdatei zur Aufnahme von Rückläufern erstellt. Dabei werden ProjName und TPName eingegeben und im Anschluß daran das Formular eingerichtet. Das Ganze wird dann unter einem Namen mit dem Bestandteil Kalk gespeichert - eine Datei, die mit der Formulareinrichtung so hingebogen wird, daß sie 17 verschiedene Formular-Rückläufer verrechnen kann (daher Kalk). Die Speicherung erzwingt den Dateinamen und verwendet dabei die Inputs.
Mit dem zweiten Button "versandfertig machen" werden aus dieser Kalk heraus überflüssige Blätter abgetrennt und das Ganze versandfertig gemacht - nur noch das Ausschreibungs-Formular und zwei verborgene Blätter sind übrig. Dies wird dann unter einem Namen mit dem Bestandteil Ausschr gespeichert - wie oben unter Verwendung der Inputs.
die Sequenz

With ActiveWorkbook
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPName & """"
End With
hab ich in den ersten Durchgang "Ausschreibung einrichten" eingebaut - das klappt auch prima, wenn später das entstandene Ausschr-Formular geöffnet wird: Die Inputs sind noch vorhanden.
Nun hatte ich mich schon immer geärgert, daß nur beide Vorgänge hintereinander ausgeführt werden können. Das wird in der Praxis auch so gemacht, aber eine mögliche Fehlbedienung könnte sein, die entstandene Kalk-Datei versehentlich zu schließen, bevor die Ausschr entstanden ist. Dabei gehen die Inputs ProjName und TPName (trotz Speicherung) verloren, und wenn ich die Kalk wieder öffne, ist sie wertlos, weil zum Zusammenbasteln des Ausschr-Dateinamens die Inputs fehlen - jetzt hab ich übrigens auch erstmals begriffen, warum das so ist :-))
Nun hatte ich die o.g. Sequenz versuchsweise auch in das BeforeClose gesetzt. Erfolg: Ich hatte beim Wieder-Öffnen einer testhalber geschlossenen Kalk tatsächlich die Inputs gerettet.
Nun aber meckert der Code "versandfertig machen", weil es die Namen, die er hinzufügen soll, schon gibt. Da ich nicht wußte, wie ich ein If Not Name is Nothing oder so formulieren sollte, hab ich mal dies probiert:
On Error GoTo überspringen
With ActiveWorkbook
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPName & """"
End With
überspringen:
...usw.
Das ging dann zwar, ergab aber Müll.
Wie müßte ich es denn schreiben, wenn ich dieses Input-Retten sowohl beim "versandfertig machen" als auch beim BeforeClose unterbringen möchte?
Grüße - Jörg
Anzeige
AW: noch ne Idee...
26.11.2009 08:48:12
fcs
Hallo Jörg,
eigentlich kann man meines Wissens einen Namen mehrfach neu anlegen/überschreiben.
Du solltest das Einlesen der Namen wie folgt anpassen, dann sind = und " entfernt.
Mit der Funktion kannst du prüfen, ob der Namen vorhandne ist.
Ansonsten solltest du am Ende des Erzeugens der Kalk-Datei "einfach" eine Dateispeicherung einfügen, dann sollten die Namen beim nächsten Schritt vorhanden sein. Einne schritt überspringen, wenn daten fehlern führt halt meist zum Chaos.
Gruß
Franz
Gruß
Franz
hmm...
26.11.2009 10:16:09
Jörg-HH
Moin Franz - fehlt da was in deinem Text...?
Grüße - Jörg
Anzeige
AW: hmm...
26.11.2009 11:50:53
fcs
Moin Jörg,
da hab ich ich doch vergessen die Code-Schnippsel anzuhängen.
Hier erfolgt dann eine Namens-Prüfung, der Anwender entscheidet danach ob er/sie die Infos eingeben will.
Gruß
Franz
Private Sub Workbook_Open()
'Namen einlesen
If fncCheckName(ThisWorkbook, "Ausschreibung.Projekt") Then
'Name einlesen
ProjName = ThisWorkbook.Names("Ausschreibung.Projekt").Value
'Gleichheitszeichen und Anführungszeichen im NamensWert entfernen
ProjName = Mid(ProjName, 3, Len(ProjName) - 3)
End If
If fncCheckName(ThisWorkbook, "Ausschreibung.TP") Then
TPname = ThisWorkbook.Names("Ausschreibung.TP").Value
TPname = Mid(TPname, 3, Len(TPname) - 3)
End If
If ProjName  "" And TPname  "" Then
'Namen vorhanden
MsgBox "Projekt: " & ProjName & vbLf _
& "Teil-Projekt: " & TPname
Else
'Namen nicht/nicht vollständig vorhanden
If MsgBox("Namen für Projekt und/oder Teil-Projekt fehlen in der Datei" & vbLf _
& "Namen jetzt eingeben und anlegen?", vbQuestion + vbYesNo, _
"Ausschreibung-Dokumenet ersteleln") = vbYes Then
ProjName = InputBox("Projektname:", "Eingabe Projekt-Name", ProjName)
If ProjName  "" Then
TPname = InputBox("Teilprojekt-Name:", "Eingabe Teilprojekt-Name", TPname)
If TPname  "" Then
'Namen einfügen und Datei speichern
With ThisWorkbook
.Names.Add Name:="Ausschreibung.Projekt", RefersTo:="=""" & ProjName & """"
.Names.Add Name:="Ausschreibung.TP", RefersTo:="=""" & TPname & """"
.Save
End With
End If
End If
Else
Exit Sub
End If
End If
End Sub
Function fncCheckName(wb As Workbook, strName As String) As Boolean
'Prüft ob Namen in der Arbeitsmappe angelegt sind
Dim objName As Name
For Each objName In wb.Names
If LCase(objName.Name) = LCase(strName) Then fncCheckName = True: Exit Function
Next
End Function

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige