Hỏi lỗi code VBa

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

acmen87

Thành viên chính thức
Tham gia
7/5/09
Bài viết
70
Được thích
6
Các anh/chị/em cho hỏi code này sai ở đâu ạ. Em gõ lại theo sách mà k phát hiện ra ạ
Sub thuoc_tinh_address()

Set Range1 = Worksheets("Sheet1").Cells(1, 1)
MsgBox Range1.Address()
MsgBox Range1.Address(RowAbsolute:=False)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Worksheets(1).Cell(3, 3))
End Sub
 
Lỗi ở mệnh đề cuối; Còn vì sao nó lỗi thì chưa biết:

PHP:
Sub thuoc_tinh_address()
 Dim Range1 As Range
 
Set Range1 = Worksheets("Sheet1").Cells(1, 1)
MsgBox Range1.Address()
MsgBox Range1.Address(RowAbsolute:=False)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False) ' , RelativeTo:=Worksheets(1).Cell(3, 3))  '

End Sub
 
Upvote 0
Làm Excel quen rồi, đến khi làm bảng bên Word gõ Cells(r, c) bị nó cự miết. Phải là Cell(r, c) nó mới chịu.
 
Upvote 0
Các anh/chị/em cho hỏi code này sai ở đâu ạ. Em gõ lại theo sách mà k phát hiện ra ạ
Sub thuoc_tinh_address()

Set Range1 = Worksheets("Sheet1").Cells(1, 1)
MsgBox Range1.Address()
MsgBox Range1.Address(RowAbsolute:=False)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1)
MsgBox Range1.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Worksheets(1).Cell(3, 3))
End Sub
Đoạn code chính xác theo Microsoft là như thế này
Mã:
Set mc = Worksheets("Sheet1").Cells(1, 1)
MsgBox mc.Address() ' $A$1
MsgBox mc.Address(RowAbsolute:=False) ' $A1
MsgBox mc.Address(ReferenceStyle:=xlR1C1) ' R1C1
MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
 RowAbsolute:=False, _
 ColumnAbsolute:=False, _
 RelativeTo:=Worksheets(1).Cells(3, 3)) ' R[-2]C[-2]
 
Upvote 0
Tks anh. Không cố ý đâu ạ em cũng mới bắt đầu còn chưa hình dung ra nhiều. Đôi lúc sơ suất. Hôm qua đọc lại mấy lần mà không phát hiện ra. Cảm ơn anh. Tks mọi người
 
Upvote 0
Hướng dẫn từ Microsoft cho bạn


TênBắt buộc/Tùy chọnLoại dữ liệuSự miêu tảKết quả
RowAbsoluteKhông bắt buộcKhác nhauĐúng để trả về phần hàng của tham chiếu dưới dạng tham chiếu tuyệt đối. Giá trị mặc định là True .A$1
ColumnAbsoluteKhông bắt buộcKhác nhauĐúng để trả về phần cột của tham chiếu dưới dạng tham chiếu tuyệt đối. Giá trị mặc định là True .$A1
ReferenceStyleKhông bắt buộcKiểu tham chiếu XlPhong cách tham khảo Giá trị mặc định là xlA1 .A1 hoặc R1C1
ExternalKhông bắt buộcKhác nhauĐúng để trả về một tham chiếu bên ngoài. Sai để trả về một tham chiếu cục bộ. Giá trị mặc định là Sai .[book.xlsm]Sheet 1!A1
RelativeToKhông bắt buộcKhác nhauNếu RowAbsoluteColumnAbsoluteFalseReferenceStylexlR1C1 thì bạn phải bao gồm điểm bắt đầu cho tham chiếu tương đối. Đối số này là một đối tượng Phạm vi xác định điểm bắt đầu.

LƯU Ý : Thử nghiệm với Excel VBA 7.1 cho thấy rằng điểm bắt đầu rõ ràng là không bắt buộc. Dường như có một tham chiếu mặc định là $A$1.
Trả lại địa chỉ R1C1 tính từ tham chiếu ô hiện có so với tham chiếu ô liên quan


Cells(1,1) và ActiveSheet.Cells(1,1) là tương đương nhau

Cell(1, 1) đúng khi đã Set Cell thành một tham chiếu ô, ví dụ Set Cell = ActiveSheet.Cells(1,1)
 
Upvote 0
Code ở bài #1:
Worksheets(1).Cell(3, 3)
Theo ngữ pháp, Worksheets(1) là một đối tượng kiểu WorkSheet, một phần tử của Collection WorkSheets.
Cell được gọi như là một thuộc tính hoặc phương thức của đối tượng WorkSheet.
Đơn giản là đối tượng WorkSheet không có thuộc tính hoặc phương thức nào tên Cell cho nên lỗi. Thớt chễnh mảng chỉ biết hỏi mà không nói rõ sai dòng nào và lỗi báo ra sao. Có câu lỗi báo thì đọc biết liền.

Chú thích:
Worksheets(1).Cell(3, 3) là một thuộc tính readonly, không thể "Set" được.
Tuy nhiên, vì nó là tham chiếu (Reference Type) cho nên có thể gán trị cho thuộc tính Value của nó.
 
Lần chỉnh sửa cuối:
Upvote 0
Lỗi tại từ cells của người ta mang ra viết tắt.
Mình lại nghĩ là:


Dim Cell As Range
Mã:
Sub ABC()
 Set Cell = Range("B4:E9")
End Sub
←0→ ←0→ ←0→ ←0→ ←0→ ←0→
PHP:
Sub ThuLoi()
 ABC
 MsgBox Cell(2, 3).Address
End Sub
 
Upvote 0
Mình lại nghĩ là:

Dim Cell As Range
Mã:
Sub ABC()
 Set Cell = Range("B4:E9")
End Sub
←0→ ←0→ ←0→ ←0→ ←0→ ←0→
PHP:
Sub ThuLoi()
 ABC
 MsgBox Cell(2, 3).Address
End Sub
Ở bài #8 tôi có giải thích rõ hơn.
Cú pháp của thớt (bài #1) là gọi thuộc tính Cell của WorkSheet, chứ chả liên quan gì đến việc Cell có thể là một biến.
Relativeto trong cú pháp trên là một tham của hàm Range.Address.
Và giản dị, WorkSheet không có đối tượng nào tên Cell cho nên lỗi.
 
Upvote 0
Web KT
Back
Top Bottom