Microsoft Excel

Herbers Excel/VBA-Archiv

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

auf doppelte Arbeitsblätter prüfen | Herbers Excel-Forum


Betrifft: auf doppelte Arbeitsblätter prüfen von: Space
Geschrieben am: 03.03.2010 09:23:27

Guten Morgen Forum,

mein Problem: Ich habe eine Userform mit einer Textbox die bei Eingabe und Bestätigung mit O.K. ein neues Arbeitsblatt anlegt.

erste Frage: gibt es eine Möglichkeit nach betätigen von O.K. erst einmal zu prüfen, ob der in der Textbox eingegebene Name des Arbeitsblattes bereits vorhanden ist und wenn ja eine MsgBox auszugeben?

zweite Frage: Die Zeichen die zu einem Error führen sollen auch nicht eingegeben werden. Welche sind das genau und wie kann ich das realsieren?

bisher habe ich das über On Error GoTo gelöst:

On Error GoTo ErEx

....

ErEx:
MsgBox ("Bitte überprüfen Sie ob der Name des Verteilers bereits besteht oder eines der folgenden Zeichen verwendet wurde:\/-")
ActiveWindow.SelectedSheets.Delete
TextBox1 = ""
Exit Sub

Problem: Man muss das Löschen des Tabellenblattes nochmal extra bestätigen (automatische Abfrage von Excel). Das ist unschön und könnte den Anwender verwirren ...

Viele Grüße
Space

  

Betrifft: AW: auf doppelte Arbeitsblätter prüfen von: Josef Ehrensberger
Geschrieben am: 03.03.2010 09:33:28


Hallo Space,

das geht z.B. so.

Private Sub CommandButton1_Click()
  If IsValidSheetName(TextBox1) Then
    If Not SheetExist(TextBox1) Then
      'hier dein Code...
    Else
      MsgBox "Blatt gibt's schon!"
      TextBox1 = ""
    End If
  Else
    MsgBox "Name ungültig!"
    TextBox1 = ""
  End If
End Sub

Private Function IsValidSheetName(ByVal strName As String) As Boolean
  Dim objRegExp As Object
  
  Set objRegExp = CreateObject("vbscript.regexp")
  
  With objRegExp
    .Global = True
    .Pattern = "^[^\/\\:\*\?\[\]]{1,31}$"
    .IgnoreCase = True
    IsValidSheetName = .test(strName)
  End With
  
  Set objRegExp = Nothing
  
End Function

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If wks.Name = sheetName Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function

Gruß Sepp




  

Betrifft: saubere Lösung, Sie funktioniert von: Space
Geschrieben am: 03.03.2010 09:44:36

Vielen Dank Sepp für die schnelle Rückmeldung!!


Beiträge aus den Excel-Beispielen zum Thema "auf doppelte Arbeitsblätter prüfen"