Nên viết .Value hay không?

tuhocvba

Administrator
Thành viên BQT
Chúng ta vẫn thường nhìn thấy code người ta viết:
Mã:
Sub Sample1()
    Range("A1").Value = 100
End Sub
Và tất nhiên trường hợp như dưới đây cũng không phải là hiếm:
Mã:
Sub Sample2()
    Range("A1") = 100
End Sub

Vậy tóm lại là có nên thêm .Value khi viết Code hay không?

Khi chúng ta sử dụng Object để thao tác với Excel bằng VBA, nói chung có hai loại như sau:
  • Đối tượng.Thuộc_tính = Giá trị
  • Đối tương.Mệnh lệnh Option := Giá trị
[Đối tượng.Thuộc_tính] là cấu trúc thiết định trạng thái hay là thuộc tính cho đối tượng mà ta thao tác. Ví dụ, khi thiết định tên sheet ta có
「Worksheets("Sheet1").Name = "tuhocvba.net"」.
Ngược lại, 「 Đối tượng .Mệnh lệnh」l là chúng ta ra mệnh lệnh nó thực thi một hành động nào đó.
Ví dụ xóa cells thì ta có 「Range("A1").Delete Shift:=xlToLeft」. (Delete: hành động xóa)
Đối với đối tượng (Object) thì ta có thể gọi thuộc tính (property) hay phương thức (method-thực thi hành động) , các bạn cần phân biệt điều này.

Nào, bây giờ trở lại với đối tượng (Object) là Range. Giả sử như ta có Range A1. Với đối tượng này, ta có thuộc tính Value.
Thuộc tính này có thể giản lược, tức là không cần viết khi code. Trong trường hợp bị giản lược, VBA mặc định hiểu là chúng ta đang làm việc với thuộc tính Value của đối tượng Range trong code.
Như vậy sẽ có tranh cãi, là có nên viết Value hay không nên viết vào trong code.
Đối với thế hệ máy tính ngày xưa, việc viết hay không viết sẽ có khác biệt về tốc độ xử lý code (chú ý theo dõi chủ đề mà chúng tôi đang dịch-trường hợp không viết Value cho tốc độ nhanh hơn với dòng máy tính cũ ngày xưa).
Tuy nhiên với máy tính bây giờ thì không còn khác biệt như thế nữa. Vì vậy, nếu để nói nên viết đầy đủ thuộc tính Value trong code hay không nên viết, thì không có đáp án chính xác rõ ràng nào ở đây.
Vậy thì có người sẽ nghĩ, vậy thì khỏi cần viết Value vào trong code làm gì, đằng nào máy tính cũng tự hiểu.

Tôi nghĩ, trường hợp nào cũng được. Tức là viết hay không viết Value thì đều được. Quan trọng hơn thế, là chúng ta nhận thức được rằng, thuộc tính Value đang được giản lược đi khi gõ code nhưng máy tính vẫn hiểu.
Trong chương trình, phải làm sao có thể thuyết minh tất cả các dòng lệnh. (Mình hiểu rõ tất cả các lệnh để làm gì, mục đích).
Trừ trường hợp copy ở đâu đó về sử dụng ( :unsure: ) thì đó là điều tệ nhất, chúng ta chẳng hiểu gì cả.
Tự mình nhận thức rằng Value đang được mình giản lược đi, đây là luật của VBA, khi giản lược không viết gì thì mặc định máy tính hiểu sử dụng thuộc tính Value.
Bài viết tham khảo và dịch từ:
 
H

Hồng Phương

Guest
Hình như anh bị sai đó
Theo em nghĩ "Value" là chỉ con số thật 123345
Nếu anh viết "Value" với số có số "0" đằng trước xem có được không nào?
 

Euler

Administrator
Thành viên BQT
Theo em nghĩ "Value" là chỉ con số thật 123345
Nếu anh viết "Value" với số có số "0" đằng trước xem có được không nào?
Chả hiểu nói gì :D
Range có thuộc tính Value. Đâu cứ gì số má gì.
Thử nhé.
Bạn cần đăng nhập để thấy đính kèm

Mã:
Sub test()
    Dim s As String
    s = Range("A1")
    MsgBox s
End Sub
 
B

bvtvba

Guest
Hình như anh bị sai đó
Theo em nghĩ "Value" là chỉ con số thật 123345
Nếu anh viết "Value" với số có số "0" đằng trước xem có được không nào?
Vậy bạn muốn lấy giá trị của Range("A1") thì bạn làm thế nào?
Có hai tình huống:
1. Ô A1 đang viết chữ: "Phương Đen"
2. Ô A1 đang viết số 123
Trong cả hai trường hợp thì code sau đều lấy được giá trị của ô A1
Mã:
dim s as string
s = Range("A1").value
 
H

Hồng Phương

Guest
Hi hi... em hiểu sai lầm anh @Euler oi, em cứ làm như hàm Value
 
Top