meldung bei aufruf nicht vorhandener tabellen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: meldung bei aufruf nicht vorhandener tabellen
von: dietmar
Geschrieben am: 17.11.2003 02:15:29

hallo community,

über ein eingabefeld gebe ich den namen einer tabelle in einer arbeitsmappe ein. zu dieser tabelle springt excel dann über eine vba-routine.

gibt es diese tabelle jedoch nicht, dann gibt excel eine fehlermeldung aus, die auf einen fehler im vba-code hinweist und die möglichkeit des "debuggens" enthält.

frage: wie kann ich diese "fehlermeldung" abfangen und dem nutzer stattdessen die meldung präsentieren: "das gewählte tabellenblatt existiert nicht, bitte ein anderes wählen."?

die vorhandenen tabellenblätter könnten lauten "januar 2003", "februar 2003" und der anwender gibt ein: "januar 2004".

danke, dietmar

p.s.: excel:gut, vba:etwas

Bild


Betrifft: AW: meldung bei aufruf nicht vorhandener tabellen
von: Ramses
Geschrieben am: 17.11.2003 07:31:24

Hallo

einen Workaround:

Entweder du fängst es mit einer Error-Routine auf oder so

Dim i As Integer, myMsg As Integer
Dim myFind as Boolean
myFind = False
str = Inputbox("Tabelle angeben","Auswahl","Tabelle1")
For i = 1 to Worksheets.Count
If Worksheets(i).Name = str Then
myFind = True
Exit Sub
End If
Next i
If myFind = False then
myMsg = MsgBox("Die Tabelle existiert nicht",vbCritical+vbOK,"Abbruch")
Exit Sub
End If

Gruss Rainer


Bild


Betrifft: Will ja nicht meckern...
von: Franz W.
Geschrieben am: 17.11.2003 10:34:20

jedenfalls nicht ernsthaft :-))))

Hallo Rainer,

würde mich ja nie erdreisten, Dir was zu verbessern. Aber beim Testen gab's eine Fehlermeldung. Darum habe ich mir erlaubt, noch eine "Dim" einzufügen:


Sub BlattSuchen()
Dim i As Integer, myMsg As Integer
Dim myFind As Boolean
Dim str As String
    myFind = False
    str = InputBox("Tabelle angeben", "Auswahl", "Tabelle1")
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = str Then
            myFind = True
            Exit Sub
        End If
    Next i
    If myFind = False Then
        myMsg = MsgBox("Die Tabelle existiert nicht", vbCritical + vbOK, "Abbruch")
        Exit Sub
    End If
End Sub


Oder hab ich einen Fehler gemacht?!?

Demütigst
Franz
;-)


Bild


Betrifft: Es sei dir verziehen...
von: Ramses
Geschrieben am: 17.11.2003 13:36:11

Hallo Franz

..aber wenn das das einzige wahr, dann ist das doch nicht schlecht, wenn es aus der Hand geschrieben und ungetestet war :-)

Er hat sich sowieso nicht mehr gemeldet.

Danke

Gruss Rainer


Bild


Betrifft: AW: Es sei dir verziehen...
von: Franz W.
Geschrieben am: 17.11.2003 13:47:22

Hallo Rainer,

für aus der Hand allerdings richtig!! Tät mich das noch nicht so schnell trauen (außer vielleicht mal so ein einzelnes "Select" zu eliminieren oder so in dieser Güteklasse ;-))).

Hab Dir übrigens gaaaanz weit unten beim Thema Standarddrucker am 13.11. noch ne Frage gestellt. Aber wenn bei Dir auch die Mailbenachrichtigung nichts tut momentan, hast Du's wahrscheinlich nicht gelesen. Ich erlaube mir mal, meinen Beitrag komplett hier reinzukopieren, auch wenn er nicht zum Thema passt:


Hallo Rainer,

wollte Deine Lösung jetzt einsetzen, bin aber nicht in der Lage das zu integrieren. Habe versucht die Aufzeichnung des Makrorekorders entsprechend abzuändern, das klappt aber nicht, und ich weiß leider gar nicht in welche Richtung in denken soll. (Poste der Einfachheit halber alles noch mal komplett hier rein, es geht um das letzte Makro:

Option Explicit

Declare

Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" _
    (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Declare 

Function GetProfileSection Lib "kernel32" Alias "GetProfileSectionA" _
    (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long

Function GetDefaultPrinter() As String
Dim TempName As String
Dim DeviceNr As Long
TempName = String(1024, 0)
DeviceNr = GetProfileString("windows", "device", 0&, TempName, 1024)
If DeviceNr > 0 Then
    GetDefaultPrinter = Left(TempName, InStr(TempName, ",") - 1)
Else
    GetDefaultPrinter = "No Default Printer"
    'oder zum besseren Testen
    'Achtung: "False" = KEIN Boolean Wert
    'NUR ein String
    '----------
    'GetDefaultPrinter = "False"
End If
End Function




Sub Standarddrucker()
    MsgBox "Der Windows-Standarddrucker ist: " & GetDefaultPrinter, 48
End Sub




Sub Drucken_mit_Standarddrucker()
'    Application.ActivePrinter = "HP LaserJet 4L auf LPT1:"
    Application.ActivePrinter = GetDefaultPrinter & "auf LPT1:"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        GetDefaultPrinter & "auf LPT1:", Collate:=True
End Sub


Bei der Zeile : Application.ActivePrinter = GetDefaultPrinter & "auf LPT1:" bricht er ab mit der Meldung:
" Die Methode 'ActivePrinter' für das Objekt '_Application' ist fehlgeschlagen."
Vielleicht kannst Du mir noch mal helfen, falls Du "soweit unten" noch mal reinschaust :-))


GrüßeFranz


Bild


Betrifft: AW: Es sei dir verziehen...
von: Ramses
Geschrieben am: 17.11.2003 14:13:41

Hallo Franz

ohne es zu testen

Application.ActivePrinter = GetDefaultPrinter
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
GetDefaultPrinter, Collate:=True


sollte reichen, weil der Zusatz ".. auf LPT1" bei Windows intern mitgeführt wird, genauso wie die Bezeichnung "... auf NE08" o.ä.

Gruss Rainer


Bild


Betrifft: Leider nicht, ABER...
von: Franz W.
Geschrieben am: 17.11.2003 15:06:45

Hallo Rainer,

leider immer noch dasselbe: bei der Zeile " Application.ActivePrinter = GetDefaultPrinter " kommt obige Meldung...

ABER: Jetzt hab ich die Zeile mal ganz weggelassen, und jetzt tut er's. Auch wenn vorher ein anderer Drucker eingestellt war. Aber nur in Deiner Variante:

ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
GetDefaultPrinter, Collate:=True

Bei der Variante mit LPT1 usw. druckt er auf dem vorher eingestellten Drucker (in meinem Test "FritzFax-Drucker") und nicht auf dem Standarddrucker.

SUPER! SEHR SCHÖN! FREUT MICH SEHR!! Aber noch eine Frage: ist das sicher? Kann man die Zeile einfach weglassen? Auch wenn ich die Datei meinem Freund schicke, auf dessen Rechner sie eigentlich laufen soll? Oder muss man da evtl. noch was abfangen?

Grüße
Franz


Bild


Betrifft: AW: Leider nicht, ABER...
von: Ramses
Geschrieben am: 17.11.2003 16:09:04

Hallo Franz

keine Ahnung, muss ich erst probieren

Gruss Rainer


Bild


Betrifft: Nein, nein. Muss nicht sein!!
von: Frnaz W.
Geschrieben am: 17.11.2003 16:48:09

Hallo Rainer,

keinen AUfwand, bitte. Kann ich dann auch selber ausprobieren. Hätt ja nur sein können, dass Dir das auswendig was sagt. Wenn ich Probleme bekomme, die ich nicht hinkriege, kann ich ja neu nachfragen.

Danke für Deine Hilfe und Grüße
Franz


Bild

Beiträge aus den Excel-Beispielen zum Thema " meldung bei aufruf nicht vorhandener tabellen"