Thema Datum  Von Nutzer Rating
Antwort
07.04.2015 10:13:32 Mara
NotSolved
07.04.2015 10:39:24 Gast1790
NotSolved
07.04.2015 11:20:35 Gast32806
NotSolved
07.04.2015 11:27:58 Gast57863
NotSolved
07.04.2015 11:43:54 Mara
NotSolved
07.04.2015 12:35:23 Gast97452
NotSolved
Rot ja
07.04.2015 13:27:15 Mara
Solved
Blau ja
07.04.2015 13:37:34 Gast27438
NotSolved
Rot ja
08.04.2015 08:40:47 Mara
NotSolved
Blau ja
08.04.2015 21:19:31 Gast70521
NotSolved

Ansicht des Beitrags:
Von:
Gast70521
Datum:
08.04.2015 21:19:31
Views:
859
Rating: Antwort:
  Ja
Thema:
ja

>> Range(SR.Column, SR.Column).Delete

Das kann gar nicht sein. Laufzeitfehler müssen bei dir schon weitaus früher geworden werden, als erst in der von dir genannten Zeile.

 

Dann noch mal ausführlich:

  'Deletes the column "Sub-Region" if it exists
  Dim SR As Range
  
  SR = Workbooks(dbName).Worksheets("Container1").Cells.Find("Sub-Region")
  
  If Not SR Is Nothing Then
    Range(SR.Column, SR.Column).Delete
  Else
    SR = Workbooks(dbName).Worksheets("Container1").Cells.Find("Subregion")
    If Not SR Is Nothing Then
      Range(SR.Column, SR.Column).Delete
    End If
  End If

Du hast die Variaible SR ja oben deklariert - Datentyp ist die Klasse 'Range'. Also repräsentiert sie zur Laufzeit ein Objekt.

Objektvariablen werden in Basic mit Set gesetzt. Tut man das nicht, kommt der Laufzeitfehler "Objektvariable oder With-Blockvariable nicht festgelegt" (diese Fehlermeldung bekommst du auch bei dir, nur hal auf Englisch).

Jetzt gibt es noch eine Besonderheit bei der Range-Klasse, die hat nämlich eine Default-Methode (die verborgen ist) und automatisch aufgerufen wird, wenn kein Member Access Operator verwendet wird. Ohne jetzt zu sehr ins Detail gehen zu wollen: Diese erfüllt Default-Methode erfüllt verschiedene Aufgaben, je nach Situation. In unserem Fall hier wird die Eigenschaft Range.Value abrufen.

Da bei dir jedesmal das Set am Anfang der Zeile fehlt, geht der Interpreter also auf die Default-Methode zu, die gleich der Value-Eigenschaft ist und logischerweise kann der Inhalt einer Zelle nicht in ein Range-Objekt umgewandelt (gecastet) werden, und et voilà man hat einen wunderbaren Laufzeitfehler produziert.

Wenn man also mit Objektvariablen arbeitet, dann muss bei der Zuweisung/Referenzierung immer das Set davor schreiben, damit eindeutig ist was gemeint ist.

 

übrigens:

Range(SR.Column, SR.Column).Delete

Angenommen SR ist ein gültig referenziertes Objekt, dann würde dieser Befehl keine Spalte löschen sondern eine einzelne Zelle. Weil da zwei zahlen angegeben sind und diese sozusagen eine Koordinate darstellen (z.B. {2, 2}, oder {5,5}), also eine einzelne Zelle.

Columns(5).Delete
SR.EntireColumn.Delete

Obige Zeile(n) würde eine Spalte löschen. Danach ist natürlich die Objektreferenz ungültig, da der Bereich (die Spalte) gelöscht wurde.

 

Mein Tipp: Dokumentation / Hilfe / VBA-Referenz lesen.

Dort steht vieles drin was hier im Forum tagtäglich gefragt wird bzw. unklar ist.

Ebenso sind dort die Grundlagen der Sprache erklärt, sowie die Grundlagen des Programmierens allgemein.

Der Rest ist dann Übung/Praxis. ;o)

 

Gruß


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
07.04.2015 10:13:32 Mara
NotSolved
07.04.2015 10:39:24 Gast1790
NotSolved
07.04.2015 11:20:35 Gast32806
NotSolved
07.04.2015 11:27:58 Gast57863
NotSolved
07.04.2015 11:43:54 Mara
NotSolved
07.04.2015 12:35:23 Gast97452
NotSolved
Rot ja
07.04.2015 13:27:15 Mara
Solved
Blau ja
07.04.2015 13:37:34 Gast27438
NotSolved
Rot ja
08.04.2015 08:40:47 Mara
NotSolved
Blau ja
08.04.2015 21:19:31 Gast70521
NotSolved