Vbcrlf là gì

Vbcrlf là gì


MsgBox (Message Box) là một hộp thoại hiển thị thông báo trên Excel. Hộp thoại này giúp cho người tạo chương trình thông báo đến người dùng những thông báo cần thiết. Hộp thoại này có thể trả về hoặc không trả về kết quả khi người dùng tương tác vào các nút lệnh trên hộp thông báo.


    • Cú pháp: MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )


Vbcrlf là gì


Đây là chuỗi nội dung cần hiển thị trên hộp thông báo. Độ dài cho phép tối đa là 1024 ký tự. Trong chuỗi hiển thị thông báo này các bạn có thể kết hợp với các ký tự đặt biệt để  ngắt dòng, chèn tab, về đầu dòng, ... 


Các ký tự đặc biệt trong VBA:

    • vbCrLf = chr(13) + chr(10) : xuống dòng và về đầu dòng
    • vbCr = chr(13) : xuống dòng
    • vbLf = chr(10) : về đầu dòng
    • vbNewLine = chr(13) + chr(10) : Ký tự dòng mới
    • vbTab = chr(9) : ký tự Tab
    • vbBack = chr(8) : ký tự BackSpace


Là các nút nhấn và biểu tượng hiển thị trên hộp thông báo. Đây là thuộc tính không bắt buộc, được biểu thị bằng tổng các giá trị chỉ định số lượng và loại nút hiển thị, loại biểu tượng sử dụng, tên nút và loại hộp thông báo. Nếu thuộc tính này được bỏ qua, thì giá trị mặc định cho các nút là 0.


Bảng giá trị buttons: (nguồn từ Microsoft).


Constant Value Description
vbOKOnly 0 Display OK button only.
vbOKCancel 1 Display OK and Cancel buttons.
vbAbortRetryIgnore 2 Display AbortRetry, and Ignore buttons.
vbYesNoCancel 3 Display YesNo, and Cancel buttons.
vbYesNo 4 Display Yes and No buttons.
vbRetryCancel 5 Display Retry and Cancel buttons.
vbCritical 16 Display Critical Message icon.
vbQuestion 32 Display Warning Query icon.
vbExclamation 48 Display Warning Message icon.
vbInformation 64 Display Information Message icon.
vbDefaultButton1 0 First button is default.
vbDefaultButton2 256 Second button is default.
vbDefaultButton3 512 Third button is default.
vbDefaultButton4 768 Fourth button is default.
vbApplicationModal 0 Application modal; the user must respond to the message box before continuing work in the current application.
vbSystemModal 4096 System modal; all applications are suspended until the user responds to the message box.
vbMsgBoxHelpButton 16384 Adds Help button to the message box.
VbMsgBoxSetForeground 65536 Specifies the message box window as the foreground window.
vbMsgBoxRight 524288 Text is right aligned.
vbMsgBoxRtlReading 1048576 Specifies text should appear as right-to-left reading on Hebrew and Arabic systems.

Lưu ý:

  • Nhóm đầu từ 0 đến 5 mô tả số lượng và loại nút trong hộp thoại.
  • Nhóm thứ hai (16, 32, 48, 64) mô tả kiểu biểu tượng.
  • Nhóm thứ ba (0, 256, 512) xác định nút nào là mặc định.
  • Nhóm thứ tư (0, 4096) xác định phương thức của hộp tin nhắn.


Thuộc tính này không bắt buộc. Đây là chuỗi được hiển thị trên thanh tiêu đề của hộp thông báo. Nếu thuộc tính này được bỏ qua, thì thanh tiêu đề sẽ hiển thị mặc định là Microsoft Excel.


Vbcrlf là gì


Thuộc tính này không bắt buộc, không thường được sử dụng, tôi xin được bỏ qua.


Các giá trị trả về khi nhấn các nút lệnh trên MsgBox:


Mình sẽ có nhiều ví dụ có sử dụng MsgBox, khi đó các bạn sẽ hiểu rõ hơn về MsgBox.


Các bạn mở trình soạn thảo code, và tạo một đoạn chương trình như sau:

Private Sub CommandButton1_Click()
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = "Xin chao moi nguoi," & _
    " toi la Kungfu Excel" & Chr(10) & _
     "Chuc moi nguoi mot ngay vui ve!"
     Style = vbYesNo + vbCritical + vbDefaultButton2

    Title = "Welcome Message"


    Res = MsgBox(Msg, Style, Title, Help, Ctxt)
    If Res = vbYes Then
    MsgBox "Ban moi nhan nut Yes"Else

    MsgBox "Ban moi nhan nut No"


    End If
    End Sub

Tạo một nút lệnh trên worksheet, và gán đoạn chương trình mới tạo ở trên vào. Nhấp vào nút lệnh, hộp thông báo xuất hiện. Trong ví dụ trên, chúng ta đã sử dụng biến Msg để nhận giá trị trả về. Dựa vào bảng các giá trị trả về, nếu giá trị trả về là hằng số vbYes, thì sẽ xuất ra thông báo "Ban moi nhan nut Yes", nếu giá trị trả về là hằng số vnNo thì sẽ xuất ra thông báo "Ban moi nhan nut No".

Nếu có bất cứ thắc mắc gì xin hãy comment bên dưới. Tôi sẽ trả lời thời gian sớm nhất. Good luck!

Ba hằng số có chức năng tương tự ngày nay, nhưng nguồn gốc lịch sử khác nhau, và đôi khi bạn có thể được yêu cầu sử dụng cái này hoặc cái kia.

Bạn cần nghĩ lại thời của những máy đánh chữ thủ công cũ để có được nguồn gốc của việc này. Có hai hành động riêng biệt cần thiết để bắt đầu một dòng văn bản mới:

  1. di chuyển đầu gõ trở lại bên trái. Trong thực tế trong một máy đánh chữ, điều này được thực hiện bằng cách di chuyển cuộn mang giấy ("cỗ xe") về phía bên phải - đầu gõ được cố định. Đây là một trở về vận chuyển.
  2. di chuyển giấy lên theo chiều rộng của một dòng. Đây là một nguồn cấp dữ liệ.

Trong máy tính, hai hành động này được thể hiện bằng hai ký tự khác nhau - trả về vận chuyển là CR, ASCII ký tự 13, vbCr; nguồn cấp dữ liệu là LF, ASCII ký tự 10, vbLf. Vào thời xưa của máy in teletype và máy in dòng, máy in cần phải được gửi hai ký tự này - theo truyền thống trong chuỗi CRLF - để bắt đầu một dòng mới, và do đó, kết hợp CRLF - vbCrLf - trở thành một chuỗi kết thúc dòng truyền thống , trong một số môi trường điện toán.

Tất nhiên, vấn đề là nó chỉ có ý nghĩa khi chỉ sử dụng một ký tự để đánh dấu kết thúc dòng và thiết bị đầu cuối hoặc máy in thực hiện cả hai hành động trả lại dòng và vận chuyển dòng tự động. Và vì vậy trước khi bạn biết điều đó, chúng tôi đã có 3 kết thúc dòng hợp lệ khác nhau: LF (được sử dụng trong Unix và Macintosh), một mình CR (được sử dụng trong các hệ điều hành Mac cũ hơn) và kết hợp CRLF (được sử dụng trong DOS và do đó trong Windows). Chính điều này đã dẫn đến sự phức tạp của các chương trình DOS/Windows có tùy chọn mở tệp trong text mode, trong đó bất kỳ cặp CRLF nào được đọc từ tệp đều được chuyển đổi thành một CR (và ngược lại khi viết).

Vì vậy - để cắt ngắn một câu chuyện dài (quá nhiều) - có những lý do lịch sử cho sự tồn tại của ba dấu tách dòng riêng biệt, hiện không liên quan: và có lẽ cách hành động tốt nhất trong .NET là sử dụng Environment.NewLine có nghĩa là người khác đã quyết định cho bạn nên sử dụng và các vấn đề về tính di động trong tương lai sẽ được giảm bớt.

Hi các bác , em đã phải xử lý vấn đề này ạ e có 1 file nhiều cell mỗi cell chứa 1 chuỗi kí tự như thế này FF FF FF FF FF FF 02 00 00 31 1A 1E 08 00 45 00 01 48 00 24 00 00 80 11 39 82 00 00 00 00 FF FF FF FF 00 44 00 43 01 34 4C B0 01 01 06 00 59 6A 88 DA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 31 1A 1E 00 00 00 00 00 00 00 00 00 Các số cách nhau bằng khoảng trắng em muốn chia chuỗi này thành nhiều dòng bằng cách chèn chuỗi kí tự xuống dòng tại vị trí xác định (Chẳng hạn cứ 16 khoảng trắng chèn 1 dấu xuống dòng) Kiểu thế này ạ FF FF FF FF FF FF 02 00 00 31 1A 1E 08 00 45 00 01 48 00 24 00 00 80 11 39 82 00 00 00 00 FF FF FF FF 00 44 00 43 01 ....

Các bác có cách nào ko ạ

Lần chỉnh sửa cuối: 31/1/13

Vbcrlf là gì

Hi các bác , em đã phải xử lý vấn đề này ạ e có 1 file nhiều cell mỗi cell chứa 1 chuỗi kí tự như thế này FF FF FF FF FF FF 02 00 00 31 1A 1E 08 00 45 00 01 48 00 24 00 00 80 11 39 82 00 00 00 00 FF FF FF FF 00 44 00 43 01 34 4C B0 01 01 06 00 59 6A 88 DA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 31 1A 1E 00 00 00 00 00 00 00 00 00 Các số cách nhau bằng khoảng trắng em chi chuỗi này thành nhiều dòng bằng cách chèn chuỗi kí tự xuống dòng tại vị trí xác định (Chẳng hạn cứ 16 khoảng trắng chèn 1 dấu xuống dòng) Kiểu thế này ạ FF FF FF FF FF FF 02 00 00 31 1A 1E 08 00 45 00 01 48 00 24 00 00 80 11 39 82 00 00 00 00 FF FF FF FF 00 44 00 43 01 ....

Các bác có cách nào ko ạ

Chào bạn!

Không hiểu ý bạn lắm. Tốt nhất bạn gửi file lên và ghi kết quả bạn muốn vào đấy mọi người sẽ giúp bạn nhanh hơn.

Vbcrlf là gì

Với bài này mình thử code như sau:

Function TachDong(S As String, Length As Long) As String Dim i As Long For i = 1 To Len(S) \ (Length * 3) + 1 TachDong = TachDong & vbCr & Trim(Mid(S, (i - 1) * 3 * Length + 1, Length * 3)) Next End Function

Khi chạy thử sub Test:

Sub Test() MsgBox TachDong(Sheet1.[A1], 13) End Sub

thì được kết quả như hộp thoại, có vẻ giống ý tác giả, mặc dù dư 1 dấu xuống dòng ở đầu, nhưng cái này dễ khắc phục. Còn khi gõ trực tiếp công thức trên sheet thì chuỗi thu được là một dây thiệt dài, chẳng thấy xuống hàng đâu cả. (xin xem hình)

Vbcrlf là gì

Vậy, xin hỏi mọi người: Nguyên nhân là gì và cách khắc phục như thế nào để có thể sử dụng hàm TachDong trực tiếp trên sheet?

Vbcrlf là gì

Với bài này mình thử code như sau:

Function TachDong(S As String, Length As Long) As String Dim i As Long For i = 1 To Len(S) \ (Length * 3) + 1 TachDong = TachDong & vbCr & Trim(Mid(S, (i - 1) * 3 * Length + 1, Length * 3)) Next End Function

Khi chạy thử sub Test:

Sub Test() MsgBox TachDong(Sheet1.[A1], 13) End Sub

thì được kết quả như hộp thoại, có vẻ giống ý tác giả, mặc dù dư 1 dấu xuống dòng ở đầu, nhưng cái này dễ khắc phục. Còn khi gõ trực tiếp công thức trên sheet thì chuỗi thu được là một dây thiệt dài, chẳng thấy xuống hàng đâu cả. (xin xem hình)

Vậy, xin hỏi mọi người: Nguyên nhân là gì và cách khắc phục như thế nào để có thể sử dụng hàm TachDong trực tiếp trên sheet?

Nhìn sơ cũng biết là nó chẳng thể xuống dòng được rồi.
vbCr = Chr(13) trong khi ký tự xuống dòng trên bảng tính là Chr(10), tức vbLf ---> Cũng chính là tổ hợp phím Alt + Enter ---> Khác xa 1 trời 1 vực rồi

Vbcrlf là gì

Nhìn sơ cũng biết là nó chẳng thể xuống dòng được rồi.
vbCr = Chr(13) trong khi ký tự xuống dòng trên bảng tính là Chr(10), tức vbLf ---> Cũng chính là tổ hợp phím Alt + Enter ---> Khác xa 1 trời 1 vực rồi

như vậy chỉ cần thay vbcr = vbcrlf là ok

vbcrlf = chr(13) +chr(10)

Lần chỉnh sửa cuối: 31/1/13

Vbcrlf là gì

như vậy chỉ cần thay vbcr = vbcrlf là ok vbcrlf = chr(13) +chr(10)

Được nhưng mà.. thừa (thừa thằng em chr(13)...)

Ký tự vbCrLf thường dùng với các text nằm trong file txt. Ký tự ngắt dòng của của nó khi ấy sẽ là vbCrLf
Bài này chỉ cần vbLf hoặc Chr(10) là đủ

Vbcrlf là gì

Nhìn sơ cũng biết là nó chẳng thể xuống dòng được rồi.
vbCr = Chr(13) trong khi ký tự xuống dòng trên bảng tính là Chr(10), tức vbLf ---> Cũng chính là tổ hợp phím Alt + Enter ---> Khác xa 1 trời 1 vực rồi

Thực ra thì lúc viết code, em đã thử Chr(10) đầu tiên rồi, nhưng mà không được nên mới dùng đến vbCr (hổng biết có cái anh chàng vbLf này).

Và cho đến bây giờ, em đã thử đủ kiểu: vbCr, vbLf, vbCrLf, Chr(10), Chr(13), và tất cả đều có cùng 1 kết quả như nhau (ít ra thì nhìn bằng mắt thường nó như vậy), đó là: Trên hộp thoại Msgbox thì nó hiển thị đúng như yêu cầu (hết 13 cặp ký tự thì xuống dòng), còn trên sheet thì nó vẫn là một chuỗi liên tục mà không hề có ký tự xuống dòng.

Rất mong được các anh chị và các bạn hướng dẫn thêm.

Xin cảm ơn mọi người.

Và cho đến bây giờ, em đã thử đủ kiểu: vbCr, vbLf, vbCrLf, Chr(10), Chr(13), và tất cả đều có cùng 1 kết quả như nhau (ít ra thì nhìn bằng mắt thường nó như vậy), đó là: Trên hộp thoại Msgbox thì nó hiển thị đúng như yêu cầu (hết 13 cặp ký tự thì xuống dòng), còn trên sheet thì nó vẫn là một chuỗi liên tục mà không hề có ký tự xuống dòng. Rất mong được các anh chị và các bạn hướng dẫn thêm.

Xin cảm ơn mọi người.

Anh chỉ cần dùng vbLf và định dạng ô kết quả là Wrap text là OK ngay
Bình thường trên Sheet anh dùng công thức ="A"&char(10)&"B" nó cũng chỉ hiển thị AB nếu chưa định dang Wrap text mà!

Vbcrlf là gì

Anh chỉ cần dùng vbLf và định dạng ô kết quả là Wrap text là OK ngay
Bình thường trên Sheet anh dùng công thức ="A"&char(10)&"B" nó cũng chỉ hiển thị AB nếu chưa định dang Wrap text mà!

Mình cũng đã thử Wrap text, nhưng vấn đề là nó xuống dòng không như ý. Ví dụ: Gõ vào ô công thức ="ABC" &CHAR(10)&"DEF" và định dạng Wrap text thì cho dù ô rộng hơn chiều dài "ABCDEF" thì 3 chữ "DEF" cũng tự động xuống dòng, còn với bài toán này thì lại không như vậy, cách hiển thị dữ liệu trong ô hoàn toàn giống với việc định dạng khi trong chuỗi không có các ký tự vbLf. Bạn thử nghiệm xem.

Mình cũng đã thử Wrap text, nhưng vấn đề là nó xuống dòng không như ý. Ví dụ: Gõ vào ô công thức ="ABC" &CHAR(10)&"DEF" và định dạng Wrap text thì cho dù ô rộng hơn chiều dài "ABCDEF" thì 3 chữ "DEF" cũng tự động xuống dòng, còn với bài toán này thì lại không như vậy, cách hiển thị dữ liệu trong ô hoàn toàn giống với việc định dạng khi trong chuỗi không có các ký tự vbLf. Bạn thử nghiệm xem.

Em thử nghiệm theo file đính kèm, và mở trên máy em thì vẫn ổn

Vbcrlf là gì

Em thử nghiệm theo file đính kèm, và mở trên máy em thì vẫn ổn

