2012-02-26 2 views
6

Tôi hơi nhầm lẫn giữa ô và dải ô trong vba (excel). Về mặt logic, tôi có thể nghĩ một ô là một phạm vi với kích thước = 1; và tôi nghĩ rất dễ để tạo ra một phạm vi từ một tế bào.Excel vba: Loại ô và dải ô

Nếu tôi đọc api của thuộc tính EntireRow here hoạt động trên phạm vi. Tuy nhiên, công việc mã dưới đây, cho thấy 'cell'variable bên trong vòng lặp là một loạt

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

Cùng lúc đó, các mã dưới đây trả về một lỗi chỉ ra loại không phù hợp khi gọi removecell chức năng. Điều gì sẽ là loại targetCell trong định nghĩa chức năng?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Bạn nói đúng. Ô là một phạm vi có 1 mục. Là 'val', thuộc loại' Boolean'? – shahkalpesh

+0

có. phương pháp này trước đây đã hoạt động khi tôi chuyển "cell.Text" và chấp nhận nó trong phương thức remove cellVal As String. Bây giờ tôi đang cố gắng để vượt qua các tế bào (phạm vi) chính nó bằng cách đi qua tế bào thay vì cell.Text – bsr

Trả lời

4

này biên dịch và chạy:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Cảm ơn. "Dim ô Như Excel.Range" đã cho tôi một đầu mối, như tôi đã không khai báo một cách rõ ràng ô trước đây. Như tôi đã đề cập, tôi vừa chuyển đổi phương thức và trước đây tôi không cần khai báo ô một cách rõ ràng. Lỗi tôi nhận được có chút sai lệch. – bsr

+2

Giá trị mặc định của đối tượng Phạm vi là Giá trị, do đó, với Ô không được khai báo là Phạm vi, Ô được giả định là Giá trị, đủ, hợp lý khiến cho "loại không phù hợp". Thực hành rất tốt là khai báo tất cả các biến. Để ép buộc điều này, trong VBE, hãy chọn Công cụ> Tùy chọn> Trình soạn thảo> Yêu cầu Tuyên bố Biến. Thao tác này sẽ thêm Option Explicit vào đầu tất cả các mô đun mới và cung cấp cho bạn lỗi trình biên dịch "Biến không được xác định" cho các biến chưa khai báo. Bạn cũng có thể chỉ cần chọn Option Explicit ở đầu các mô-đun hiện có. –

+0

+1 trên mẹo tốt để khai báo các biến! –