• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Không viết hoa kí tự đầu tiên trong mỗi từ được.

Nơi trao đổi về VBA (Visual Basic for Application), lập trình cho ứng dụng Microsoft Office, AutoCAD...

Điều hành viên: tungblt

lanhodiep
Bài viết: 3
Ngày tham gia: T.Sáu 06/12/2013 11:09 pm
Has thanked: 2 time

Không viết hoa kí tự đầu tiên trong mỗi từ được.

Gửi bàigửi bởi lanhodiep » T.Bảy 07/12/2013 10:07 am

Xin cảm ơn A truongphu rất nhiều vì đã trả lời câu hỏi giúp e. Từ Code của A truongphu e đã biết đổi về chữ thường( Lcase). Những để viết hoa kí tự đầu tiên trong mỗi từ, vào Format,Changecase, Title case thì có một số từ không viết hoa được, Ví dụ: Bức nh Này Treo Trên Tường. E cũng có viết Code nhưng chạy rất lâu. A truongphu và mọi người có thể xem qua giúp e được không? Xin Cảm Ơn.

Mã: Chọn hết

 Sub macro3()

 'viet hoa chu cai sau khoang trang, sau dau tab, sau dau enter, sau dinh dang buletandnumbering, sau dau shift+enter
    mang2 = Array(" ", "^t", "^p", "^11")
    mang1 = Array(7843, 7841, 7855, 7857, 7859, 7861, 7863, 7845, 7847, 7849, 7851, 7853, 7867, 7869, 7865, 7871, 7873, 7875, 7877, 7879, 7881, 7883, 7887, 7885, 7889, 7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 7911, 7909, 7913, 7915, 7917, 7919, 7921, 7923, 7927, 7929, 7925)
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    For I = 0 To 44
    For j = 0 To 3
    With Selection.Find
   .Text = mang2(j) & ChrW(mang1(I))
        Selection.Find.Replacement.Text = mang2(j) & ChrW(mang1(I) - 1)
        Selection.Find.Forward = True
        Selection.Find.Wrap = wdFindStop
        End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Next j
    Next I



Hình đại diện của người dùng
xuanquy_th
Guru
Guru
Bài viết: 798
Ngày tham gia: T.Ba 05/08/2008 9:15 pm
Đến từ: Thanh Hoá
Has thanked: 1 time
Been thanked: 10 time
Liên hệ:

Re: Không viết hoa kí tự đầu tiên trong mỗi từ được.

Gửi bàigửi bởi xuanquy_th » T.Bảy 07/12/2013 2:44 pm

Xem code thấy có vẻ bạn đang dùng Excel
Nếu là đúng thì bạn thử dùng hàm PROPER(Text) xem sao.
Khi Chúa Trời đóng cánh cửa này lại, Ngài sẽ mở một cánh cửa khác cho ta.
Nhưng ta thường nhìn quá lâu vào cánh cửa đã đóng nên không thấy được có một cánh cửa khác đang mở ra cho ta!!!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Không viết hoa kí tự đầu tiên trong mỗi từ được.

Gửi bàigửi bởi truongphu » T.Bảy 07/12/2013 7:38 pm

lanhodiep đã viết:Bức ảnh Này Treo ở Trên Tường


Đúng là 'cô' Lan Hồ Điệp "chơi" tôi mà...
làm tôi hí hoáy cả tiếng, không hiểu sao dùng UCase lại không linh?

Hóa ra, 'cô' em đưa đoạn text gì đâu! Sau đây đoạn text được cho màu đỏ; và được trị bởi code bên dưới...

Bức ảnh Này Treo ở Trên Tường

Code chuyên trị:
  1. Sub truongphu()
  2.     Selection.Text = Replace(Selection.Text, Chr(160), Chr(32))
  3.     Dim PP() As String, ii%
  4.     PP = Split(Selection.Text)
  5.         For ii = 0 To UBound(PP)
  6.             PP(ii) = UCase(Left(PP(ii), 1)) & LCase(Mid(PP(ii), 2))
  7.         Next
  8.         Selection.Text = Join(PP, " ")
  9. End Sub


Hình như bữa năm trước bạn xuanha cũng gặp trường hợp nầy...

OK chứ?
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

lanhodiep
Bài viết: 3
Ngày tham gia: T.Sáu 06/12/2013 11:09 pm
Has thanked: 2 time

Re: Không viết hoa kí tự đầu tiên trong mỗi từ được.

Gửi bàigửi bởi lanhodiep » CN 08/12/2013 5:25 pm

Xin cảm ơn A truongphu và mọi người đã chỉ bảo. E đọc qua code nghĩ là A truongphu đã tách mỗi từ ra làm 2 phần rồi ucase kí tự đầu và lcase phần còn lại ( không biết đúng không). Ý tưởng đơn giản nhưng thực tế. Vậy mà em không nghĩ ra. Thôi từ đây về sau e sẽ suy nghĩ nhiều hơn trước khi hỏi, càng hỏi thấy mình càng dốt a. hi hi. E học hỏi được nhiều điều từ A truongphu.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Không viết hoa kí tự đầu tiên trong mỗi từ được.

Gửi bàigửi bởi truongphu » T.Hai 09/12/2013 2:49 pm

lanhodiep đã viết:E đọc qua code nghĩ là A truongphu đã tách mỗi từ ra làm 2 phần rồi ucase kí tự đầu và lcase phần còn lại ( không biết đúng không)


Đúng rồi, nhưng bài tôi viết có 2 vấn đề; bạn đang nói vấn đề sau.

Còn vấn đề đầu làm tôi loay hoay là space của bạn trước đó không phải có ASC = 32 mà là 160
do đó chúng gây lỗi, bởi thế nên code có dòng: Replace(Selection.Text, Chr(160), Chr(32))

Code tách ra tôi viết trên là code cũ, chép tặng bạn cho nhanh, hoặc động tốt trên các đoạn văn ngắn. Nếu bài văn vài MB trở lên, ta cần dùng cách khác, đó là wildcards

Khai báo: wildcards = true
Find = " ?"
Replace = ucase(find.text)


Nội dung code trên:
1- dùng wildcard là dùng ký tự đại biểu chứ không dùng text xác định. Với Find = " ?" nghĩa là tìm 2 ký tự liền nhau, mà ký tự đầu là space kèm theo ký tự sau bất kỳ.
(Đương nhiên code nầy bỏ sót các ký tự đầu dòng, nhưng hy vọng đầu dòng mọi người đều viết Hoa)
2- Replace = ucase(find.text) là viết hoa cả 2 ký tự tìm được; mà space viết hoa cũng là space
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “Visual Basic for Application (VBA)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách