Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
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

Range-Objekt fehlgeschlagen

Range-Objekt fehlgeschlagen
21.10.2022 15:29:24
Hans-Jürgen
Hallo Wissende,
ich habe einen komischen Fehler, bei dem in bestimmten Situationen das ClearContents fehlschlägt (wegen des Range-Obekts). Ich habe mir leider den wörtlichen Fehlertext nicht kopiert, ich hoffe, ihr wisst auch so, was ich meine. Zu diesem Fehler gibt es auch Dutzende Hilfestellungen, aber keine hat mir geholfen, siehe unten).
Aufgrund der Größe kann ich euch auch nicht das gesamte Script mitgeben, aber das hier sollte zum Verständnis reichen:
Nach dem Autoopen werden die beiden Variablen deklariert

Public gwkbWorkbook As Excel.Workbook
Public gwksWorksheet As Excel.Worksheet
und mit Inhalt befüllt

    Set gwkbWorkbook = ThisWorkbook
Set gwksWorksheet = gwkbWorkbook.Sheets(1)
Dann starten je nach Anwendung des Benutzers diverse Userforms, und nach Durchlauf wird eine Sub "Anzeige Aktualisieren" ausgeführt (damit das, was der User über die Forms angestellt hat, auch gleich sichtbar wird.)
Dieses "Anzeige Aktualisieren" funktioniert so, dass die Anzeigebereiche gelöscht werden und über ADODB-Verbindung die aktuellen Anzeigen der Datenbank abgerufen werden. Das alles funktioniert fehlerfrei, aber das Löschen nicht. Den Range-Fehler bekomme ich bei folgendem Befehl:

   gwksWorksheet.Range(Cells(20, 3), Cells(31, 30)).ClearContents
Ich habe auch schon versucht, statt der Cells-Werte die Schreibweise mit "A1:D20" zu wählen, machte keinen Unterschied. Das Merkwürdige ist, dass ich ein paar Mal ein Userform nutze und alles ist fein, und plötzlich kommt diese Fehler.
Habt ihr eine Idee, was ich nochmal versuchen könnte?
Vielen Dank im voraus
Hans-Jürgen

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range-Objekt vollständig referenzieren
21.10.2022 15:33:48
EtoPHG
Hallo,
so:

   gwksWorksheet.Range(gwksWorksheet.Cells(20, 3), gwksWorksheet.Cells(31, 30)).ClearContents
...oder mit einer With gwksWorksheet Klammer.
Gruess Hansueli
AW: Range-Objekt fehlgeschlagen
21.10.2022 16:22:15
GerdL
Hallo Hans-Jürgen!
Einmal war ThisWorkbook.Sheets(1) dann nicht das aktive.
Als Ergänzung noch:

gwksWorksheet.Cells(20, 3).Resize(12, 28).ClearContents
Gruß Gerd

AW: Range-Objekt fehlgeschlagen
21.10.2022 17:05:59
snb
Verzichte auf redundante Object Variablen.
Vermeide Public Variables
Thisworkbook und sheets(1) sind inhärent Public, also was du machts ist doppelt redundant.
Was überall im Projekt reicht:

sheets(1).Cells(20, 3).resize(11,27).ClearContents

Anzeige
AW: Range-Objekt fehlgeschlagen
21.10.2022 22:53:54
Yal
Moin,
hmm... was ist dann noch nicht gesagt worden? Ich probier's mal (Klugscheisserei am Freitag :-)

gwksWorksheet.Range(Cells(20, 3), Cells(31, 30)).ClearContents
Bedeutet, dass es Cells(20,3) und Cells(31,30) in der aktuellen "Worksheet" sucht (gwksWorksheet wirkt an der Stelle nicht). ActiveSheet ist das "Default"-Objekt. Klappt meistens. Aber manchmal aus irgendeinem Grund ist ActiveSheet nicht belegt oder zielt auf einem "Sheet", dass kein "Worksheet" ist (Diagram- oder Makro-Blatt). Cells(x,y) oder Range("A1") ohne Verweis auf einem Worksheet geht dann in die Knie.
Siehe https://learn.microsoft.com/en-us/office/vba/api/excel.application.activesheet : "Returns Nothing if no sheet is active."
Daher:

Range(gwksWorksheet.Cells(20, 3), gwksWorksheet.Cells(31, 30)).ClearContents
Man könnte ja die "Anfang"-Zelle auf Blatt 1 und die Endzelle auf einem anderen Blatt (3-Dimensionale Markierung). Der Blatt-Verweis ganz vorn ist überflüssig, weil schon in den begrenzenden Zellen drin.
Anmerkung an der Stelle:
Es empfiehlt sich für die gangige Elemente kurze Variablenname zu verwenden. Je öfter verwendet, desto kürzer. Man entwickelt seinen eigenen Standard:
wsQ für Quelle-Worksheet,
wsZ für was denn? Ziel-Worksheet.
ws1 wäre in deinem Fall passend.
CamelCase ist wichtig!)
Ich halte auch nichts von überblähten Präfix: gwks... Vor Cells und Range kommt IMMER einen Worksheet-Objekt, egal wie der heisst (in kurzform manchmal notwendig: wsQ, wenn es auch rgQ gibt).
Präfix mögen gut sein, wenn man in einem mehrmonatigen Multi-Entwickler-Projekt tätig ist, aber im Ernst: unsere Variablen gelten in 99% innerhalb eine höchstens 20-zeilige Prozedure zum eigenen Bedarf. Also für wen der Aufwand?
Und "gwksWorksheet" ist auch redundant: WorksheetWorksheet! Unnötig schwer zu lesen und frei von relevanten Information.
Auch Laufvariable (i in "For i = .."), die 10-stellig sind, machen mich wahnsinnig!
Jetzt aber Schluss. Ab ins Wochenende.
VG
Yal
Anzeige
AW: Range-Objekt fehlgeschlagen
22.10.2022 09:25:17
GerdL
Sub Unit()

MsgBox Cells(20, 3).Resize(11, 27).Address = Range(Cells(20, 3), Cells(31, 30)).Address
MsgBox Cells(20, 3).Resize(12, 28).Address = Range(Cells(20, 3), Cells(31, 30)).Address
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige