2014-12-27 16 views
6

Tôi đang cố gắng viết hoa chuỗi chữ cái đầu tiên sent trong mảng arr. Một phần của mã không hoạt động là chức năng Right, làm cho mã trả về lỗi. Điều gì có thể là sửa chữa?Viết hoa chữ cái đầu tiên của chuỗi

For Each sent In arr 
    sent = UCase(Left(sent, 1)) & Right(sent, Len(sent) - 1) 
    arr(i) = sent 
    i = i + 1 
Next 

Trả lời

8

Sẽ dễ dàng hơn khi sử dụng hàm Mid để xây dựng mọi thứ sau viết hoa chữ cái. Chức năng này không yêu cầu bạn xác định độ dài đầy đủ:

For i = LBound(arr) To UBound(arr) 
    sent = arr(i) 
    ' Capitalize the first letter, then append everything else. 
    sent = UCase(Left(sent, 1)) & Mid(sent, 2) 
    arr(i) = sent 
Next 

Ngoài ra, bạn có thể chỉ cần lặp arr sử dụng i như điều tra viên của bạn. Trộn và kết hợp các cập nhật chỉ mục bằng cách sử dụng một điều tra viên riêng có thể dẫn đến rắc rối.

13

Bạn chỉ có thể sử dụng chức năng StrConv() cho việc này. ví dụ. :

For i = LBound(arr) To UBound(arr) 
    sent = arr(i) 
    arr(i) = StrConv(sent, vbProperCase) 
Next 

hoặc không có một vòng lặp:

arr = Split(StrConv(Join$(arr, " "), vbProperCase), " ") 
4

Sự khác biệt giữa việc sử dụng strConv với vbPropercase và giải pháp với UCase(left(xx,1)) & mid(xx,2)vbPropercase thay đổi tất cả các ký tự đầu tiên thủ đô và tất cả những người khác thành chữ thường. Điều đó không phải lúc nào cũng là điều bạn muốn, đôi khi bạn chỉ muốn chữ hoa đầu tiên là chữ hoa và phần còn lại làm chữ thường.

Sau đó bạn có thể sử dụng một giải pháp nhẹ cải tiến:

UCase(Left(<string>,1)) & LCase(Mid(<string>,2)) 
-1

Hãy thử như sau:

NewArr As List<string> NewArr = new List<string>() 

For Each sent As String In arr  
    NewArr.Add(Application.WorksheetFunction.Proper(sent)) 

Next sent 

arr = NewArr.ToArray() 
+3

Vui lòng thêm hơn mã để câu trả lời của bạn giải thích những gì mã của bạn không và tại sao nó sẽ khắc phục vấn đề OP đang có. Nó cũng sẽ giúp người đọc trong tương lai hiểu được. Vui lòng xem [answer] để biết thêm hướng dẫn. – Bugs

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