Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Error Goto funktioniert nicht mehr

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Error Goto funktioniert nicht mehr (1595 mal gelesen)
giman
Mitglied
Konstrukteur, Rohrleitungsbau und Rentner


Sehen Sie sich das Profil von giman an!   Senden Sie eine Private Message an giman  Schreiben Sie einen Gästebucheintrag für giman

Beiträge: 217
Registriert: 19.06.2005

Windows ; MS-Office ; MC 2004 2D und MC 2013 2D

erstellt am: 16. Mrz. 2008 19:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich hatte mal ein Makro erstellt, das habe ich auf mehreren Computern installiert. Auf meinem Laptop (Office 2000) gibt es aber immer an der selben Stelle folgende Fehlermeldung:
Laufzeitfehler '9' - Index außerhalb des gültigen Bereichs.

Programmstelle:
On Error Goto Datei_oeffnen  'bei Error gehe zu Zeile "Datei_oeffnen"
Workbooks(sFil).Aktivate      'Datei aktivieren (wenn sie geöffnet ist)
                              'wenn nicht, dann über "Error Goto"
Goto Datei_ist_offen         

An der Stelle "Workbooks(sFil).Aktivate" kommt jetzt die Fehlermeldung.
Wie gesagt, auf den anderen Computern läuft das Makro durch.
Kennt jemand einen Tip, was ich ändern sollte. Ich vermute eine mir nicht bekannte Einstellung in Excel, die das Problem verursacht.

Die ähnliche Version mit "Close #1" kann ich nicht nehmen, weil ich mehrere offene Dateien habe. (#1 ist die erste geöffnete Datei. Ich weiß aber nicht die wievielte Datei es ist)

Gruß giman

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 16. Mrz. 2008 20:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Hallo giman,

lese ich da richtig :

Zitat:
Workbooks(sFil).Aktivate
? Activate? Sollte eigentlich schon vor der Ausführung zum Fehler kommen (Syntaxprüfung vorausgesetzt). Da ich allerdings einen Tippfehler vermute, meine Gegenfrage: Gibt es die Mappe sFil? Ist sie definiert?

Frederik

------------------
DIN1055.de  |  Lastannahmen für Anwender

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

giman
Mitglied
Konstrukteur, Rohrleitungsbau und Rentner


Sehen Sie sich das Profil von giman an!   Senden Sie eine Private Message an giman  Schreiben Sie einen Gästebucheintrag für giman

Beiträge: 217
Registriert: 19.06.2005

erstellt am: 16. Mrz. 2008 21:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Paulchen

richtig, das ist ein Tippfehler. Wie gesagt, das Makro funktioniert auf zwei andere Computer.

Übrigens die Variante von Harmening, mit Close #1 hab ich auch ausprobiert.
Solange wie die Datei geschlossen ist läuft es durch. Wenn die Datei aber bereits offen ist, gibt es in der Zeile

Open Dateiname For Random Access Read Lock Read Write As #1

die Fehlermeldung Nummer 60 und das Makro hält an.   
Bei mir scheint irgend etwas mit dem Excel nicht zu funktionieren,
aber was? 

Schönen Aben noch, bis morgen
Gruß giman

[Diese Nachricht wurde von giman am 16. Mrz. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 16. Mrz. 2008 23:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Prinzipiell solltest Du erst mal auf GoTo's verzichten, dass ist schlechter Programmierstil und macht Programme nicht lesbar und nicht wartbar.

Axel

------------------

Inoffizielle deutsche CATIA Hilfeseite

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 17. Mrz. 2008 00:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Hallo giman,

VBA-Editor - Menüleiste - Extras - Optionen - Register-Allgemein - Unterbrechen bei Fehlern - Option-Bei nicht verarbeiteten Fehlern. Besser ist aber die Option "In Klassenmodul". Denn dann bleibt der Debugger in der Klasse stehen und nicht im Aufruf der Klasse.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

giman
Mitglied
Konstrukteur, Rohrleitungsbau und Rentner


Sehen Sie sich das Profil von giman an!   Senden Sie eine Private Message an giman  Schreiben Sie einen Gästebucheintrag für giman

Beiträge: 217
Registriert: 19.06.2005

Windows ; MS-Office ; MC 2004 2D und MC 2013 2D

erstellt am: 17. Mrz. 2008 09:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke Nepumuk

so etwas in der Art habe ich vermutet, daß irgend wo etwas verstellt werden muß. Das war bestimmt der richtige Hinweis. Jetzt bin ich an dem Computer, auf dem das Makro von Anfang an läuft und hier ist die Einstellung "Unterbrechen bei Fehlern" auf "Bei nicht verarbeiteten Fehlern" eingestellt. Jedenfalls nicht ganz oben wie auf meinem Laptop.
Besten Dank.
Diese Einstellung werde ich heute Abend gleich verändern.

Achso, noch eins. Diese Variante, der Prüfung ob eine Datei offen ist, hatte ich mir aus einem Visual-Basic-Anleitungsbuch abgeguckt. Wenn ich keine andere Lösung parat habe nehme ich die, die zum Ziel führt.

Gruß giman 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 17. Mrz. 2008 09:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Moin,
Zitat:
Wenn ich keine andere Lösung parat habe...
Anpassungsfähiger Vorschlag (ohne GoTo...;) )
Code:
Private Function checkOpen(ByVal strOpen As String) As Boolean

'Prüft, ob wb namens strOpen bereits geöffnet; True, falls geöffnet
Dim wbAll As Workbook
   
    checkOpen = False 'vorbelegen, falls alles i.O.
   
    For Each wbAll In Application.Workbooks
        If wbAll.FullName = strOpen Then
            checkOpen = True
            Exit Function
        End If
    Next wbAll
   
    Set wbAll = Nothing
   
End Function


Frederik

------------------
DIN1055.de  |  Lastannahmen für Anwender

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

giman
Mitglied
Konstrukteur, Rohrleitungsbau und Rentner


Sehen Sie sich das Profil von giman an!   Senden Sie eine Private Message an giman  Schreiben Sie einen Gästebucheintrag für giman

Beiträge: 217
Registriert: 19.06.2005

erstellt am: 17. Mrz. 2008 20:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@ Nepumuk
Das war es gewesen. Ich habe die Einstellung auf meinem Laptop wie auf dem Arbeitscomputer vorgenommen. Jetzt funktionieren beide Varianten, also auch die von Harmening. Besten Dank noch einmal.

@ Frederik
Deine Variante muß ich ebenfalls ausprobieren. Die hier verwendeten Elemente hatte ich bisher nicht genutzt (da mir nicht bekannt). Das Beispiel sieht sehr interessant aus.
Allerdings versuche ich bei Visual Basic in der Regel Schleifen zu vermeiden, weil damit merkliche Geschwindigkeitsverluste auftreten können. Ein Tropfen kommt zum anderen und Visual Basic ist nun mal nicht so schnell.
Aber was interessant ist probiere ich gern. Vielen Dank für den Vorschlag.

Gruß giman

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 18. Mrz. 2008 09:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Hallo giman,

die Schleife geht über alle geöffneten Mappen. Wie viele können das denn sein 2, 3 oder 4? Das dauert maximal 0,01 Sekunde, ist aber sauber programmiert. Was du dir sparen kannst ist die Vorbelegung der Funktionsvariablen, die ist sowieso False, denn das ist der default - Wert einer boolschen Variablen bei deren Initialisierung.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Paulchen
Mitglied
Bauing./SW-Entwickler


Sehen Sie sich das Profil von Paulchen an!   Senden Sie eine Private Message an Paulchen  Schreiben Sie einen Gästebucheintrag für Paulchen

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice

erstellt am: 18. Mrz. 2008 09:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für giman 10 Unities + Antwort hilfreich

Hallo giman,
Zitat:
Allerdings versuche ich bei Visual Basic in der Regel Schleifen zu vermeiden, weil damit merkliche Geschwindigkeitsverluste auftreten können.
Hm - dem kann ich nur begrenzt zustimmen. Richtig ist, dass Schleifen dauern können. Das sehe ich hier allerdings nicht als Problem - es werden alle in dieser Instanz geöffneten Mappen durchlaufen. Wie viele können das realistisch werden? Ich behaupte mal, ab zehn Stück wird's eher für Dich als User denn für VBA unübersichtlich. Insofern ist diese Schleife echt fix durch. Vor lauter Tipperei war Nepumuk schneller...

Vorteil von Schleifen: Sie sind (menschlich) übersichtlicher als wildes Goto-Gespringe (Spaghetti-Code). @Nepumuk: Danke für den Tipp mit Default! Wieder 'ne Zeile gespart .

Frederik

------------------
DIN1055.de  |  Lastannahmen für Anwender

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

giman
Mitglied
Konstrukteur, Rohrleitungsbau und Rentner


Sehen Sie sich das Profil von giman an!   Senden Sie eine Private Message an giman  Schreiben Sie einen Gästebucheintrag für giman

Beiträge: 217
Registriert: 19.06.2005

erstellt am: 18. Mrz. 2008 21:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

hab leider nur nach dem Feierabend etwas Zeit hier reinzuschauen. Schönen Dank für die Tipps. Ich hab das Programm durchgekaut (kennengelernt) und es funktioniert prima. In diesem Fall habt Ihr vollkommen Recht, das eine Schleife die bessere Variante ist denn
a) es sind in der Regel nur wenige Dateien, die offen sein können.
b) dieses Programmteil läuft nur in der Startroutine.
c) (gibt es bestimmt auch als Argument, wie sauber und so).

Das Problem mit Schleifen hatte ich mal in einem Makro, wo eine Programmschleife (Suchroutine) in einer anderen Schleife immer länger wurde, je länger die von dem Programm erstellte Tabelle in der Datei wuchs. Ich mußte mir damals eine andere Lösung einfallen lassen, denn das Programm war damals nach der Mittagspause noch nicht fertig. Mit der neuen Lösung - gezielte Sprünge auf benannte Zellen war das Programm dann ruckizucki fertig.

Wenn man seine Routinen klein hält, bleiben Sprünge auch übersichtlich. Dannn gibt es keine Spaghettis.

Gut, es hat alles geklappt, ich hab eine Menge dazu gelernt, Unitis hab ich gestern schon verteilt und werd ich bei Gelegenheit auch weiter tun. Ich bedanke mich bei Euch für Eure Hilfe.

Gruß giman

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz