Chức năng của cú pháp [ bien="string"] là gì

Liên hệ QC

khongnhienttt

Thành viên hoạt động
Tham gia
15/7/15
Bài viết
137
Được thích
33
Nhờ các bạn giải thích giúp mình công dụng của việc đặt ngoặc vuông này là gì ạ, và cách sử dụng nó ra sao, khi mình chạy sub Test thì vẫn không báo lỗi, tức là VBA vẫn hiểu nó
Mã:
Sub test()
    [bien="Day La bien X"]
End Sub
 
Sau 3 phút thử nghiệm, tôi nghĩ rằng đây là một hình thức comment khác, phù hợp cho việc minh họa.
PHP:
Option Explicit
Sub test()
    Dim bien
    '[bien="Day La bien X"]
    bien = 2
    [[]bien = 1:"ujtrgf" hhff=3]
    Debug.Print bien
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Sau 3 phút thử nghiệm, tôi nghĩ rằng đây là một hình thức comment khác, phù hợp cho việc minh họa.
PHP:
Option Explicit
Sub test()
    Dim bien
    '[bien="Day La bien X"]
    bien = 2
    [[]bien = 1:"ujtrgf" hhff=3]
    Debug.Print bien
End Sub
vậy hoá ra 2 ngoặc vuông đó chỉ là comment thôi đúng ko bác
 
Upvote 0
Cặp ngoặc vuông là một cú pháp đặc biệt trong toàn bộ ngôn ngữ Visual Basic hay vb.net chứ không riêng gì VBA.
Chức năng như:
1. Không xem là một từ khóa, ví dụ: byval [as] as string. As là từ khóa trong cú pháp Vba nhưng ở đây nó là biến bình thường khi có cặp ngoặc.
2. Phân tích và Tìm đọc đối tượng, phương thức hàm, biến, ...

[Bien + x + y] bien dù cho không định nghĩa nhưng vẫn được phân tích, dù cho có Option Explicit, bien vẫn được đọc, nếu gặp lỗi thì cả khối [] trả về chuỗi error.

3. Nó luôn luôn thực thi khi chạy.
4. Khai báo ngoại lệ cho một kiểu Enum, hoặc hướng sự kiện.
Mã:
Enum abc
X
[_start] = x
Y
X
[_end]
End Enum

Vòng lặp
For i = abc.[_start] to abc.[_end]
   If i = abc.y then exit for
Next

Bạn sẽ thấy dấu _ để định nghĩa ngoại lệ trong kiểu Enum

Ví dụ:
Nếu VBA Excel không có sự kiện mặc định của form là _hwnd
Thì ta tạo Form.[_hwnd] và khi code được copy cho VBA access sự kiện này đã có mặc định nên không cần tạo.
Ngược lại nếu copy từ access sang excel thì code không bị debug lỗi, nhưng khi chạy thì gặp lỗi.

5. Đặt biến ký tự đặc biệt với ký tự utf-8 (chưa kiểm nghiệm)
Dim [ToánTử] as string
 
Lần chỉnh sửa cuối:
Upvote 0
[] được dùng thay cho Evaluate trong một số trường hợp.

Mã:
Sub Test()
  Debug.Print Evaluate("countblank(A1:A2)"), [countblank(A1:A2)]
  Debug.Print Evaluate("Cong(10,5)"), [Cong(10,5)]
End Sub

Function Cong(a As Long, b As Long) As Long
  Cong = a + b
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
[] được dùng thay cho Evaluate trong một số trường hợp.

Mã:
Sub Test()
  Debug.Print Evaluate("countblank(A1:A2)"), [countblank(A1:A2)]
  Debug.Print Evaluate("Cong(10,5)"), [Cong(10,5)]
End Sub

Function Cong(a As Long, b As Long) As Long
  Cong = a + b
End Function
Từ lúc tôi học và viết VBA. Tôi chưa thấy [] thay cho evaluate dù chỉ 1 trường hợp nào.
 
Upvote 0

Chẳng thấy trang giải thích chỗ nào.
Dim isblank thử coi cái ví dụ đó sẽ ra sao
Chắc ông viết trang đó học căn bản rồi đi chia sẻ.

Dim ISBLANK
Hoặc Tạo
Private Function ISBLANK()
End function

Rồi:
Call MsgBox(Evaluate("=ISBLANK(A1)")
MsgBox [ISBLANK(A1)]

(Anh thông cảm trả lời từ đt, nên viết khó)
 
Lần chỉnh sửa cuối:
Upvote 0
Chẳng thấy trang giải thích chỗ nào.
Dim isblank thử coi cái ví dụ đó sẽ ra sao
Chắc ông viết trang đó học căn bản rồi đi chia sẻ.

Dim ISBLANK
Hoặc Tạo
Private Function ISBLANK()
End function

Rồi:
Call MsgBox(Evaluate("=ISBLANK(A1)")
MsgBox [ISBLANK(A1)]

(Anh thông cảm trả lời từ đt, nên viết khó)
Ở đây chúng ta đọc và thấy rõ cấu trúc:
Application.Evaluate("Expression")

Hoặc viết ngắn gọn hơn:
Evaluate("Expression")

Và cuối cùng họ ghi "Bạn cũng có thể xóa dấu ngoặc kép và bao quanh biểu thức bằng dấu ngoặc vuông"
[Expression]

Quay lại vấn đề, bạn đặt biến hoặc hàm trùng với tên của Range hoặc tên của hàm, theo quy tắc những gì nội tại (private) thì thủ tục giải quyết trước còn toàn cục (public) được giải quyết sau, như thế bạn định nghĩa kiểu gì trong thủ tục thì nó sẽ hiểu theo hướng mà bạn định nghĩa.

Nhưng áp dụng thực tế trên một mảng chẳng hạn, giả sử:

Dim Arr
Arr = Range("A1:B10").Value

Sẽ bằng với:
Arr = [A1:B10].Value

Điều này rất thực tế.

Và đây là trang của Microsoft chính chủ:

 
Upvote 0
Trên Office 2010, kết quả khi chạy thử code bạn @Ngô Hải Đăng
Mình cũng office 2010 nhưng kết quả dòng 2 là 15 và 15
1629206973341.png
Từ lúc tôi học và viết VBA. Tôi chưa thấy [] thay cho evaluate dù chỉ 1 trường hợp nào.
Bạn xem link này https://docs.microsoft.com/en-us/office/vba/api/excel.application.evaluate
có đoạn Using square brackets (for example, "[A1:C5]") is identical to calling the Evaluate method with a string argument
 
Upvote 0
Ở đây chúng ta đọc và thấy rõ cấu trúc:
Application.Evaluate("Expression")

Hoặc viết ngắn gọn hơn:
Evaluate("Expression")

Và cuối cùng họ ghi "Bạn cũng có thể xóa dấu ngoặc kép và bao quanh biểu thức bằng dấu ngoặc vuông"
[Expression]

Quay lại vấn đề, bạn đặt biến hoặc hàm trùng với tên của Range hoặc tên của hàm, theo quy tắc những gì nội tại (private) thì thủ tục giải quyết trước còn toàn cục (public) được giải quyết sau, như thế bạn định nghĩa kiểu gì trong thủ tục thì nó sẽ hiểu theo hướng mà bạn định nghĩa.

Nhưng áp dụng thực tế trên một mảng chẳng hạn, giả sử:

Dim Arr
Arr = Range("A1:B10").Value

Sẽ bằng với:
Arr = [A1:B10].Value

Điều này rất thực tế.

Và đây là trang của Microsoft chính chủ:


Đang bàn Evaluate và [] mà chuyển sang Range có vẻ lạc chủ đề.

Em đành trở lại bài này sao khi sửa PC xong sau khi hết giãn cách xã hội.
 
Upvote 0
Đang bàn Evaluate và [] mà chuyển sang Range có vẻ lạc chủ đề.

Em đành trở lại bài này sao khi sửa PC xong sau khi hết giãn cách xã hội.
Nó chính là Evaluate viết gọn lại thành [] thôi. Đề tài này mấy năm trước cũng đã thảo luận rồi thì phải nếu nhớ không lầm.
 
Upvote 0
Ta thử thí nghiệm thế này để xem nó có phải là một Evaluate không nhé.
Ta có một bảng màu vàng và ta tìm bằng hàm VLOOKUP với 5 và ra kết quả là 25 như hình ảnh (xin chú ý công thức):

1629211114001.png

Sau đó ta dùng Imediate và gõ:

Mã:
?Evaluate("=VLOOKUP(5,A1:B6,2,0)")

Enter, Kết quả ra 25

Rồi sau đó ta lại gõ:

Mã:
?[=VLOOKUP(5,A1:B6,2,0)]

Và Enter, kết quả cũng ra 25

Từ đó suy ra chúng chính là Evaluate.

1629211374822.png
 
Upvote 0
Giải thích mới là cái cốt lỗi. Cái gì cũng có phần lý thuyết rồi thực hành.
Cứ thấy đó mà biết đó không phải cách để học cho người lập trình.

Nhưng [] không phải viết tắc của Evaluate.

Evaluate là phương thức của lớp ứng dụng excel. [] là cú pháp VB. Chúng không liên quan gì nhau.
 
Upvote 0
Giải thích mới là cái cốt lỗi. Cái gì cũng có phần lý thuyết rồi thực hành.
Cứ thấy đó mà biết đó không phải cách để học cho người lập trình.

Nhưng [] không phải viết tắc của Evaluate.

Evaluate là phương thức của lớp ứng dụng excel. [] là cú pháp VB. Chúng không liên quan gì nhau.
Nói chung mình học VBA cũng chẳng chuyên nghiệp gì mà toàn tự học và mò mẫm từ GPE, Mr.Excel và một số trang khác, cho nên mình không thể lý giải bằng lý thuyết mà chủ yếu là thực hành và đúc kết ra từ những thực nghiệm đó. Và dù mình không tìm ra cái topic nói về Evaluate và [], nhưng cái link này cũng là bằng chứng cho thấy nó có nói về điều đó:


1629211979513.png

P/S: Vâng viết tắt SG thì nó cũng là Sài Gòn theo định nghĩa của nó chứ có khác gì đâu.
 
Upvote 0
Web KT

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

Back
Top Bottom