Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1840to1844
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

Laufzeitfehler 13

Laufzeitfehler 13
27.07.2021 15:33:02
Siegfried
Hallo zusammen,
Was muss beim zweiten Teil des Codes verändert werden, damit er funktioniert?
Der Zelle "PC5" habe ich den Namen "P2.Rde1" zugewiesen

Sub Schaltfläche56_Klicken()
Dim n1 As Integer
' dieser Schnipsel funktioniert
For n1 = 1 To 16
Debug.Print Range("PC5").Offset(n1, 0)
Next n1
' bei diesem Schnipsel erhalte ich die Fehlermeldung "Laufzeitfehler 13"
For n1 = 1 To 16
Debug.Print Range("P2.Rde1").Offset(n1, 0)
Next n1
End Sub
Gruß
Siegfried

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 13
27.07.2021 15:59:37
Daniel
Hi
Könnte mir vorstellen, das das ganze allergisch auf den Punkt im Namen reagiert (bin mir aber nicht ganz sicher)
Ersetze trotzdem mal im Namen und im Code den Punkt durch einen Unterstrich also "P2_Rde1" alsName, das sollte sicher funktionieren.
Die zweite Möglichkeit für den Fehler 13 wäre, dass der Name nicht auf eine, sondern mehrere Zellen verweist, da musst du mal drauf schauen, ggf sind Verbundzellen die Ursache.
Generell ist bei Fehlern in Schleifen immer zu prüfen, ob der Fehler grundsätzlich, dh. bei jedem Schleifendurchlauf auftritt, oder nur bei einigen Schleifenzählern und nicht bei allen.
Wenn das der Fall ist, sollte man nach den unterschieden suchen, die für den Fehler verantwortlich sein könnten und dies den Helfern im Forum auch mitteilen.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 13
27.07.2021 16:20:46
Siegfried
Hi Daniel,
Danke für Deinen Tip.
mit der Umbenennnung "P2Rde1" funktioniert der Code jetzt zwar, aber der Grund ist mir dennoch völlig rätselhaft.
An anderer Stelle habe ich Zellen mit einem vergleichbarem Namen ("Do2.Sp1"), da funktioniert der Code.
Namen für eine einzelne Zelle habe ich bisher prinzipiell mit einem Punkt geschrieben, den Unterstrich habe ich für einen benannten Bereich mit mehreren Zellen verwandt.
Dieses Prinzip wollte ich eigentlich beibehalten.
Von daher ist das Problem nicht gelöst.
Dennoch Danke und Gruß
Siegfried
AW: Laufzeitfehler 13
27.07.2021 16:39:05
Daniel
Wenn der Punkt im Namen an anderer Stelle funktioniert, müsstest du mal wie bei der Schleife auf die Unterschiede schauen, was ist dort, wo es funktioniert anders, als dort wo es nicht funktioniert.
Ansonsten kann man bei solchen Problemen ohne die konkrete Datei zu sehen nur spekulieren und das Ost meistens nicht zielführend.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 13
27.07.2021 17:03:27
Siegfried
Hi Daniel
in meiner Antwort habe ich Dir ja das Beispiel genannt, wo es funktioniert ("Do2.Sp1").
Punkt in der Mitte des Namens nach einer Zahl und der Name endet mit einer Zahl.
Ich kann da keine Abweichung zu ("P2.Rde1") feststellen.
Wie sagt man so gern, VBA macht keinen Fehler, aber die Erklärung aus der Hilfe führt nicht weiter.
Dennoch Danke und immer heiter bleiben.
Gruß
Siegfried
AW: Laufzeitfehler 13
27.07.2021 18:17:10
onur
"wo es funktioniert ("Do2.Sp1")" ? - bei mir NICHT.
Wenn du mal testest und vor der Schleife eine Msgbox einbaust, die Range.("Do2.Sp1")".Address (oder Range("P2.Rde1").Address) ausgibst, siehst du es.
Da der Teil vor dem Punkt UND nach dem Punkt wie normale Adressen im A1-Format aussehen, wird der Punkt (warum auch immer) als Doppelpunkt angesehen und es wird Do2:Sp1, also DO1:SP2 draus.
Also vermeide entwerder den blöden Punkt oder Textfragmente, die wie Excel-Zelladressierung aussehen.
Anzeige
AW: Laufzeitfehler 13
27.07.2021 18:24:27
Daniel
Hi
kann ich mir jetzt nicht vorstellen, dass das so funktioniert.
und dein Do2.Sp1 funktioniert bei mir auch nicht, bzw es funktioniert genauso wie P2.Rde1
Grundsätzlich gilt folgendes:
Name und Zelladresse sind prinzipell das gleiche.
Wenn du der Range-Funktion einen Text übergibst (Range("alfkjasdölf")) wird VBA zunächst versuchen, diesen Text als Zelladresse zu interpretieren. wenn das gelingt, wird es diesen Zellbereich ausgeben. Nur wenn das nicht gelingt, wird es die Liste der Namen durchsuchen und schauen, ob es den Text dort findet und wenn ja, den dort zugeordneten Zellbereich ausgeben.
Weiterhin ist des so, dass VBA hierbei nicht zwischen Doppelpunkt und Punkt unterscheidet. "Range("A1:A10") funktioniert genauso wie "Range("A1.A10")
wenn jetzt also deine beiden Punkt getrennten Textteile für sich sinnvolle Zelladressen ergeben, dann wird Range immer diesen Zellbereich ausgeben und nicht den Namen mit der gleichen Zeichenfolge.
Früher in Excel 2003 war das relativ unkritisch, da die Spaltenbezeichnungen nur von A-IV gingen. heute gehts von A-XFD, damit sind quasi alle 1-3-Buchstabenkombinantionen + Zahl für Namen tabu.
der Punkt funktioniert also nur, wenn mindestens einer der beiden Teiltexte keine Zelladresse sein kann (daher der _ oder ein anderes Zeichen verwenden!)
für VBA gibts alternaitv auch die Möglichkeit, den Zellbereich direkt über die Namesliste anzusprechen und nicht über Range:
also statt

Range("P2.Rde1")
dann

ThisWorkbook.Names("P2.Rde1").RefersToRange
das sucht den Text dann gleich und ausschließlich in der Namensliste.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 13
27.07.2021 19:13:29
Siegfried
Hi Daniel,
Dein Excurs war sehr hilfreich für mich. Danke!
Da P2 auch eine Zelladresse sein könnte, muss ich bei meiner Namenvergabe darauf achten, dass vor dem Punkt mindestens 4 Buchstaben sind, dann kann ich auch mein Prinzip beibehalten.
Jetzt kann ich meine Frage auch als beantwortet betrachten.
Gruß
Siegfried

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige