Microsoft Excel

Herbers Excel/VBA-Archiv

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

Funktion für zulässige im Dateinamen | Herbers Excel-Forum


Betrifft: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 09:27:37

Hallo Forum,

ich generiere aus 9 Zellen (G20:G28) automatisch einen Dateinamen.
Jetzt möchte ich eine Überwachung für diese Zellen einbinden, die nur die Eingabe der zulässigen Zeichen für einen Dateinamen ermöglicht.
Geht das? Gibt es dafür eine fertige Funktion, oder müssen tatsächlich alle Zeichen angegeben werden?

Vielen Dank im Voraus für eine Rückmeldung.

Viele Grüße

Ralf

  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 20.08.2012 11:23:03


Hallo Ralf,

das könnte folgende Funktin erledigen.

Public Function validateFileName(FileName As String) As Boolean
  Dim objRegExp As Object
  
  If Len(FileName) > 255 Then GoTo ErrExit
  
  Set objRegExp = CreateObject("Vbscript.regexp")
  
  With objRegExp
    .IgnoreCase = True
    .Global = True
    .Pattern = "^(CON|PRN|AUX|CLOCK$|NUL|COM0|COM1|COM2|COM3|COM4|COM5|COM6|COM7|COM8|" & _
      "COM9|LPT0|LPT1|LPT2|LPT3|LPT4|LPT5|LPT6|LPT7|LPT8| LPT9)\..*$"
    If .test(FileName) = True Then GoTo ErrExit
    .Pattern = "(<|>|\?|""|:|\||\\|\/|\*)"
    If .test(FileName) = True Then GoTo ErrExit
    .Pattern = "( |\.).*\..*$"
    If .test(FileName) = True Then GoTo ErrExit
  End With
  
  validateFileName = True
  Exit Function
  ErrExit:
  validateFileName = False
End Function



Sub test()
  Debug.Print validateFileName("test.txt")
End Sub






« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 11:53:20

Hallo Sepp,

hm, sieht gut aus, aber .................
........... wo kopiere ich den Code hin? Ich habe den jetzt in den Code des Tabellenblattes "Dateneingabe" kopiert. Es passiert jedoch nichts.
Ich kann auch keinen Bezug zu den Zellen G20:G28 im Tabellenblatt "Dateneingabe" finden. Es sollen nur diese Zellen überwacht werden. In anderen Zellen sollen die ausgenommenen Zeichen durchaus erlaubt sein.

Kannst Du mir bitte helfen, den Code in Betrieb zu nehmen?

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 20.08.2012 11:58:58


Hallo Ralf,

"Ich kann auch keinen Bezug zu den Zellen G20:G28 im Tabellenblatt "Dateneingabe""

klar, denn ich weiß ja nicht wie du den Dateinamen zusammensetzt und wie die Überwachung laufen soll.

Poste doch den Code, wie du bisher den Dateinamen zusammenfügst und anwendest.

Soll die Eingabe jeder einzelnen Zelle überwacht werden, oder alle zusammen bevor der Dateiname übernommen wird?


« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 12:06:54

Hallo Sepp,

der Dateiname wird über die & Funktion "zusammengebaut".

In der Zelle B44 steht die Formel:
=WENN(B46>1;"\leer"&B40;"\"&TEXT(B38;"JJJJMMTT") &"_Dateneingabe_"&G20&"_"&G21&"_"&G23&"_"&G24&"_"&G25&"_"&G26&"_"&F30&G27&B40)

Wünschenswert wäre es für mich die händische Eingabe von nicht erlaubten Zeichen im Bereich G20:G28 sofort bei verlassen der Zelle zu untersagen.
Der Dateiname wird ja sofort generiert. Wenn ich aber den Dateinamen "reklmaiere" weiß der Benutzer nicht was er nun tun muss. Meckere ich sofort bei verlassen der Zelle, weiß der Benutzer (hoffentlich) wo er was zu ändern hat.

Oder hast Du eine bessere Theorie?

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 20.08.2012 12:38:08


Hallo Ralf,

Rechts klick auf das Blattregister von "Dateneingabe" > Code Anzeigen > in das rechte Fenster folgenden Code kopieren > ausprobieren.

' **********************************************************************
' Modul: Tabelle4 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Const cstrRange As String = "B40,B38,B46,F30,G20:G21,G23:G27"
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range
  On Error GoTo ErrExit
  If Not Intersect(Target, Range(cstrRange)) Is Nothing Then
    Application.EnableEvents = False
    For Each rng In Intersect(Target, Range(cstrRange))
      If Not validateFileName(Mid(Range("B44").Text, 2)) Then
        MsgBox "Zelle:" & vbTab & rng.Address(0, 0) & vbLf & vbLf & _
          "Ungültige Eingabe in den Zellen zur Dateinamengenerierung!", vbExclamation, "Hinweis"
        Application.Undo
        rng.Select
      End If
    Next
  End If
  
  ErrExit:
  Application.EnableEvents = True
End Sub


Private Function validateFileName(FileName As String) As Boolean
  Dim objRegExp As Object
  
  If Len(FileName) > 255 Then GoTo ErrExit
  
  Set objRegExp = CreateObject("Vbscript.regexp")
  
  With objRegExp
    .IgnoreCase = True
    .Global = True
    .Pattern = "^(CON|PRN|AUX|CLOCK$|NUL|COM0|COM1|COM2|COM3|COM4|COM5|COM6|COM7|COM8|" & _
      "COM9|LPT0|LPT1|LPT2|LPT3|LPT4|LPT5|LPT6|LPT7|LPT8|LPT9)\..*$"
    If .test(FileName) = True Then GoTo ErrExit
    .Pattern = "(<|>|\?|""|:|\||\\|\/|\*)"
    If .test(FileName) = True Then GoTo ErrExit
    .Pattern = "( |\.).*\..*$"
    If .test(FileName) = True Then GoTo ErrExit
  End With
  
  validateFileName = True
  Exit Function
  ErrExit:
  validateFileName = False
End Function




« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 12:53:59

Hallo Sepp,

die Überwachung ist der Hammer, nur "meckert" Excel jetzt bei jeder Eingabe. Es sollen doch nur die verbotenen Zeichen ausgeklammert werden.

Mach ich etwas falsch oder stimmt am Code etwas nicht?

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 20.08.2012 13:49:10


Hallo Ralf,

ich habe den Code anhand deiner Formel ausgerichtet, bei meiner Testdatei funktioniert er tadellos.

Also wird bei dir etwas nicht stimmen.

Lade doch die Datei bei der es nicht geht(ohne Daten, nur mit dem Code) hoch.


« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 14:05:22

Hallo Sepp,

hier ist die Beispielmappe:

https://www.herber.de/bbs/user/81488.xlsm

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 20.08.2012 14:42:56


Hallo Ralf,

mal wieder "verbundene Zellen" und auch sonst ist einiges zu beachten.

Da dein Formelergebnis ja nur bei Erfüllung einiger Kriterien angezeigt wird, hab ich den zweiten Teil der Formel direkt in den Code eingebunden, weil sonst die Prüfung nur bei der letzten Eingabe greifen würde.

Wenn die Formel verändert wird, muss der entsprechende Teil im code angepasst werden!

https://www.herber.de/bbs/user/81491.xlsm



« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 20.08.2012 14:50:51

Hallo Sepp,

oh sorry, aber oben links in dem Feld (keine Ahnung, wie das genau heißt) steht nur G22 und eben nicht G22:H22.
Daher habe ich das nicht erwähnt.
Das dies einen Unterschied macht konnte ich nicht ahnen.

Deine Lösung funktioniert jetzt super gut.

Vielen Dank für Deine Unterstützung.

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 21.08.2012 08:09:36

Hallo Sepp,

mir ist gerade aufgefallen, dass ich ja die Zeilen- und Spaltenüberschriften für das Tabellenblatt "Dateneingabe" ausgblendet habe. Vorschlag: Den Text aus der Zelle links neben der Eingabezelle in der Msg-Box ausgeben und nicht, wie bei Deiner aktuellen Lösung den Zellnamen der fehlerhaften Zelle.

Könntest Du mir dabei bitte nochmals behilflich sein?
Diese Zellen sind nicht verbunden!

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 21.08.2012 08:44:16


Hallo Ralf,

ersetze den Worksheet_Change-Code durch diesen.

Private Sub Worksheet_Change(ByVal Target As Range)
  'Überwachung Dateinamengenerierung auf Sonderzeichen
  Dim rng As Range
  On Error GoTo ErrExit
  If Not Intersect(Target, Range(cstrRange)) Is Nothing Then
    Application.EnableEvents = False
    For Each rng In Intersect(Target, Range(cstrRange))
      If Not validateFileName(Mid(getFormuaValue, 1)) Then
        MsgBox "Zelle:" & vbTab & rng.Offset(0, -1).Text & vbLf & vbLf & _
          "Ungültige Eingabe in den Zellen zur Dateinamengenerierung!", vbExclamation, "Hinweis"
        Application.Undo
        rng.Select
      End If
    Next
  End If
  
  ErrExit:
  Application.EnableEvents = True
End Sub






« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 21.08.2012 08:48:22

Hallo Sepp,

wow, super gemacht. Funktioniert einwandfrei.

Nochmals vielen Dank für die Unterstützung.

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 21.08.2012 09:21:36

Hallo Sepp,

jetzt bin ich's nochmal.
Ich dachte das bekomme ich selbst hin, aber leider muss ich Dich nochmal belästigen.
Ich möchte eine Sprachauswahl einbauen.
Das Abfragefeld ist im Blatt "Sprachauswahl" Zelle C10.
C10 = 1 (=> Sprache deutsch
C10 = 2 (=> Sprache englisch)

Den Code habe ich so umgebaut:

<pre>Private Sub Worksheet_Change(ByVal Target As Range)

'Überwachung Dateinamengenerierung auf Sonderzeichen
Dim rng As Range
On Error GoTo ErrExit
If Not Intersect(Target, Range(cstrRange)) Is Nothing Then
Application.EnableEvents = False
For Each rng In Intersect(Target, Range(cstrRange))
If Not validateFileName(Mid(getFormuaValue, 1)) Then
Select Case Worksheets("Sprachauswahl").Range("C10").Value
Case1: MsgBox "Zelle:" & vbTab & rng.Offset(0, -1).Text & vbLf & vbLf & _
"Ungültige Eingabe in den Zellen zur Generierung des Dateinamens!", vbExclamation, "Hinweis"
Application.Undo
rng.Select
Case2: MsgBox "Cell:" & vbTab & rng.Offset(0, -1).Text & vbLf & vbLf & _
"Invalid input in the cells to generate the file name!", vbExclamation, "Note"
Application.Undo
rng.Select
Case Else
End Select
End If
Next
End If

ErrExit:
Application.EnableEvents = True

End Sub</pre>


Als Ergebnis bekomme ich einen Kompilierungsfehler.
Muss die Auswahl wegen MSG-Box anders aussehen?

Bitte um Nachhilfe.

Viele Grüße

Ralf


  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Josef Ehrensberger
Geschrieben am: 21.08.2012 09:33:52


Hallo Ralf,

Private Sub Worksheet_Change(ByVal Target As Range)
  'Überwachung Dateinamengenerierung auf Sonderzeichen
  Dim rng As Range
  Dim strMsg As String, strTitle As String
  
  On Error GoTo ErrExit
  If Not Intersect(Target, Range(cstrRange)) Is Nothing Then
    Application.EnableEvents = False
    For Each rng In Intersect(Target, Range(cstrRange))
      If Not validateFileName(Mid(getFormuaValue, 1)) Then
        Select Case Worksheets("Sprachauswahl").Range("C10").Value
          Case 1
            strMsg = "Zelle:" & vbTab & rng.Offset(0, -1).Text & vbLf & vbLf & _
              "Ungültige Eingabe in den Zellen zur Generierung des Dateinamens!"
            strTitle = "Hinweis"
          Case 2
            strMsg = "Cell:" & vbTab & rng.Offset(0, -1).Text & vbLf & vbLf & _
              "Invalid input in the cells to generate the file name!"
            strTitle = "Note"
        End Select
        MsgBox strMsg, vbExclamation, strTitle
        Application.Undo
        rng.Select
      End If
    Next
  End If
  
  ErrExit:
  Application.EnableEvents = True
End Sub






« Gruß Sepp »



  

Betrifft: AW: Funktion für zulässige im Dateinamen von: Ralf
Geschrieben am: 21.08.2012 09:38:34

Hallo Sepp,

vielen Dank für Deine Geduld.

Jetzt ist das Thema endgültig erledigt. Super Lösung, die wieder einmal auf Anhieb funktioniert.

Nochmals vielen Dank für Deine Unterstützung.

Viele Grüße

Ralf


Beiträge aus den Excel-Beispielen zum Thema "Funktion für zulässige im Dateinamen"