2013-09-23 70 views
6

bạn bè buổi tối tốt:2 cách cho "ClearContents" trên VBA Excel, nhưng 1 hoạt động tốt. Tại sao?

tôi có trong tâm trí 2 cách để thanh toán bù trừ một nội dung trong một phạm vi định nghĩa của các tế bào của một dự án VBA (trong MS Excel):

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

Vấn đề là cách thứ hai hiển thị cho tôi lỗi '1004' khi tôi không xem Bảng tính hiện tại "SheetName" (nói cách khác, khi tôi chưa "SheetName" là Bảng hoạt động).

Cách đầu tiên hoạt động hoàn hảo trong mọi tình huống.

Tại sao điều này lại xảy ra? Làm thế nào tôi có thể sử dụng "Cách thứ hai" mà không có lỗi này?

+1

Không phải cho điểm nhưng câu trả lời của tôi khó hiểu? –

+0

@Sid Nếu bao giờ tôi tuyệt vọng chấp nhận, tôi nghĩ rằng tôi sẽ chỉ theo bạn xung quanh đăng lại câu trả lời của bạn! – pnuts

+1

@pnuts: Không, tôi không nghĩ: @tigeravatar đang tuyệt vọng :) Đó chỉ là sự khác biệt trong vài phút :) –

Trả lời

8

Đó là vì bạn chưa đủ điều kiện Cells(1, 1) với đối tượng trang tính và điều tương tự cũng đúng với Cells(10, 2). Đối với các mã để làm việc, nó sẽ giống như thế này:

Dim ws As Worksheet 

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

Cách khác:

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

EDIT: Các đối tượng Range sẽ kế thừa các bảng tính từ các đối tượng tế bào khi đang chạy từ một mô-đun chuẩn hoặc biểu mẫu người dùng. Nếu bạn đang chạy mã từ một mô-đun mã bảng, bạn sẽ cần phải hội đủ điều kiện Range cũng như vậy:

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

hoặc

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

Bạn có thể muốn thêm 'ws.' trước' Range'? 'ws.Range (ws.Cells (1, 1), ws.Cells (10, 2)). ClearContents' –

+0

Tương tự như thêm một DOT cho mã thứ hai' .Range (.Cells (1, 1), .Cells (10, 2)). ClearContents' –

+0

Điều đó không cần thiết. Phạm vi sẽ kế thừa bảng tính của các đối tượng Ô nếu Phạm vi chưa được cung cấp với một trang tính – tigeravatar

8

Đó là vì bạn không đủ điều kiện đối tượng ô của mình. Hãy thử điều này

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

Chú ý DOT trước ô?

0

Đối với số địa chỉ của các tế bào cố gắng để cho phép S1O1 hộp kiểm trong MS Cài đặt Excel. Đây là tab thứ hai từ đầu (tức là Công thức), ở đâu đó giữa trang trong phiên bản tiếng Hungari của tôi.

Nếu được bật, nó xử lý VBA giải quyết theo cả hai kiểu, tức là Phạm vi ("A1: B10") và Phạm vi (Ô (1, 1), Ô (10, 2)). Tôi giả sử nó xử lý kiểu Range ("A1: B10") chỉ, nếu không được kích hoạt.

Chúc may mắn!

(Lưu ý, phạm vi đó ("A1: B10") đại diện cho một hình vuông 2x10, trong khi Dải ô (1, 1), Ô (10, 2)) đại diện cho 10x2. thứ tự của việc thêm.)