Cách dùng & và " để nối Range trong VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

LeTuan2212

Thành viên mới
Tham gia
12/7/17
Bài viết
4
Được thích
0
Giới tính
Nam
Các bác cho mình hỏi:
Mình chưa hiểu lắm việc dùng ký tự & ở trong VBA khi đề cập đến Range.
Trong đoạn code dưới đây của mình:
Mã:
Sub Add_Des()
FinalRow = Worksheets("lookup table").Cells(Rows.Count, 1).End(xlUp).Row
Range("D2") = "=Vlookup(A2,'Lookup Table'!A2:B" & FinalRow & ",2,FALSE)"

xRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("D2").AutoFill Destination:=Range("D2:D" & xRow)
End Sub

Mình viết theo hướng dẫn, nhưng có 2 đoạn mình chưa hiểu lắm là: " & FinalRow & " với cả Range("D2: D" & xRow)
Mình nghĩ nếu viết theo kiểu Range("D2: D" & xRow), thì đoạn ở trên phải là A2:B & FinalRow chứ, sao lại có thêm & với cả " làm gì ?
Sao lại dùng " và & ở chỗ đó, bác nào có thể giải thích cho mình ko ạ.
 
Các bác cho mình hỏi:
Mình chưa hiểu lắm việc dùng ký tự & ở trong VBA khi đề cập đến Range.
Trong đoạn code dưới đây của mình:
Mã:
Sub Add_Des()
FinalRow = Worksheets("lookup table").Cells(Rows.Count, 1).End(xlUp).Row
Range("D2") = "=Vlookup(A2,'Lookup Table'!A2:B" & FinalRow & ",2,FALSE)"

xRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("D2").AutoFill Destination:=Range("D2:D" & xRow)
End Sub

Mình viết theo hướng dẫn, nhưng có 2 đoạn mình chưa hiểu lắm là: " & FinalRow & " với cả Range("D2: D" & xRow)
Mình nghĩ nếu viết theo kiểu Range("D2: D" & xRow), thì đoạn ở trên phải là A2:B & FinalRow chứ, sao lại có thêm & với cả " làm gì ?
Sao lại dùng " và & ở chỗ đó, bác nào có thể giải thích cho mình ko ạ.
Bạn phải hiểu rằng cái nào trong "" là chuỗi cố định. còn FinalRow là biến nên không thể như bạn nói. Cứ có biến bạn phải tách riêng ra, tức là ....& biến &.....
 
Upvote 0
Các bác cho mình hỏi:
Mình chưa hiểu lắm việc dùng ký tự & ở trong VBA khi đề cập đến Range.
Trong đoạn code dưới đây của mình:
Mã:
Sub Add_Des()
FinalRow = Worksheets("lookup table").Cells(Rows.Count, 1).End(xlUp).Row
Range("D2") = "=Vlookup(A2,'Lookup Table'!A2:B" & FinalRow & ",2,FALSE)"

xRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("D2").AutoFill Destination:=Range("D2:D" & xRow)
End Sub

Mình viết theo hướng dẫn, nhưng có 2 đoạn mình chưa hiểu lắm là: " & FinalRow & " với cả Range("D2: D" & xRow)
Mình nghĩ nếu viết theo kiểu Range("D2: D" & xRow), thì đoạn ở trên phải là A2:B & FinalRow chứ, sao lại có thêm & với cả " làm gì ?
Sao lại dùng " và & ở chỗ đó, bác nào có thể giải thích cho mình ko ạ.

Lưu ý cái chỗ tôi bôi đỏ: hỏi han, tim hiểu thì tránh viết tắt. Lý do chính yếu: trong code kiếc, những cái đó nó có thể là tên biến, viết không rõ rệt chỉ tổ gây hiểu lầm.

Trả lời:
Hàm Range cần mọt tham số để trả về đúng cái Range. Hàm này có thể nhận tham số theo nhiều dạng. Dạng động (tính toán) thường dùng nhất là chuỗi. Khi ấy chuỗi tham số là địa chỉ của range.
"D2: D" & xRow chính là dạng chuỗi. "D2: D" là một chuỗi, & là toán tử nối chuỗi. FinalRow là một số, khi đi sau & thì VBA tự ép kiểu nó thành chuỗi để nối vào "D2: D". Ví dụ xRow là 500 thì "D2: D" & xRow = "D2: D500"

A2:B chả là dạng gì cả.
Khả năng 99,99% là VBA sẽ dịch A2 là tên một biến. Gặp A2:B, VBA sẽ có khả năng coi dấu : như ký hiệu nối dòng. Rốt cuộc là nó đọc Range(A2:B & FinalRow) và chả hiểu gì cả.

Lưu ý là thỉnh thoảng, nhất là ở GPE này, bạn sẽ gặp dạng [A2:B100]. Đó là dạng range tĩnh. Toán tử [] là một toán tử đặc biệt của VBA, nó có nghĩa là Evaluate. Tuỳ theo cái gì bên trong mà nó tính ra. A2:B100 bên trong [] không phải là địa chỉ. Nó chỉ là một tham số để [] tính ra range.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom