2013-09-23 8 views
6

Guten Abend Freunde:2 Möglichkeiten für "ClearContents" auf VBA Excel, aber 1 funktioniert gut. Warum?

ich im Kopf 2 Möglichkeiten einen Gehalt in einem definierten Bereich von Zellen eines VBA-Projekt (in MS Excel) für das Clearing:

  1. Worksheets("SheetName").Range("A1:B10").ClearContents
  2. Worksheets("SheetName").Range(Cells(1, 1), Cells(10, 2)).ClearContents

Das Problem ist, dass die zweite Möglichkeit mir einen Fehler '1004' anzeigen, wenn ich das aktuelle Arbeitsblatt "SheetName" nicht beobachte (mit anderen Worten, wenn ich nicht "SheetName" als habe ActiveSheet).

Der erste Weg funktioniert einwandfrei in jeder Situation.

Warum passiert das? Wie kann ich den "zweiten Weg" ohne diesen Fehler verwenden?

+1

Nicht für Punkte, aber war meine Antwort so schwer zu verstehen? –

+0

@Sid Wenn ich jemals verzweifelt nach akzeptieren würde, denke ich, dass ich dir nur folgen werde, um deine Antworten zu wiederholen! – pnuts

+1

@pnuts: Nein, ich denke nicht: @tigeravatar ist verzweifelt :) Es war nur ein Unterschied von wenigen Minuten :) –

Antwort

8

Es ist, weil Sie nicht Cells(1, 1) mit einem Arbeitsblattobjekt qualifiziert haben, und das gleiche gilt für Cells(10, 2). Für den Code zu arbeiten, soll es in etwa so aussehen:

Dim ws As Worksheet 

Set ws = Sheets("SheetName") 
Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents 

Alternativ:

With Sheets("SheetName") 
    Range(.Cells(1, 1), .Cells(10, 2)).ClearContents 
End With 

EDIT: Das Range-Objekt das Arbeitsblatt aus den Zellen Objekten erben werden, wenn der Code aus ausgeführt wird ein Standardmodul oder Benutzerformular. Wenn Sie den Code aus einem Arbeitsblatt Code-Modul ausgeführt wird, müssen Sie Range auch qualifizieren, etwa so:

ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents 

oder

With Sheets("SheetName") 
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents 
End With 
+0

Sie möchten 'ws.' vor dem' Range' hinzufügen? 'ws.Range (ws.Cells (1, 1), ws.Cells (10, 2)). ClearContents' –

+0

Ähnliches Hinzufügen eines DOT für den zweiten Code' .Range (.Cells (1, 1), .Cells (10, 2)) ClearContents' –

+0

Das ist nicht notwendig. Range erbt das Arbeitsblatt der Cells-Objekte, wenn Range nicht mit einem Blatt – tigeravatar

8

Das liegt daran, dass Sie Ihr Zellenobjekt nicht vollständig qualifizieren. Versuchen Sie diese

With Worksheets("SheetName") 
    .Range(.Cells(1, 1), .Cells(10, 2)).ClearContents 
End With 

Beachten Sie die Punkt vor Zellen?

0

Für numerische Zellen Adressierung versuchen S1O1 Checkbox in MS zu ermöglichen, Excel-Einstellungen Es ist der zweite Tab von oben (d. H. Formeln), irgendwo Mitte Seite in meiner ungarischen Version.

Wenn aktiviert, behandelt es die VBA-Adressierung in beiden Stilen, d. H. Bereich ("A1: B10") und Bereich (Zellen (1, 1), Zellen (10, 2)). Ich gehe davon aus, dass es nur Range ("A1: B10") behandelt, wenn es nicht aktiviert ist.

Viel Glück!

(Beachten Sie, dass der Bereich ("A1: B10") ein Quadrat von 2x10 darstellt, während der Bereich (Zellen (1, 1), Zellen (10, 2)) 10x2 darstellt die Reihenfolge der Adressierung.)

Verwandte Themen