Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1612to1616
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
Inhaltsverzeichnis

Fehler im Code, nur welche/r?

Fehler im Code, nur welche/r?
10.03.2018 12:31:13
Jürgen
Hallo VBA-Profis
Ich stecke feste mit einem zusammengebastelten Code: Leider reichen meine Kenntnisse nicht aus um den/die Fehler zu finden und auszuschalten.
Bei dem Code wir ein Tabellenblatt nach dem Inhalt der Zelle D1 benannt, aber nur mir einer bestimmten anzahl an Buchstaben pro Wort.
Ich denke dass viele End If usw. falsch gesetzt sind, dass wenn die MsgBox'en abgebrochen oder per rotem Kreuz gecancelt werden, nicht abgebrochen wird usw..... auch die "Tab" Abstände sind für eingefleischte Profis schlimm anzusehen.
Ich hoffe ich hab mich einigermaßen erklären können. Ich hange mal den verkorksten Code mit an. pre>
Sub Tabellenblatt_benennen()
Dim blnFalsch As Boolean
Dim strTabelle As String
Dim arrFalsch()
Dim bytFalsch As Byte
Dim wksTab As Worksheet
arrFalsch = Array("*", "[", "]", "/", "\", "?", ":")
Dim Ret_type As Integer
Dim strMsg As String, intZahl As Integer
Dim strTitle As String, anzahl1 As String
Dim a As Variant
Dim i As Long, anzahl As Long
Dim strText As String
Dim strText1 As String
Call Passwort_aus
With Cells(1, 4) '--Text steht in d1
anzahl1 = Application.InputBox("Wie viele Zeichen pro Wort," & vbNewLine & "sollen für den  _
Namen benutzt werden?" & vbNewLine & "" & vbNewLine & "Geben Sie die Zahl ein!" & vbNewLine & "  _
_
_
", Type:=1)
If anzahl1  False Then 'Wenn NICHT Abbrechen gedrückt wurde
intZahl = CInt(strEingabe)  'String in INTEGER-Zahl umwandeln (zum Rechnen)
'hier noch weitere Befehle
Else
Call Tabellenblatt_benennen
End If
anzahl = anzahl1
If anzahl  0 Then
a = Split(.Value, " ")
For i = LBound(a) To UBound(a)
strText = strText & Left(a(i), anzahl) & ". " 'Zahl entspricht der Zeichenanzahl
Next i
strText1 = strText & Left(Range("d2"), 6) & "."
End If
Ret_type = MsgBox(strText1, 3)
Select Case Ret_type
Case 2
Exit Sub
Case 7
MsgBox "nochmal"
Call Tabellenblatt_benennen
Case 6
Zelle = strText1
strTabelle = Right(strText1, 31) & "."
If Range("d1") = "" Then
MsgBox "Der Name der Einrichtung fehlt"
Exit Sub
Else
' Zeichen nicht mehr als 31
If Len(Zelle) > 31 Then
MsgBox "Zu viele Zeichen gewählt, bitte geben Sie weniger Zeichen ein!"
Call Tabellenblatt_benennen
End If
For Each wksTab In Sheets
If wksTab.Name = Zelle Then
blnFalsch = True
Exit For
End If
Next wksTab
If blnFalsch Then
MsgBox "Name bereits vorhanden"
End If
Exit Sub
' unerlaubte Zeichen prüfen
For bytFalsch = 0 To 6
If InStr(Zelle, arrFalsch(bytFalsch)) > 0 Then
MsgBox "In Einrichtung oder Ort sind " & vbNewLine & " _
unerlaubte Zeichen enthalten * [ ] / \ ? :"" & vbNewLine & "" Bitte bereinigen!"
blnFalsch = True
End If
Exit Sub
Next bytFalsch
If blnFalsch = True Then
ActiveSheet.Name = strTabelle
MsgBox "Zu viele Zeichen gewählt, bitte geben Sie weniger  _
Zeichen ein!"
End If
Call Tabellenblatt_benennen
ActiveSheet.Name = Zelle
MsgBox "Tabellennamen eingetragen"
End If
End Select
End If
End With
Call Passwort_an
End Sub


Ich hoffe es kann mir jemand helfen und meine fehler aufzeigen
Beste Grüße Jürgen

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Code, nur welche/r?
10.03.2018 12:45:36
Jürgen
Gerade konnte ich einige Fehler finden.
Aber irgendwie klappt er trotzdem nicht tadellos!
Sub Tabellenblatt_benennen()
Dim blnFalsch As Boolean
Dim strTabelle As String
Dim arrFalsch()
Dim bytFalsch As Byte
Dim wksTab As Worksheet
arrFalsch = Array("*", "[", "]", "/", "\", "?", ":")
Dim Ret_type As Integer
Dim strMsg As String, intZahl As Integer
Dim strTitle As String, anzahl1 As String
Dim a As Variant
Dim i As Long, anzahl As Long
Dim strText As String
Dim strText1 As String
Call Passwort_aus
With Cells(1, 4) '--Text steht in d1
anzahl1 = Application.InputBox("Wie viele Zeichen pro Wort," & vbNewLine & "sollen für den  _
Namen benutzt werden?" & vbNewLine & "" & vbNewLine & "Geben Sie die Zahl ein!" & vbNewLine & " ", Type:=1)
If anzahl1  False Then 'Wenn NICHT Abbrechen gedrückt wurde
intZahl = CInt(strEingabe)  'String in INTEGER-Zahl umwandeln (zum Rechnen)
'hier noch weitere Befehle
Else
Call Tabellenblatt_benennen
End If
anzahl = anzahl1
If anzahl  0 Then
a = Split(.Value, " ")
For i = LBound(a) To UBound(a)
strText = strText & Left(a(i), anzahl) & ". " 'Zahl entspricht der Zeichenanzahl
Next i
strText1 = strText & Left(Range("d2"), 6) & "."
End If
Ret_type = MsgBox(strText1, 3)
Select Case Ret_type
Case 2
Exit Sub
Case 7
MsgBox "nochmal"
Call Tabellenblatt_benennen
Case 6
Zelle = strText1
strTabelle = Right(strText1, 31) & "."
If Range("d1") = "" Then
MsgBox "Der Name der Einrichtung fehlt"
Exit Sub
Else
' Zeichen nicht mehr als 31
If Len(Zelle) > 31 Then
MsgBox "Zu viele Zeichen gewählt, bitte geben Sie weniger Zeichen ein!"
Call Tabellenblatt_benennen
End If
For Each wksTab In Sheets
If wksTab.Name = Zelle Then
blnFalsch = True
Exit For
End If
Next wksTab
If blnFalsch Then
MsgBox "Name bereits vorhanden"
Exit Sub
End If
' unerlaubte Zeichen prüfen
For bytFalsch = 0 To 6
If InStr(Zelle, arrFalsch(bytFalsch)) > 0 Then
MsgBox "In Einrichtung oder Ort sind " & vbNewLine & " _
unerlaubte Zeichen enthalten * [ ] / \ ? :"" & vbNewLine & "" Bitte bereinigen!"
blnFalsch = True
Exit Sub
End If
Next bytFalsch
If blnFalsch = True Then
ActiveSheet.Name = strTabelle
MsgBox "Zu viele Zeichen gewählt, bitte geben Sie weniger  _
Zeichen ein!"
Call Tabellenblatt_benennen
End If
ActiveSheet.Name = Zelle
MsgBox "Tabellennamen eingetragen"
End If
End Select
End If
End With
Call Passwort_an
End Sub

Anzeige
Behoben, glaube ich!
10.03.2018 14:58:25
Jürgen
Ich glaube es sind alle Fehler behoben!
Bei der MsgBox, welche den Fehler verursacht hat, habe ich den Call-Befehl der das MAkro erneut gestartet hat. Durch ein Exit Sub ersetzt!
Jetzt funktioniert es halbwegs wie es soll, nur das dass das Makro per klick erneut gestartet werden muss.
Anbei der Code sollte irgendjemand vor dem gleichen Problem stehen.
Sub Tabellenblatt_benennen()
Dim blnFalsch As Boolean
Dim strTabelle As String
Dim arrFalsch()
Dim bytFalsch As Byte
Dim wksTab As Worksheet
arrFalsch = Array("*", "[", "]", "/", "\", "?", ":")
Dim Ret_type As Integer
Dim strMsg As String, intZahl As Integer
Dim strTitle As String, anzahl1 As String
Dim a As Variant
Dim i As Long, anzahl As Long
Dim strText As String
Dim strText1 As String
Call Passwort_aus
With Cells(1, 4) '--Text steht in d1
anzahl1 = Application.InputBox("Wie viele Zeichen pro Wort," & vbNewLine & "sollen für den  _
Namen benutzt werden?" & vbNewLine & "" & vbNewLine & "Geben Sie die Zahl ein!" & vbNewLine & " ", "Zahl eingeben!", "2", Type:=1)
If strptr(anzahl1) = False Then
MsgBox "Abbrechen gedrückt"
GoTo x
Else
If anzahl1 = False Then
MsgBox "Abbrechen gedrückt"
GoTo x
Else
anzahl = anzahl1
If anzahl  0 Then
a = Split(.Value, " ")
For i = LBound(a) To UBound(a)
strText = strText & Left(a(i), anzahl) & ". " 'Zahl entspricht der Zeichenanzahl
Next i
strText1 = strText & Left(Range("d2"), 6) & "."
End If
Ret_type = MsgBox(strText1, 3)
Select Case Ret_type
Case 2
GoTo x
Case 7
'If MsgBox("nochmal", vbOKCancel) = vbCancel Then GoTo x
Run "Tabellenblatt_benennen"
Case 6
Zelle = strText1
strTabelle = Right(strText1, 31) & "."
If Range("d1") = "" Then
MsgBox "Der Name der Einrichtung fehlt, bitte nachtagen und Tabelle bennen  _
erneut starten!"
GoTo x
Else
' Zeichen nicht mehr als 31
If Len(Zelle) > 31 Then
If MsgBox("Zu viele Zeichen gewählt, bitte überarbeiten Sie den  _
Einrichtungsnamen oder geben Sie weniger Zeichen ein!", vbOKCancel) = vbCancel Then GoTo x
GoTo x
End If
For Each wksTab In Sheets
If wksTab.Name = Zelle Then
blnFalsch = True
Exit For
End If
Next wksTab
If blnFalsch Then
If MsgBox("Name bereits vorhanden", vbOKCancel) = vbCancel Then  _
GoTo x
GoTo x
End If
' unerlaubte Zeichen prüfen
For bytFalsch = 0 To 6
If InStr(Zelle, arrFalsch(bytFalsch)) > 0 Then
If MsgBox("In Einrichtung oder Ort sind " & vbNewLine & " _
unerlaubte Zeichen enthalten * [ ] / \ ? :"" & vbNewLine & "" Bitte bereinigen!", vbOKCancel) = vbCancel Then GoTo x
blnFalsch = True
GoTo x
End If
Next bytFalsch
If blnFalsch = True Then
ActiveSheet.Name = strTabelle
If MsgBox("Zu viele Zeichen gewählt, bitte geben Sie weniger  _
Zeichen ein!", vbOKCancel) = vbCancel Then GoTo x
Run "Tabellenblatt_benennen"
End If
ActiveSheet.Name = Zelle
If MsgBox("Tabellennamen eingetragen", vbOKCancel) = vbCancel Then  _
GoTo x
End If
End Select
End If
End If
End If
End With
x:
Call Passwort_an
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige