2015-09-07 20 views
10

Trong VBA, nó sẽ tạo ra bất kỳ sự khác biệt nào nếu tôi so sánh một chuỗi hoặc tương tự, với vbNullString thay vì đối với một chuỗi rỗng; ""? Nếu có sự khác biệt nào giữa hai người?Có sự khác biệt nào giữa vbNullString và "" không?

+0

Xem nhận xét của Rob Bovey tại địa chỉ http://dailydoseofexcel.com/archives/2008/06/26/identify-empty-cells-in-vba/ – brettdj

Trả lời

8

vbNullString"" khác nhau. Dưới đây là một trang web exerpt mô tả sự khác biệt sử dụng bộ nhớ.


"Đây là cách thông thường để xóa một biến chuỗi.

Text$ = "" 

Thật là một sự lãng phí! Trước hết, chuỗi "" mất 6 byte RAM mỗi khi bạn sử dụng nó. Hãy xem xét thay thế:?.

Text$ = vbNullString 

Vì vậy, những gì là thế này vbNullString là một hằng số VB đặc biệt mà biểu thị một chuỗi null "" đen là một st trống nhẫn. Có một sự khác biệt quan trọng. Một chuỗi rỗng là một chuỗi thực. Một chuỗi rỗng không phải là. Nó chỉ là một số không. Nếu bạn biết ngôn ngữ C, vbNullString là tương đương với NULL.

Đối với hầu hết các mục đích, vbNullString tương đương với "" trong VB. Sự khác biệt thực tế duy nhất là vbNullString nhanh hơn để gán và xử lý và mất ít bộ nhớ hơn.

Nếu bạn gọi một số API hoặc thành phần không phải VB, hãy kiểm tra các cuộc gọi với vbNullString trước khi phân phối ứng dụng của bạn. Hàm bạn đang gọi có thể không kiểm tra chuỗi NULL, trong trường hợp này nó có thể bị lỗi. Các hàm không phải VB nên kiểm tra NULL trước khi xử lý một tham số chuỗi. Với may mắn, chức năng cụ thể mà bạn đang gọi không làm điều đó. Trong trường hợp này, hãy sử dụng "". Thường API làm hỗ trợ vbNullString và họ thậm chí có thể thực hiện tốt hơn với nó "


Phần còn lại của bài báo có thêm thông tin về chuỗi tối ưu hóa có thể được sâu sắc cũng

Full trang web:!. http://www.aivosto.com/vbtips/stringopt.html

3

This comparison nói rằng chỉ định "" cho biến sử dụng 6 byte bộ nhớ trong khi sử dụng vbNullString sẽ không sử dụng bất kỳ bộ nhớ nào.

Cá nhân tôi thích đánh giá độ dài của chuỗi. Nếu độ dài bằng 0, thì chúng tôi cũng đi đến kết luận rằng chuỗi là vbNullString hoặc "". Phương pháp này được chấp nhận là phương pháp kiểm tra nhanh nhất đối với một số vbNullString.

If Len(string) = 0 Then 

Bạn có thể đọc một Len vs vbNullString vs "" so here.

+0

Có vẻ tốt, trừ khi có ai đó khác có nhiều thông tin hơn, tôi sẽ đánh dấu Tuy nhiên, bài viết cuối cùng bạn liên kết chỉ ra có sự khác biệt, mặc dù tác giả không biết nó là gì.Nó có thể tất nhiên là một cái gì đó đơn giản như bộ nhớ nó chiếm khi gán cho một biến, như bạn chỉ ra trước đó trong câu trả lời của bạn. – eirikdaude

+1

Có một sự khác biệt, '" "' là một chuỗi có độ dài bằng không, 'vbNullString' là một con trỏ rỗng của kiểu' Chuỗi' (không trỏ đến một chuỗi). Với mục đích so sánh VB [ẩn sự khác biệt] (http://stackoverflow.com/questions/37035754/what-does-vb6-initialize-a-static-integer-to/37035879#comment61678413_37035879), nhưng đôi khi bạn muốn [bỏ ẩn nó] (http://stackoverflow.com/a/20909528/11683). – GSerg

Các vấn đề liên quan