Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Eingabe in Inputbox in mehreren Proz verwenden | Herbers Excel-Forum


Betrifft: Eingabe in Inputbox in mehreren Proz verwenden von: Jörg-HH
Geschrieben am: 23.11.2009 23:42:41

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

  

Betrifft: AW: Eingabe in Inputbox in mehreren Proz verwenden von: Oberschlumpf
Geschrieben am: 23.11.2009 23:52:17

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


  

Betrifft: perfekt... danke! owT von: Jörg-HH
Geschrieben am: 24.11.2009 01:07:06




  

Betrifft: hmm... da is noch was :-( von: Jörg-HH
Geschrieben am: 24.11.2009 01:40:20

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


  

Betrifft: hier ein Link von: Matthias L
Geschrieben am: 24.11.2009 07:17:23

Hallo

Tipp:
schau Dich mal hier um

https://www.herber.de/forum/archiv/1112to1116/t1115140.htm

Gruß Matthias


  

Betrifft: ...noch bissl unklar... von: Jörg-HH
Geschrieben am: 24.11.2009 15:18:55

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


  

Betrifft: AW: hmm... da is noch was :-( von: fcs
Geschrieben am: 24.11.2009 08:14:32

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



  

Betrifft: ...hakt noch... von: Jörg-HH
Geschrieben am: 24.11.2009 15:14:20

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


  

Betrifft: hakt noch PS von: Jörg-HH
Geschrieben am: 24.11.2009 15:36:06

...könnte es daran liegen, daß ich strAnbieterName als Variant deklariert habe? das hattest du mir neulich hier

https://www.herber.de/forum/archiv/1116to1120/t1117735.htm#1117735 empfohlen

Jörg


  

Betrifft: AW: hakt noch PS von: fcs
Geschrieben am: 24.11.2009 18:25:24

Hallo Jörg,

die Prozedur "ProjDatenSpeichern" muss du ausführen, bevor du die Datei reduzierst und an die Bieter verschickst.

Gruß
Franz


  

Betrifft: nu hakt nix mehr... von: Jörg-HH
Geschrieben am: 24.11.2009 23:50:07

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


  

Betrifft: AW: nu hakt nix mehr... von: fcs
Geschrieben am: 25.11.2009 08:58:26

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


  

Betrifft: unerwünschtes Gleichheitszeichen... von: Jörg-HH
Geschrieben am: 25.11.2009 22:52:55

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


  

Betrifft: noch ne Idee... von: Jörg-HH
Geschrieben am: 26.11.2009 02:00:49

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



  

Betrifft: AW: noch ne Idee... von: fcs
Geschrieben am: 26.11.2009 08:48:12

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


  

Betrifft: hmm... von: Jörg-HH
Geschrieben am: 26.11.2009 10:16:09

Moin Franz - fehlt da was in deinem Text...?

Grüße - Jörg


  

Betrifft: AW: hmm... von: fcs
Geschrieben am: 26.11.2009 11:50:53

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



Beiträge aus den Excel-Beispielen zum Thema "Eingabe in Inputbox in mehreren Proz verwenden"