Hic, chẳng biết nó là thế nào nữa. Từ hôm qua đến giờ, mình thử đủ kiểu mà vẫn không được. Bây giờ thử lại thì lại OK... Sau khi xóa dấu ngắt dòng thừa ở đầu thì nó thế này: [GPECODE=vb]Function TachDong(S As String, Length As Long) As String Dim i As Long For i = 1 To Len(S) \ (Length * 3) + 1 TachDong = TachDong & vbLf & Trim(Mid(S, (i - 1) * 3 * Length + 1, Length * 3)) Next TachDong = Right(TachDong, Len(TachDong) - 1) End Function[/GPECODE]

Cảm ơn bạn đã chỉ dẫn!

Vbcrlf là gì

Baì này dùng RegExp cũng rất hay

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){" & Length & "}" For Each Match In .Execute(S) tach = tach & Trim(Match) & ChrW(10) Next End With End Function

Vbcrlf là gì

Baì này dùng RegExp cũng rất hay

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){" & Length & "}" For Each Match In .Execute(S) tach = tach & Trim(Match) & ChrW(10) Next End With End Function

Kết quả bị mất đâu mất một số ký tự phía sau (mất 7 cặp số 00 ở cuối trong dữ liệu mẫu). Phải sửa lại code như thế nào vậy dhn46? (cái món RegExp này thì mình mù tịt)

Vbcrlf là gì

Kết quả bị mất đâu mất một số ký tự phía sau (mất 7 cặp số 00 ở cuối trong dữ liệu mẫu). Phải sửa lại code như thế nào vậy dhn46? (cái món RegExp này thì mình mù tịt)

Cái này sửa 1 chút như thế này anh ah

Function tach1(S As String, Length As Long) As String Dim i As Integer With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){" & Length & "}" For Each Match In .Execute(S) tach1 = tach1 & Match & ChrW(10) i = i + Len(Match) 'lay so ky tu chrw(10) Next End With tach1 = tach1 & Trim(Mid(S, i, Len(S) - i)) End Function

-Em không chú ý tới trường hợ chuỗi cuối cùng có độ dài lớn hơn Length. RegExp quan trọng nhất là Pattern

-Với .Pattern = "(\w+\s){" & Length & "}" => có thể hiểu là: đánh dấu toàn bộ 1 chuỗi mà chúng bắt đàu bời 1 ký tự khác dấu cách sau đo tới 1 dấu cách nữa (\w+\s) ví dụ như (FF ). Length để trong dấu {} là ý chuỗi đầu lặp lại đúng length lần


=> Ta sẽ có các đoạn match dạng (FF ) lặp lại Length lần
-Dùng vòng lặp để duyệt qua các đoạn Match và thêm dấu xuống dòng sẽ cho kết quả

Lần chỉnh sửa cuối: 1/2/13

Vbcrlf là gì

Mày mò với RegExp Dhn46 thấy, chỉ cần dùng RegExp không cần Right hay Mid cũng có thể đáp ứng được yêu cầu

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){0," & Length & "}" For Each Match In .Execute(S) tach = tach & Trim(Match) & ChrW(10) Next End With End Function

Mày mò với RegExp Dhn46 thấy, chỉ cần dùng RegExp không cần Right hay Mid cũng có thể đáp ứng được yêu cầu

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){0," & Length & "}" For Each Match In .Execute(S) tach = tach & Trim(Match) & ChrW(10) Next End With End Function

Chú ý là nếu ta có dạng pattern là "((\w+\s){" & Length & "})" Thì nếu tôi không lầm thì $1 = "((\w+\s){" & Length & "})" <--- cả dòng tìm thấy, và $2 = (\w+\s) với (\w+\s) cho cụm cuối, tức với dòng đầu tiên là FF FF FF FF FF FF 02 00 00 31 1A 1E 08 thì $2 = "08 ". Các dòng tiếp theo tương tự ------------- Mọi người thử code sau xem sao:

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "((\w+\s){" & Length & "})" tach = .Replace(S, Trim("$1") & Chr(10)) End With End Function

Lần chỉnh sửa cuối: 1/2/13

Vbcrlf là gì

Chú ý là nếu ta có dạng pattern là ((\w+\s){0," & Length & "}) Thì nếu tôi không lầm thì $1 = ((\w+\s){0," & Length & "}) <--- cả dòng tìm thấy, và $2 = (\w+\s) với (\w+\s) cho cụm cuối, tức với dòng đầu tiên là FF FF FF FF FF FF 02 00 00 31 1A 1E 08 thì $2 = "08 ". Các dòng tiếp theo tương tự ------------- Mọi người thử code sau xem sao:

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "((\w+\s){0," & Length & "})" tach = .Replace(S, Trim("$1") & Chr(10)) End With End Function

