Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bei Fehlermeldung 13 Text anzeigen
#11
Code:
Sub M_snb()
   Do
     c00 = InputBox("worksheet ")
  Loop Until Evaluate("isref(" & c00 & "!A1)")

  sheets(c00).cells(1)="Prima"
End Sub
Antworten Top
#12
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:
Gruß Atilla
Antworten Top
#13
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#14
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
Antworten Top
#15
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


Angehängte Dateien
.xlsm   SheetsPerListbox.xlsm (Größe: 24,89 KB / Downloads: 3)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#16
Es wäre besser etwas zu suggerieren als nur zu kommentieren....
Antworten Top
#17
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste