Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Methode 'Range' Objekt '_Worksheet' fehlgeschlagen

Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 10:37:18
t4z
Hallo Leute,
habe jetzt schon mindestens 6 Foreneinträge, die mein Problem beinhalten, gelesen. Keines der Einträge führt zu einer Lösung. Vielleicht habe ich ja falsch gesucht.
Bekomme bei
Range("W_LP") = " " ' W_LP ist einfach ein Zellname auf zwei verbundene Zellen F1:G1
die Fehlermeldung:
Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen
Methode funktionierte bislang einwandfrei. Ändere ich Range("W_LP") in [W_LP] dann läufts bei mir. Nun fragt ihr euch sicher, warum ich es dann nicht einfach ändere. Zunächst benutze ich range an zahlreichen stellen und zum anderen benutzen andere das makro ebenfalls, bei denen jedoch das mit den eckigen klammern nicht funzt.
Kann es sein, dass evtl Verweise zu Objektbibliotheken fehlen?
Viele Grüße, der t4z

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 10:45:17
Tino
Hallo,
bei mir gibt es keinen Fehler wie von Dir beschrieben.
Aber versuche es mal so.
Range("W_LP").MergeArea = " "
Gruß Tino
AW: Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 11:02:50
t4z
mergeArea ändert nichts an der genannten fehlermeldung
blatt und arbeitsmappe sind nicht geschützt
AW: Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 11:06:41
t4z
excel scheint den namen nicht in sein bezug (z.B. F1) auflösen zu können.
ändere ich range("W_LP") in den entsprechenden bezug range("F1"), dann läuft es problemlos durch !!!?
Beispielmappe? oT.
06.03.2009 11:33:31
Tino
AW: Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 11:35:47
Renee
Hi t4z,
Wenn F1 läuft, dann vielleicht auch:

Range("W_LP").Cells(1,1) = ""


GreetZ Renée

Anzeige
AW: Methode 'Range' Objekt '_Worksheet' fehlgeschlagen
06.03.2009 12:47:23
Luschi
Hallo Renee,
mit dieser Art von Range-Zuweisung bekomme ich manchmal Fehlermeldungen, obwohl es laut Vba-Hilfe korrekt sein soll.
Deshalb benutze ich folgende Zuweisung:ThisWorkbook.Names("W_LP").RefersToRange.Value = ""
Gruß von Luschi
aus klein-Paris
...darum "vielleicht"... (owT)
06.03.2009 12:52:06
Renee

FRAGE NOCH OFFEN, Infos HIER
06.03.2009 14:33:52
t4z
entschuldigt bitte, falls ich mich missverständlich ausgedrückt haben sollte.
1. Range("W_LP") = " " soll einfach nur den Inhalt der zelle, des Zellnamens, des Bereichsnamens mit irgendwas füllen.
2. Ich möchte NICHT den BEZUG auf die Zelle, den Zellbereich auf den sich W_LP bezieht ÄNDERN oder gar löschen.
3. Ich möchte NICHT den Befehl ändern (.mergeArea o.ä.), da ich mir sicher bin, dass der Befehl an sich korrekt ist. Immerhin überschreibe ich via VBA seit mehr als 3 Jahren Zellen durch die Verwendung von zuvor im Sheet vergebenen Zellnamen, um meine Makros dynamisch zu gestalten. Sie funktionierten bisher immer.
4. Im vorliegenden Fall läuft der Code bei Verwendung von [W_LP] = " " tadellos. Ich muss jedoch aufgrund von mehreren Usern sicherstellen, dass der Code keinerlei [...] enthält, da andere Rechner immer mindestens den Range-Befehl kennen.
5. Die BspMappe kann ich nicht senden, da Sie vertrauliche Daten enthält. Ich bin mir sicher, dass die Information, dass weder die ganze Mappe noch das relevante Blatt geschützt ist, zur Problemlösung reichen müsste.
Bitte helft mir, ich bin schon am verzweifeln.
Danke, t4z
Anzeige
Beispieldatei mit diesem Fehler? oT.
06.03.2009 14:36:18
Tino
AW: Beispieldatei mit diesem Fehler?
06.03.2009 14:39:47
Tino
Hallo,
ich will nur ein Beispiel mit diesem Fehler nicht die Original,
ich kann bei mir den Fehler nicht provozieren kann.
Gruß Tino
Problem gelöst, JEDOCH NICH VERSTANDEN WARUM
06.03.2009 18:10:18
t4z
Hallo Leute,
ich weiss nun, wie ich den Fehler vermeiden kann. Leider verstehe ich das nicht, da ich an diesem Teil des Codes nichts änderte und plötzlich dieser Fehler auftrat. Da ich dazulernen will, schildere ich nun, wann das Ganze funzt und wann nicht. Eine BspDatei aus der großen zu erstellen, wäre zu aufwendig und zum anderen kann ich von der Arbeit nichts uploaden.
Ich habe 2 Tabellenblätter (A und B). Beide beinhalten eine Art Initialize-All-Sheets-Prozedur, da der Benutzer über ein Dialog entw nur A oder nur B oder beide eingeblendet lassen kann. Die besagte Init-Prozedur ist in beiden Tabellenblatt-Quelltexten vorhanden und im Wesentlichen identisch. Der Zellname 'BSP' bezieht sich auf einen Zellbereich in Sheet A. Die besagte Fehlerzeile ist in beiden Init-Proz enthalten und identisch. Der Fehler entstand jedoch NUR in der Init-Prozedur des Sheets B. An der Fehlerzeile angekommen ist IMMER das Sheet A selektiert.
besagte Zeile (3 Variationen) in Sheet-B-Init-Prozedur:
1.
Fehler 1004: Range("BSP") = "Default"
2. kein Fehler: [BSP] = "Default"
3. kein Fehler: Worksheets("A").Range("BSP") = "Default"
Nun meine Fragen:
a)
Warum kann 2. den Zellnamen auflösen und interpretieren und 1. nicht? Immerhin existiert der Zellname nicht mehrfach. Ich steuere Inhalte von Zellnamen schon sehr lang via VBA und ein solcher Fehler ist bisher, vllt auch durch Zufall, nicht aufgetreten.
b) Warum funktioniert 1. nicht, obwohl Sheet A zu diesem Zeitpunkt IMMER bereits selektiert, also aktiv ist? Auch wenn es sich dabei um Quelltext handelt, der in Sheet B steht.
c) Welche Objektbibliothek muss eigentlich via Verweis eingebunden werden, damit VBA mit den eckigen Klammern umgehen kann? Ist es die gleiche, die auch für die Methode Range benötigt wird oder eine separate?
Vielen Dank bis hierhin für Eure Hilfe, ich wäre Euch dennoch dankbar würdet Ihr mir dabei helfen, aus meinem Fehler zu lernen.
Ein schönes WE, der t4z
Anzeige
AW: Problem gelöst, JEDOCH NICH VERSTANDEN WARUM
06.03.2009 18:19:32
Renee
Hi t4z,
Weil, wenn der Code im Tabellenblatt steht, was ich annehme, sich eine unqualifizierte Range-Angabe IMMER auf das Blatt bezieht, in dem der Code steht, egal was du selektiert hast!
Du hast doch schon genug Angaben in Antworten vorher bekommen, dass es ziemlich sicher an der Adressierung hängt.
GreetZ Renée
Bitte siehe erster Eintrag von Franz !!!
06.03.2009 18:20:52
Franz
AW: ... Franz aka fcs
06.03.2009 18:22:45
t4z
AW: Problem gelöst, JEDOCH NICH VERSTANDEN WARUM
06.03.2009 18:46:58
fcs
Hallo t4z,
in meiner anderen Antwort hatte ich ja schon auf mögliche Probleme hingewiesen.
Die Verarbeitung der eckigen Klammern haben weniger mit dem Objektkatalog ([BSP] stellt ja genau so ein Range-Objekt dar wie Range("BSP"), ist halt nur eine vereinfachte Schreibweise) als vielmehr mit dem Compiler, der den Quelltext-Code in Programm-Code umsetzt.
Dein Problem mit der Prozedur im Tabellenblatt B rührt jetzt daher, dass der Compiler alle Range-Objekte mit der Schreibweise
Range("BSP")
bei der Prozedurausführung dem Tabellenblatt (Parent-Objekt) zuordnet in dem die Prozedur steht. Da der Name "BSP" im Blatt B fehlt kommt es zum Fehler. Anders als bei Prozeduren in allgemeinen Modulen wird hier bei der vereinfachten Objektbeschreibung nicht das aktive Blatt als Parent-Objekt benutzt.
Bei Schreibweise mit eckigen Klammern arbeitet der Compiler scheinbar etwas anders, so das Verweise auf benamte Bereiche korrekt interpretiert werden.
Im laufe der Jahre hat Microsoft an den Compilern auch herumgebastelt, was dann gelegentlich zu Problemen führte.
So gab auch mal eine Variante, die die Schreibweise Columns("A") oder auch Cells(1,"B") nicht immer tolerierte, was ja auch korrekt ist, da hier eigentlich ein nummerischer Wert anzugeben ist. Aber die Programmierer des VBA-Editors hatten es halt leider erlaubt, dass die Spalten-Nummer auch in Alpha-Schreibweise möglich ist. Das Ergebnis: Probleme!!
Gruß
Franz
Anzeige
Jetzt versteh ich nur noch Bahnhof!
06.03.2009 14:37:40
Renee

AW: FRAGE NOCH OFFEN, Infos HIER
06.03.2009 15:22:27
fcs
Hallo t4z,
grundsätzlich kann es bei der Vergabe des gleichen Namens in mehreren Tabellenblättern Probleme geben.
Die Bereiche mit Namen in der aktiven Arbeitsmappe können mit
Application.Range("BereichsName")
angesprochen werden. Damit hatte ich noch nie Probleme.
Besteht die Gefahr oder ist es so, dass der gleiche Name in mehreren Blättern verwendet wird, dann muss zwingend das Tabellenblatt beim Objekt mit verwendet werden.
Bei Ereignisprozeduren im Tabellenblatt:
Me.Range("BereichsName")
allgemein:
ActiveWorkbook.Worksheets("Blattname").Range("Bereichsname")
oder
ActiveSheet.Range("BereichsName")
Meine generelle Empfehlung:
In VBA-Prozeduren möglichst auf die im Editor zulässigen abgekürzten Schreibweisen verzichten und immer mit eindeutigen/vollständigen Objektbezeichnungen arbeiten. Irgendwann holt einen die Faulheit/Schlamperei der Vergangenheit doch ein.
So funktionieren bei mir die meisten Prozeduren von Excel 97 bis 2003 problemlos und auch die Abwärtskompatibilität ist noch ziemlich gut - außer bei neuen Objekt-Typen bzw. -Eigenschaften.
Gruß
Franz
Anzeige
Problem gelöst, FRAGE JEDOCH NOCH OFFEN
06.03.2009 18:19:22
t4z
Hallo Leute,
endlich hat mich jmd verstanden. Der letzte Post war schonmal super, vielen dank dafür.
Ich weiss nun, wie ich den Fehler vermeiden (zwischenzeitlich auch schon ohne den letzten Post erkannt) kann. Leider verstehe ich das nicht, da ich an diesem Teil des Codes nichts änderte und plötzlich dieser Fehler auftrat. Da ich dazulernen will, schildere ich nun, wann das Ganze funzt und wann nicht. Eine BspDatei aus der großen zu erstellen, wäre zu aufwendig und zum anderen kann ich von der Arbeit nichts uploaden.
Ich habe 2 Tabellenblätter (A und B). Beide beinhalten eine Art Initialize-All-Sheets-Prozedur, da der Benutzer über ein Dialog entw nur A oder nur B oder beide eingeblendet lassen kann. Die besagte Init-Prozedur ist in beiden Tabellenblatt-Quelltexten vorhanden und im Wesentlichen identisch. Der Zellname 'BSP' bezieht sich auf einen Zellbereich in Sheet A. Die besagte Fehlerzeile ist in beiden Init-Proz enthalten und identisch. Der Fehler entstand jedoch NUR in der Init-Prozedur des Sheets B. An der Fehlerzeile angekommen ist IMMER das Sheet A selektiert.
Sheet-B-Init-Prozedur:
1.
Fehler 1004: Range("BSP") = "Default"
2. kein Fehler: [BSP] = "Default"
3. kein Fehler: Worksheets("A").Range("BSP") = "Default"
Nun meine Fragen:
a)
Warum kann 2. den Zellnamen auflösen und interpretieren und 1. nicht? @Franz: Immerhin existiert der Zellname nicht mehrfach. Ich steuere Inhalte von Zellnamen schon sehr lang via VBA und ein solcher Fehler ist bisher, vllt auch durch Zufall, nicht aufgetreten.
b) Warum funktioniert 1. nicht, obwohl Sheet A zu diesem Zeitpunkt IMMER bereits selektiert, also aktiv ist? Auch wenn es sich dabei um Quelltext handelt, der in Sheet B steht (keine Ereignisprozedur).
c) Welche Objektbibliothek muss eigentlich via Verweis eingebunden werden, damit VBA mit den eckigen Klammern umgehen kann? Ist es die gleiche, die auch für die Methode Range benötigt wird oder eine separate? @Franz: Du rätst also generell von der Verwendung der eckigen Klammern ab, ist es das, was du meintest?
Vielen Dank bis hierhin für Eure Hilfe, ich wäre Euch dennoch dankbar würdet Ihr mir dabei helfen, aus meinem Fehler zu lernen.
Ein schönes WE, der t4z
Anzeige
AW: Problem gelöst, FRAGE JEDOCH NOCH OFFEN
06.03.2009 19:14:21
fcs
Hallo t4z,
ergänzend zu meiner anderen Antwort. Ich bin ein absoluter Freak bei der Verwendung von Objektvariablen. Ich versuche wenn möglich/sinnvoll immer mit Objektvariablen für Workbooks und Tabellenblatter, Charts zu Arbeiten.
Also fast immer nach dem Schema

Dim wks as Worksheet, wks2 as Worksheet, LasteRow as long
Set wks = ActiveSheet
'oder
Set wks2 = Worksheets("TabelleXYZ")
With wks
.Cells(Zeile,Spalte).Value = "irgendwas"
LasteRow = .Cells(.Rows.Count, 1).End(xlup).Row
.Range(.Cells(2, 1), .Cells(LasteRow, 7).ClearContents
With wks2
.Range(.Columns(1), .Columns(7)).Copy Destination:=wks.Cells(1,1)
End With
'... usw.
End With


In Ereignisprozeduren von Workbooks, Userforms und Tabellenblättern emfhiehlt sich dann auch oft die Verwendung der System-Variablen "Me", um Klarheit bzw. korrekten Bezug zum Parent-Objekt herzustellen.
Gruß
Franz

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge