| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Excel VBA: Falsche Adresse bei Range(...) erkennen (935 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 13. Sep. 2013 09:43 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich bastle mir gerade ein Excel-Makro. Darin soll zu beginn aus einer bestimmten Zelle ein Wert ausgelesen werden. Diese Zelle kann in verschiedenen Tabellen an unterschiedlichen Stellen sein, drum funktioniert Range("A1") etc. nicht. Ich verwende deshalb einen Zellennamen, z.b. "Filepath" und lese den mit Filepath = Range("Filepath").value aus. Das funktioniert problemlos- wenn dieser Zellname existiert. Wenn der Name in der Tabelle aber nicht existiert, dann bricht das Makro kommentarlos ab. Wie kann ich das abfangen? Alle Versuche mit On Error... sind wirkungslos. Gibts in VBA sowas wie Try..catch...End Try? ------------------ Klaus www.al-ko.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jörg_B Mitglied Staatlich geprüfter Techniker Maschinenbau

 Beiträge: 96 Registriert: 24.03.2003 Beruf<P>Solid Works 2011 SP 5<P>Windows 7 Intel Q6600, 3GB Ram FX 1500 / 6.14.10.9163<P>Privat Alibre 11 Standard HP dv 9700 AMD Turion 64 X2, 2GB Ram NVIDIA GForce 8400M GS
|
erstellt am: 13. Sep. 2013 10:56 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 13. Sep. 2013 11:06 <-- editieren / zitieren --> Unities abgeben:         
Das klappt leider nicht. "Typen unverträglich" Filepath ist ein String, der kann nicht Nothing sein War vielleicht etwas ungeschickt, dass ich die Variable im Beispiel genauso genannt habe, wie die Zelladresse. Variablenname Filepath durch Modelpath ersetzt: Code: '... Dim Modelpath as String ModelPath = "" ModelPath = Range("Filepath").Value '....
------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 13. Sep. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
 
 Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2020
|
erstellt am: 13. Sep. 2013 17:36 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Klaus, einfach geht es mit einer eigenen Funktion, Public Function GetFilePath(sPath As String, sVal As String) As Boolean On Error GoTo ErrorHandler sVal = Range(sPath) GetFilePath = True Exit Function ErrorHandler: Err.Clear End Function die du im eigentlichen Code aufrufst: If GetFilePath(sPath, sVal) Then ... end if pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ

 Beiträge: 2897 Registriert: 06.07.2001 what i think? I think, no skill
|
erstellt am: 13. Sep. 2013 19:43 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Normalerweise muss es immer einen Fehlermeldung geben, diese kann man ja dann gezielt behandeln. Code: Sub abfrage() On Error GoTo ErrorHandler If Range("Filepath").Value = "" Then Err = 1 GoTo ErrorHandler Else ModelPath = Range("Filepath").Value End IfErrorHandler: Select Case Err Case 1 MsgBox ("Fehlernummer " & Err & " = Zelle ist Leer" & vbLf & vbLf & "da sollte schon was drinnen stehen^^") Case 1004 MsgBox ("Fehlernummer " & Err & " = Anwendungs- oder objektdefinierter Fehler" & vbLf & vbLf & "Zellbenennung existiert nicht?") Case Else MsgBox ("Fehlernummer " & Err & vbLf & Err.Description & vbLf & "Quelle: " & Err.Source & vbLf & vbLf & "Hilfe: " & Err.HelpFile) Shell "hh.exe " & Err.HelpFile End Select End Sub
[Diese Nachricht wurde von Thomas Harmening am 13. Sep. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.

 Beiträge: 2678 Registriert: 06.11.2000
|
erstellt am: 16. Sep. 2013 08:25 <-- editieren / zitieren --> Unities abgeben:         
Ischwrrnochverrückt! Am Freitag hat mich das Ding wahnsinnig gemacht, sämtliche Versuche, diesen (und andere) Fehler abzufangen einfach ignoriert...heute läuft wieder alles so, wie es soll, damit wäre dieser gesamte Thread überflüssig gewesen. Was das wieder war? Da ist mir bestimmt wieder so ein Neutrino aus dem Weltraum durch das entsprechende Bit im RAM geschossen^^ @pablo: Danke für den Tipp, aber das trifft das (nicht mehr existierende) Problem nicht: Ich wollte nicht aus irgendeinem String den Pfad extrahieren, das kann ich schon  Mein Problem war, dass das Makro abgeschmiert ist, wenn ich irgendeinen String (Filepath ist nur ein Name) aus einem nicht existierenden Range der Excel Tabelle auslesen wollte. Aber jetzt geht's ja  Vielen Dank an alle, die sich die Mühe gemacht haben und sich darüber den Kopf zerbrochen haben ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 16. Sep. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
 
 Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2020
|
erstellt am: 16. Sep. 2013 18:07 <-- editieren / zitieren --> Unities abgeben:          Nur für KMassler
Klaus, die eigene Prozedur simuliert Try..catch...End Try. Falls das Makro komplett abschmiert kannst du mit: For Each TempName In Names If TempName.Name = SearchName Then NamedCellExists = True Exit For End If Next überprüfen ob die gesuchte Zelle vorhanden ist. pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |