Không giản lược/Có thể giản lược/Nên giản lược thuộc tính .Value của Range Object

tuhocvba

Administrator
Thành viên BQT
Trong rất nhiều đoạn code của mọi người, hay thậm chí các bài viết trên diễn đàn, chúng ta đã nghe nói tới việc có thể giản lược .Value khi viết code.
Ví dụ thay vì viết:
Mã:
Cells(1,1).value = 3
chúng ta có thể viết là:
Mã:
Cells(1,1)= 3
Đối với Range hay Cells, thì thuộc tính .Value nên được giản lược đi, đó là cách viết code đúng.
Tuy nhiên cũng có trường hợp chúng ta không thể giản lược .Value, và cũng có cả trường hợp với tư cách là Object, chúng ta không thể viết .Value vào cho đối tượng Object.
Vậy trường hợp nào không được viết .Value, trường hợp nào không viết .Value cũng được, sau đây chúng ta sẽ cùng nhau làm rõ.
1-Trường hợp không thể giản lược (không thể không viết) .value :
Sheets(2).Range("A1:B5").Value = Sheets(1).Range("A1:B5").Value

Trong trường hợp copy giá trị từ sheet 1 sang sheet 2. Giá trị Value từ bên phải (sheet 1) sẽ được gán cho Value bên trái (sheet 2).
Trong trường hợp này .Value ở bên phải là không thể giản lược được, bạn bắt buộc phải viết.
.Value ở bên trái thì có thể giản lược được.

Trong trường hợp ta viết:
Sheets(Range("A1").Value).Select
Tên của sheet được ghi ở ô A1, chúng ta sẽ tiến hành xử lý đối với cái sheet đó (sheet có tên mà tên đó được ghi ở ô A1), trường hợp này không thể giản lược .value
Bạn cần đăng nhập để thấy đính kèm


Là bởi vì kiểu dữ liệu của tham số lúc này sẽ là Object (Range), cho nên nếu giản lược không viết .Value thì giá trị trả về là Range Object, và máy tính không xác định được là phải làm việc với sheet có tên là gì.

Trường hợp tiếp theo:

Activesheet.Hyperlinks.Add Anchor:=Range("D20"), Address:=Range("F20").Value, TextToDisplay:=Range("D20").Value
Đối với TextToDisplay thì .Value cũng không thể giản lược được. Nếu không viết đầy đủ .Value thì sẽ bị lỗi.

2- Trường hợp không được viết .Value
Activesheet.Hyperlinks.Add Anchor:=Range("D20").Value, Address:=Range("F20").Value, TextToDisplay:=Range("D20").Value
Đối với Anchor thì không thể viết .Value .

Range("A1:B10").Sort Key1:=Range("A1").Value, Order1:=xlAscending, Key2:=Range("B1").Value, Order2:=xlDescending, Header:=xlNo
Đối với việc sắp xếp (Sort) data, trong trường hợp Header:=xlNo thì đối với Key không thể viết .Value .

3-Trường hợp không nên viết .Value
Không nên viết có nghĩa là bạn viết thì cũng không sao, nhưng không viết thì tốt hơn.
Range("A1:B10").Sort Key1:=Range("A1").Value, Order1:=xlAscending, Key2:=Range("B1").Value, Order2:=xlDescending, Header:=xlYes
Khi sắp xếp (Sort) data, trong trường hợp Header:=xlYes, ta viết hay không viết Value thì chương trình vẫn hoạt động.
Tuy nhiên, bản chất ở đây đó là đối với phạm vi trong một sheet, thì ta nên chỉ định vị trí cột.
Khi chúng ta chỉ định là Value, thì tham số truyền vào cho Key sẽ là chuỗi ký tự. Trong trường hợp Header = xlYes, thì điều đó không có vấn đề gì nhưng nếu là xlNo thì chúng ta không được chỉ định Value. Vì vậy, để chắc ăn, thì ta không nên viết .Value sẽ tốt hơn.

Về cơ bản, những ý chính tôi đã cung cấp đầy đủ cho các bạn. Bản dịch vẫn chưa được dịch hết, chúng tôi sẽ dịch tiếp khi có thời gian.
Nguồn dịch:
 
Top