Clever-Excel-Forum

Normale Version: Bei Fehlermeldung 13 Text anzeigen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Code:
Sub M_snb()
   Do
     c00 = InputBox("worksheet ")
  Loop Until Evaluate("isref(" & c00 & "!A1)")

  sheets(c00).cells(1)="Prima"
End Sub
Hallo snb,

das ist jetzt  aber überhaupt kein vernünftiger Vorschlag. :@ 

Gib einen falschen Namen ein und drück auf abbrechen, wo landest Du, bei Fehler 13!!!  :92:
Moin!
Eigentlich habe ich in meinem letzten Post ja alles gesagt …

Nun gut, das Sinnvollste ist in diesem speziellen Fall die bereits angesprochene Combo- oder Listbox, die die Auswahl eines ungültigen Tabellenblatts unmöglich macht.
Ob das Füllen nun per Array (snb) oder .AddItem (meine Variante) erfolgt, ist bei der zu erwartenden Menge unerheblich.

Will man dem Anwender dennoch "freie Hand" lassen (warum auch immer), muss man den zu erwartenden Fehler abfangen, das hat dann nichts mit ein paar einzusparenden Code-Zeilen zu tun.

Eine Möglichkeit:
Modul Modul1
Option Explicit 
 
Sub RPP() 
Dim Eingabe As String, wks As Worksheet 
Check: 
Eingabe = Application.InputBox("Tabellenblatt") 
On Error Resume Next 
Set wks = ThisWorkbook.Worksheets(Eingabe) 
If Err.Number > 0 Then GoTo Check Else MsgBox "Glückwunsch!" 
On Error GoTo 0 
End Sub 

Persönlich habe ich für solche Fälle eine simple Function in meiner Codesammlung:

Function SheetExists(sBook, sName) As Boolean
Dim x As Worksheet
On Error Resume Next
   Set x = Workbooks(sBook).Sheets(sName)
   If Err = 0 Then SheetExists = True
End Function

Benutzt wird sie dann z.B. so:

Sub RPP()
Dim Eingabe As String
Check:
Eingabe = Application.InputBox("Tabellenblatt")
If Not SheetExists(ThisWorkbook.Name, Eingabe) Then GoTo Check
MsgBox "Glückwunsch!"
End Sub

Gruß Ralf
Hallo Ralf,

diesen (Deinen) Code findest Du gut? Frei nach dem Motto "Was interessiert mich mein Geschwätz von Gestern. Wink
Auch ist Goto veraltet und ein Abbrechen der Eingabe ist auch nicht vorgesehen!!!

Gruß Uwe
Moin Uwe!  :19:
Ich sehe da keinen Widerspruch zu meinem Geschwätz von gestern Wink
Primäre Lösung sollte ein UserForm mit einer Listbox sein, die alle oder die relevanten Tabellen enthält.

Ich weiß, Sprungmarken-Programmierung hab ich zuletzt wohl unter BASIC gemacht, bin ja auch schon ein älteres Semester.  :21:

Simples Userform im Anhang.

Gruß Ralf
Es wäre besser etwas zu suggerieren als nur zu kommentieren....
Hallöchen,

bestimmt ging es Uwe um dieses "Geschwätz" Smile
Code:
Die On Error - Methode sollte nur dafür eingesetzt werden, wenn Du nicht "klug" programmiert hast.

Mein Hinweis auf die einzusparenden Codezeilen war auch allgemeiner Natur.
Passende Ersatzcodes zur On Error Variante gab es ja auch ...

Der Code von snb funktioniert zumindest hinsichtlich der Blattnameneingabe, wenn man sich an die Konventionen für Blattnamen hält.

Für eine Fehlerprüfung auf eventuelle Abweichungen müsste man nun verschiedene Fälle berücksichtigen. Das ist jetzt aber vor allem wegen Ralf so ausführlich Smile

Was kann z.B. passieren:
- Abbrechen, wie Atilla anmerkte
- ein Leerstring
- ein zu langer Name
- falsche Zeichen im Namen
Wenn ich nun eine qualifizierte Fehlervermeidung programmiere und das auch noch mit "schönem" Code, könnte ich so gut und gerne 12 bis 16 Zeilen programmieren, so im Sinne von
Code:
If c00 = "" Then
 Msgbox "Nix eingegeben!"
 tue irgendwas (z.B. String c00 mit "xxx" ersetzen" in der Hoffnung, dass es so ein Blatt nicht gibt)
End if
Das Prüfen auf verbotene Zeichen kann man dann je nach Programmierweise durchaus in mehr als 4 Zeilen unterbringen Smile
Man sieht also, schon bei so einfachen Sachen kann man sich ganz schön mit der Fehlerbehandlung auslassen.

Mein Code wäre übrigens bei einer Inputbox auch so tolerant wie gehabt.

Code:
Sub Test()
c00 = InputBox("worksheet ")
If IsError(Application.Evaluate("=" & c00 & "!A1")) Then MsgBox "Nix Blattda" Else MsgBox "Blattda"
End Sub

und noch die Version für Variablen- und Codezeilensparer:
Code:
Sub Test2()
If IsError(Application.Evaluate("=" & InputBox("worksheet ") & "!A1")) Then MsgBox "Nix Blattda" Else MsgBox "Blattda"
End Sub
Seiten: 1 2