Dạ chuẩn quá rồi, nhờ sự giải thích của bác SiwTom dhn46 lại thấy 1 vấn đề là: có thể đơn giản Pattern 1 chút nữa giống bài #13 và vận dụng .Repalce. Cảm ơn bác Siwtom mong bác chỉ giáo nhiều nhiều nữa!

Dạ chuẩn quá rồi, nhờ sự giải thích của bác SiwTom dhn46 lại thấy 1 vấn đề là: có thể đơn giản Pattern 1 chút nữa giống bài #13 và vận dụng .Repalce. Cảm ơn bác Siwtom mong bác chỉ giáo nhiều nhiều nữa!

Mà pattern của bạn sai rồi. Bị mất "00" ở cuối Trước đó tôi tin tưởng pattern của bạn nhưng thử nhìn kỹ thì thấy sai. Bởi nếu dòng cuối ngắn, vd "ab fa cd ef" thì theo pattern nó chỉ tìm thấy "ab fa cd " - do phải kết thúc bằng " " nên bạn bị mất "ef"

Hoặc bạn có thể thêm " " vào cuối S trước khi xử lý

Lần chỉnh sửa cuối: 1/2/13

Vbcrlf là gì

Mày mò với RegExp Dhn46 thấy, chỉ cần dùng RegExp không cần Right hay Mid cũng có thể đáp ứng được yêu cầu

Function tach(S As String, Length As Long) As String With CreateObject("vbscript.regexp") .Global = True .Pattern = "(\w+\s){0," & Length & "}" For Each Match In .Execute(S) tach = tach & Trim(Match) & ChrW(10) Next End With End Function

Nếu như không cần đến vòng lập thì dùng RegExp mới đáng đồng tiền, bằng ngược lại thì... bạn nghĩ xem: Chỉ mỗi chuyện cỏn con mà lại mượn nguyên thư viện của người ta Nếu là tôi thì tôi làm vầy:

Function BreakLines(ByVal Text As String, BlankPos As Long) As String Dim sTmp As String, n As Long, Arr() On Error Resume Next sTmp = Text Do n = n + 1 ReDim Preserve Arr(1 To n) Arr(n) = Trim(Mid(sTmp, (n - 1) * BlankPos * 3 + 1, BlankPos * 3)) Loop Until n * BlankPos * 3 >= Len(sTmp) BreakLines = Join(Arr, vbLf) End Function

Bảo đảm vòng lập tối ưu, cắt 10 dòng thì vòng lập cũng duyệt đúng 10 lần (chứ không duyệt theo Len của chuổi)


Page 2

Nếu như không cần đến vòng lập thì dùng RegExp mới đáng đồng tiền, bằng ngược lại thì... bạn nghĩ xem: Chỉ mỗi chuyện cỏn con mà lại mượn nguyên thư viện của người ta Nếu là tôi thì tôi làm vầy:

Function BreakLines(ByVal Text As String, BlankPos As Long) As String Dim sTmp As String, n As Long, Arr() On Error Resume Next sTmp = Text Do n = n + 1 ReDim Preserve Arr(1 To n) Arr(n) = Trim(Mid(sTmp, (n - 1) * BlankPos * 3 + 1, BlankPos * 3)) Loop Until n * BlankPos * 3 >= Len(sTmp) BreakLines = Join(Arr, vbLf) End Function

Bảo đảm vòng lập tối ưu, cắt 10 dòng thì vòng lập cũng duyệt đúng 10 lần (chứ không duyệt theo Len của chuổi)


Thực ra tôi vẫn nghĩ không phải bao giờ cũng nên giết gà bằng dao mổ trâu. Ngoài ra trong nhiều th dùng RegExp lại lâu hơn.

Vbcrlf là gì

Thực ra tôi vẫn nghĩ không phải bao giờ cũng nên giết gà bằng dao mổ trâu. Ngoài ra trong nhiều th dùng RegExp lại lâu hơn.

Ah không! Riêng code ở bài 17 của anh hoàn toàn không dùng vòng lập thì em đồng ý. Ít ra nó cũng phải có gì đó khác biệt so với cách thông thường dùng vòng lập (nếu không thì dùng làm quái gì.. Ẹc... Ẹc...)

Chậm hay nhanh em chưa bàn tới, ít ra là học được giải thuật hay (dùng cho những trường hợp khác)