Xin được giúp về chữ chạy trên label

Liên hệ QC

hoanganhdl

Thành viên hoạt động
Tham gia
10/2/09
Bài viết
135
Được thích
74
Nghề nghiệp
Kế toán viên
Xin thầy và các bạn xem giúp file đính kèm, vì chiều dài label ngắn mà dòng chữ dài nên khi hiện lên chữ sẽ bị mất nên mình nghĩ nên cắt bớt bằng hàm left nhưng khi thêm hàm left thì thấy dòng chữ ko chạy nữa +-+-+-+
 
Bạn thử chuyển FindWindow vào Activate xem sao. Nhưng sẽ có trở ngại đấy. Cứ tự tìm trước, không được thì tôi sẽ "mách nước" cho

Em dùng một biến Boolean, khi form được install nó mang giá trị false, khi dùng nút lệnh nó mang giá trị true, tương tự với form kia, thế nhưng sự kiện Activate cũng chẳng làm cho form chạy caption, ngược lại còn bị treo Excel!

Thầy kiểm tra lại cho em sai ở chỗ nào?

[GPECODE=vb]Private Sub UserForm_Activate()
If isHide Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
fCaption = Sheet1.Range("D11").Value
StartTimer
End If
End Sub

Private Sub UserForm_Deactivate()
StopTimer
End Sub

Private Sub UserForm_Initialize()
isHide = False
hWnd = FindWindow("ThunderDFrame", Me.Caption)
fCaption = Sheet1.Range("D11").Value
StartTimer
End Sub

Private Sub UserForm_Terminate()
StopTimer
Unload UserForm1
End Sub

Private Sub CommandButton1_Click()
'Unload Me
isHide = True
Me.Hide
UserForm1.Show
End Sub

[/GPECODE]
 

File đính kèm

  • MarqueeOnUF_API_4.xls
    42.5 KB · Đọc: 14
Upvote 0
Em dùng một biến Boolean, khi form được install nó mang giá trị false, khi dùng nút lệnh nó mang giá trị true, tương tự với form kia, thế nhưng sự kiện Activate cũng chẳng làm cho form chạy caption, ngược lại còn bị treo Excel!

Thầy kiểm tra lại cho em sai ở chỗ nào?

[GPECODE=vb]Private Sub UserForm_Activate()
If isHide Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
fCaption = Sheet1.Range("D11").Value
StartTimer
End If
End Sub

Private Sub UserForm_Deactivate()
StopTimer
End Sub

Private Sub UserForm_Initialize()
isHide = False
hWnd = FindWindow("ThunderDFrame", Me.Caption)
fCaption = Sheet1.Range("D11").Value
StartTimer
End Sub

Private Sub UserForm_Terminate()
StopTimer
Unload UserForm1
End Sub

Private Sub CommandButton1_Click()
'Unload Me
isHide = True
Me.Hide
UserForm1.Show
End Sub

[/GPECODE]

Thực ra có phải làm kỳ quái như thế đâu. Nhưng ta coi cái "voc" của bạn là cái cớ để tìm tòi, học hỏi thêm.

1. Tôi đã nói là thử "chuyển" FindWindow sang Activate chứ không phải là thử có ở đây và ở kia. Không có isHide gì cả.

2. Bạn nên tắt Timer trước khi Show: vd. Me.Hide --> StopTimer --> UserForm1.Show và ngược lại.
Vì DeActivate không sẩy ra nên bỏ nó đi.

3. Sau dòng FindWindow cho 1 dòng: Debug.Print hWnd thì hiểu ngay thôi.
 
Upvote 0
Thực ra có phải làm kỳ quái như thế đâu. Nhưng ta coi cái "voc" của bạn là cái cớ để tìm tòi, học hỏi thêm.

1. Tôi đã nói là thử "chuyển" FindWindow sang Activate chứ không phải là thử có ở đây và ở kia. Không có isHide gì cả.

2. Bạn nên tắt Timer trước khi Show: vd. Me.Hide --> StopTimer --> UserForm1.Show và ngược lại.
Vì DeActivate không sẩy ra nên bỏ nó đi.

3. Sau dòng FindWindow cho 1 dòng: Debug.Print hWnd thì hiểu ngay thôi.

Em đã làm rồi, nhưng lần thứ nhất hiện form1 thì chạy, bấm nút hiện form2 thì chạy, bấm nút để hiên form1 thì form2 không hide, chữ không chạy, form1 không hiện luôn!

Debug.Print có kết quả:

Form1: 394106
Form2: 328500
Form2: 0

Là như thế đó. Nhức đầu với nó thật đó Thầy ơi.
 
Upvote 0
Làm vầy thử xem:
- Chuyển hàm FindWindow sang Module (chẳng lẽ mỗi UserForm mỗi hàm) và chuyển nó sang dạng Public
PHP:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Code cho frm:
Mã:
Private Sub UserForm_Activate()
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  fCaption = Sheet1.Range("D11").Value
  StartTimer
End Sub
Mã:
Private Sub UserForm_Terminate()
  StopTimer
  Unload UserForm1
End Sub
Mã:
Private Sub CommandButton1_Click()
  StopTimer
  Unload Me
  UserForm1.Show
End Sub
- Code cho UserForm1:
Mã:
Private Sub UserForm_Activate()
  StopTimer
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  fCaption = Sheet1.Range("D12").Value
  StartTimer
End Sub
Mã:
Private Sub UserForm_Terminate()
  StopTimer
  Unload frm
End Sub
Mã:
Private Sub CommandButton1_Click()
  StopTimer
  Unload Me
  frm.Show
End Sub
Xong!
 

File đính kèm

  • MarqueeOnUF_API_4.xls
    48.5 KB · Đọc: 28
Upvote 0
Làm vầy thử xem:
- Chuyển hàm FindWindow sang Module (chẳng lẽ mỗi UserForm mỗi hàm) và chuyển nó sang dạng Public
PHP:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Code cho frm:
Mã:
Private Sub UserForm_Activate()
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  fCaption = Sheet1.Range("D11").Value
  StartTimer
End Sub
Mã:
Private Sub UserForm_Terminate()
  StopTimer
  Unload UserForm1
End Sub
Mã:
Private Sub CommandButton1_Click()
  StopTimer
  Unload Me
  UserForm1.Show
End Sub
- Code cho UserForm1:
Mã:
Private Sub UserForm_Activate()
  StopTimer
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  fCaption = Sheet1.Range("D12").Value
  StartTimer
End Sub
Mã:
Private Sub UserForm_Terminate()
  StopTimer
  Unload frm
End Sub
Mã:
Private Sub CommandButton1_Click()
  StopTimer
  Unload Me
  frm.Show
End Sub
Xong!

Cái Unload Me thì không có gì rồi. Chỉ đến khi Nghĩa muốn thay Unload Me bằng Me.Hide mới có vấn đề.
Còn nếu là Unload Me thì cũng chả phải chuyển FindWindow sang Activate mà vẫn để ở Initialize vì đã Unload thì lần sau Show thì lại có Initialize để thực hiện FindWindow.
 
Upvote 0
Em đã làm rồi, nhưng lần thứ nhất hiện form1 thì chạy, bấm nút hiện form2 thì chạy, bấm nút để hiên form1 thì form2 không hide, chữ không chạy, form1 không hiện luôn!

Debug.Print có kết quả:

Form1: 394106
Form2: 328500
Form2: 0

Là như thế đó. Nhức đầu với nó thật đó Thầy ơi.

Tôi muốn bạn "vọc" để tự hiểu thêm nhiều thứ nhưng thấy bạn có vẻ như không muốn lắm.
Vì sao? Vì không thấy bạn tò mò, không thấy bạn đặt câu hỏi. Ví dụ bạn dùng Debug.Print hWnd và thấy "in ra" giá trị 0 nhưng tôi không thấy bạn tò mò kiểu:: "Tại sao lại 0? Giá trị 0 có nghĩa là cửa sổ không được tìm thấy? Tại sao lúc đầu là FindWindow("ThunderDFrame", Me.Caption) và bây giờ cũng là FindWindow("ThunderDFrame", Me.Caption) mà lúc đầu tìm thấy còn bây giờ không tìm thấy"?.
Vậy ta chỉ cần có code để dùng thôi?
Nếu thế thì bạn thử code sau:

frm:
Mã:
Private Sub UserForm_Activate()
    hWnd = FindWindow("ThunderDFrame", vbNullString)
    fCaption = Sheet1.Range("D11").Value
    StartTimer
End Sub

Private Sub UserForm_Terminate()
    StopTimer
    Unload UserForm1
    Unload Me
End Sub

Private Sub CommandButton1_Click()
    StopTimer
    Me.Hide
    UserForm1.Show
End Sub

UserForm1:
Mã:
Private Sub UserForm_Activate()
    hWnd = FindWindow("ThunderDFrame", vbNullString)
    fCaption = Sheet1.Range("D12").Value
    StartTimer
End Sub

Private Sub UserForm_Terminate()
    StopTimer
    Unload frm
    Unload Me
End Sub

Private Sub CommandButton1_Click()
    StopTimer
    Me.Hide
    frm.Show
End Sub

Module1:
Mã:
Private Declare Function SetTimer Lib "user32" _
    (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" _
    (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function DefWindowProc Lib "user32.dll" Alias "DefWindowProcW" _
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
Public hWnd As Long, fCaption As String, id As Long

Sub Button1_Click()
    frm.Show
End Sub

Private Function TimeProc(ByVal H As Long, ByVal nMSG As Long, ByVal nID As Long, ByVal nTsys As Long)
    Dim Text As String
    On Error Resume Next
    Text = fCaption
    Text = Mid(Text, 2, Len(Text)) & Left(Text, 1)
    fCaption = Text
    DefWindowProc hWnd, 12, 0, StrPtr(Text)
End Function

Sub StartTimer()
    StopTimer
    id = SetTimer(0, 0, 50, AddressOf TimeProc)
End Sub

Sub StopTimer()
    KillTimer 0, id
End Sub
 
Upvote 0
Tôi muốn bạn "vọc" để tự hiểu thêm nhiều thứ nhưng thấy bạn có vẻ như không muốn lắm.
Vì sao? Vì không thấy bạn tò mò, không thấy bạn đặt câu hỏi. Ví dụ bạn dùng Debug.Print hWnd và thấy "in ra" giá trị 0 nhưng tôi không thấy bạn tò mò kiểu:: "Tại sao lại 0? Giá trị 0 có nghĩa là cửa sổ không được tìm thấy? Tại sao lúc đầu là FindWindow("ThunderDFrame", Me.Caption) và bây giờ cũng là FindWindow("ThunderDFrame", Me.Caption) mà lúc đầu tìm thấy còn bây giờ không tìm thấy"?.
Vậy ta chỉ cần có code để dùng thôi?
Nếu thế thì bạn thử code sau:


Không phải là em không có thắc mắc, có nhiều thứ để thắc mắc nhưng không dám hỏi (vì không biết cơ sở nào để hỏi), vã lại mỗi lần thử, mỗi lần treo Excel, cứ tắt rồi mở, mà trong đầu nghĩ mình làm hoài mà chẳng có kết quả gì cả, thử vọc kiểu "thầy bói xem voi" biết đâu, hên nó chạy tốt; vì đâu có nền tảng gì về API, những thông số, những biến hóa mà hàm API nó có em cũng mù tịt, cứ thấy người ta làm sao mình làm vậy thôi nên cứ mù mờ, ương ương là như vậy.

Cho nên em cứ làm quen với nó qua các bài của các Thầy để em biết nó vận hành như thế nào, sau này có điều kiện sẽ học thêm sách vỡ nữa.

Em cám ơn các Thầy rất nhiều.

==============================

Cho em hỏi:

Mã:
Private Sub UserForm_Terminate()     
StopTimer     
Unload UserForm1 
    [COLOR=#ff0000][B]Unload Me [/B][/COLOR]
End Sub

Đã thoát form của mình rồi (hiển nhiên phải unload me) thì mới xảy ra sự kiện Terminate, sao Thầy lại bỏ vào trong sự kiện đó? Em đã bỏ nó ra, chẳng có vấn đề gì?


Và cho em hỏi thêm, khi Debug.Pint (Debug.Print "F1: " & hWnd) thì các lần Print nó lại cho giá trị khác nhau và có chiều hướng lần sau lớn hơn lần trước là vì sao? Nó sẽ ảnh hưởng gì nếu một số vượt quá mức Long Data?

F1: 2491342
F2: 787318

F1: 852854
F2: 2884514

F1: 918390
F2: 1049352
 
Lần chỉnh sửa cuối:
Upvote 0
Không phải là em không có thắc mắc, có nhiều thứ để thắc mắc nhưng không dám hỏi (vì không biết cơ sở nào để hỏi), vã lại mỗi lần thử, mỗi lần treo Excel, cứ tắt rồi mở, mà trong đầu nghĩ mình làm hoài mà chẳng có kết quả gì cả, thử vọc kiểu "thầy bói xem voi" biết đâu, hên nó chạy tốt; vì đâu có nền tảng gì về API, những thông số, những biến hóa mà hàm API nó có em cũng mù tịt, cứ thấy người ta làm sao mình làm vậy thôi nên cứ mù mờ, ương ương là như vậy.

Cho nên em cứ làm quen với nó qua các bài của các Thầy để em biết nó vận hành như thế nào, sau này có điều kiện sẽ học thêm sách vỡ nữa.

Em cám ơn các Thầy rất nhiều.

==============================

Cho em hỏi:

Mã:
Private Sub UserForm_Terminate()     
StopTimer     
Unload UserForm1 
    [COLOR=#ff0000][B]Unload Me [/B][/COLOR]
End Sub

Đã thoát form của mình rồi (hiển nhiên phải unload me) thì mới xảy ra sự kiện Terminate, sao Thầy lại bỏ vào trong sự kiện đó? Em đã bỏ nó ra, chẳng có vấn đề gì?

Tất nhiên bỏ Unload Me. Tôi vừa viết vừa xem phim mà.

Và cho em hỏi thêm, khi Debug.Pint (Debug.Print "F1: " & hWnd) thì các lần Print nó lại cho giá trị khác nhau và có chiều hướng lần sau lớn hơn lần trước là vì sao? Nó sẽ ảnh hưởng gì nếu một số vượt quá mức Long Data?

F1: 2491342
F2: 787318

F1: 852854
F2: 2884514

F1: 918390
F2: 1049352

Bạn kể chuyện thuộc dòng "Chuyện lạ đó đây"
Của tôi:

frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
-----------------
1. Trước tiên nói về Long Data. Tôi không hiểu ý bạn.
Windows hoặc không tìm thấy cửa sổ đạt tiêu chí tìm kiếm hoặc tìm thấy và trả về handle của nó. Mỗi cửa sổ có một handle, là số Long unique. Vậy trong system có bao nhiêu của sổ thì có bấy nhiêu "window handle". Dĩ nhiên trong system không thể có hàng TỶ cửa sổ được tạo.
Mà khi cửa sổ được tạo thì Windows gán cho nó 1 giá trị LONG, vậy thì cái "vượt quá mức Long Data" phải hiểu như thế nào?

2. Bạn hơi kiệm lời. Bạn đã test như thế nào?
Phải là: click Button "Show Form" trên sheet --> click Button trên frm và UserForm1 vài lần để test --> click nút X để Unload frm và UserForm1.

Trong toàn bộ qui trình như ở trên thì bạn có kết quả như của tôi. Còn nếu bạn lặp lại qui trình đó vài lần thì bạn phải hiểu như sau:
- MỖI khi cửa sổ được tạo thì nó được gán cho 1 số gọi là "windiw handle". Cũng cùng cửa sổ đó nhưng thực hiện 1 loạt thao tác: mở (tạo) --> đóng (hủy) --> mở (tạo) --> đóng (hủy) ...
thì mỗi lần tạo handle sẽ khác và mỗi lần hủy thì handle trước đó được gán cho cửa sổ sẽ được giải phóng - tức là con số có giá trị như thế đã "tự do".

Ta xét ví dụ. myForm

myForm được tạo --> 1 số LONG gọi là "window handle" được gán cho cửa sổ myForm, vd. đó là 12345 --> con số 12345 này kể từ lúc này sẽ "bận", nó không được gán cho bất cứ cửa sổ nào trong tương lai sẽ được tạo (nên nhớ rằng các phần mềm khác trong system cũng có thể tạo cửa sổ), bởi handle phải unique - Nó cũng như Mã Nhân Viên ấy. Nếu MNV không unique thì làm sao có thể dùng đó để định danh nhân viên được???. Nếu cửa sổ nào đó sau đó được tạo thì Windows sẽ dùng con số LONG khác với 12345 để gán cho nó.
Nếu vào 1 lúc nào đó ta đóng (hủy) myForm thì handle của nó, tức con số 12345 được "giải phóng, tự do, không bận nữa". Và từ thời điểm này Windows có thể sẽ dùng con số 12345 để gán cho 1 cửa sổ khác được tạo vì không "sợ" trùng với handle của các cửa sổ khác nữa (cửa sổ có handle = 12345 đã được hủy rồi mà), tức vẫn thỏa đặc tính unique của window handle.
Bây giờ bạn lại tạo myForm (tức Show) thì cửa sổ myForm lại được gán cho 1 LONG gọi là window handle. Giá trị được gán bây giờ không nhất thiết phải y như giá trị được gán ở lần tạo trước.
 
Upvote 0
Tất nhiên bỏ Unload Me. Tôi vừa viết vừa xem phim mà.



Bạn kể chuyện thuộc dòng "Chuyện lạ đó đây"
Của tôi:

frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
frm = 459844
UserForm1 = 459816
-----------------
1. Trước tiên nói về Long Data. Tôi không hiểu ý bạn.
Windows hoặc không tìm thấy cửa sổ đạt tiêu chí tìm kiếm hoặc tìm thấy và trả về handle của nó. Mỗi cửa sổ có một handle, là số Long unique. Vậy trong system có bao nhiêu của sổ thì có bấy nhiêu "window handle". Dĩ nhiên trong system không thể có hàng TỶ cửa sổ được tạo.
Mà khi cửa sổ được tạo thì Windows gán cho nó 1 giá trị LONG, vậy thì cái "vượt quá mức Long Data" phải hiểu như thế nào?

2. Bạn hơi kiệm lời. Bạn đã test như thế nào?
Phải là: click Button "Show Form" trên sheet --> click Button trên frm và UserForm1 vài lần để test --> click nút X để Unload frm và UserForm1.

Trong toàn bộ qui trình như ở trên thì bạn có kết quả như của tôi. Còn nếu bạn lặp lại qui trình đó vài lần thì bạn phải hiểu như sau:
- MỖI khi cửa sổ được tạo thì nó được gán cho 1 số gọi là "windiw handle". Cũng cùng cửa sổ đó nhưng thực hiện 1 loạt thao tác: mở (tạo) --> đóng (hủy) --> mở (tạo) --> đóng (hủy) ...
thì mỗi lần tạo handle sẽ khác và mỗi lần hủy thì handle trước đó được gán cho cửa sổ sẽ được giải phóng - tức là con số có giá trị như thế đã "tự do".

Ta xét ví dụ. myForm

myForm được tạo --> 1 số LONG gọi là "window handle" được gán cho cửa sổ myForm, vd. đó là 12345 --> con số 12345 này kể từ lúc này sẽ "bận", nó không được gán cho bất cứ cửa sổ nào trong tương lai sẽ được tạo (nên nhớ rằng các phần mềm khác trong system cũng có thể tạo cửa sổ), bởi handle phải unique - Nó cũng như Mã Nhân Viên ấy. Nếu MNV không unique thì làm sao có thể dùng đó để định danh nhân viên được???. Nếu cửa sổ nào đó sau đó được tạo thì Windows sẽ dùng con số LONG khác với 12345 để gán cho nó.
Nếu vào 1 lúc nào đó ta đóng (hủy) myForm thì handle của nó, tức con số 12345 được "giải phóng, tự do, không bận nữa". Và từ thời điểm này Windows có thể sẽ dùng con số 12345 để gán cho 1 cửa sổ khác được tạo vì không "sợ" trùng với handle của các cửa sổ khác nữa (cửa sổ có handle = 12345 đã được hủy rồi mà), tức vẫn thỏa đặc tính unique của window handle.
Bây giờ bạn lại tạo myForm (tức Show) thì cửa sổ myForm lại được gán cho 1 LONG gọi là window handle. Giá trị được gán bây giờ không nhất thiết phải y như giá trị được gán ở lần tạo trước.

Vâng, bây giờ thì em đã hiểu vì sao có sự khắc biệt về số khi mỗi lần thoát (bấm nút đỏ X). Số đó như 1 ID chứ không phải do cái gì chạy mà có để nó quản lý cửa sổ đang mở và chỉ duy nhất, không có số trùng.

Cám ơn Thầy đã giải thích cặn kẻ.

Còn một thắc mắc về mặt thẩm mỹ nữa là, em biết rằng tùy thuộc vào độ rộng của form mà mình có thể cho các khoảng trắng dài hay ít lại để cho nó tương đối chạy chữ từ nút thoát trên Caption về đầu của caption. Thế nhưng mình canh ở cửa sổ máy này thì chuyển qua cửa sổ của máy khác nó lại không như ý, hoặc mình làm các thủ tục cho form để nó Min, Max, Normal thì khi nó Max tức form show toàn màn hình thì dòng chữ nó chạy chỉ phân nửa cái caption, trông nó thật không đẹp mắt.

attachment.php


Em đã thử làm theo phương thức dựa vào sự kiện Resize của form, nhưng kể ra cách này cũng chỉ là "tạm bợ", không biết các Thầy có cao kiến gì không ạ?

Code của em:
[GPECODE=vb]Dim isZoom As Boolean, ZoomRate As Double, GetText As String
Dim OldWidth As Double, PrevStyle&

Private Sub UserForm_Initialize()
OldWidth = Width
GetText = Sheet1.Range("D11").Value
isZoom = True
End Sub

Private Sub UserForm_Resize()
Dim rpt As Long
ZoomRate = Width / OldWidth
rpt = Len(GetText) * (ZoomRate - 1)
fCaption = GetText & String(IIf(rpt < 0, 0, rpt), " ")
End Sub

Private Sub UserForm_Activate()
hWnd = FindWindow("ThunderDFrame", vbNullString)
If isZoom Then
PrevStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, PrevStyle Or WS_SIZEBOX Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
isZoom = False
End If
'Debug.Print "F1: " & hWnd
fCaption = GetText
StartTimer
End Sub

[/GPECODE]
 

File đính kèm

  • MarqueeOnUF_API_4_1.xls
    46 KB · Đọc: 41
  • Picture2.jpg
    Picture2.jpg
    38.5 KB · Đọc: 58
Lần chỉnh sửa cuối:
Upvote 0
Kính gửi các Thầy.

Dạ em có xem lại bài viết cũ này , có thử chạy file như đính kèm nhưng nó báo lỗi.

Rất mong các thầy xem giúp em cách sửa lỗi này với ạ.

Em xin cảm ơn!
Capture.PNG
 

File đính kèm

  • MarqueeOnUF_API_2.xlsm
    25.4 KB · Đọc: 2
Upvote 0
Kính gửi các Thầy.

Dạ em có xem lại bài viết cũ này , có thử chạy file như đính kèm nhưng nó báo lỗi.

Rất mong các thầy xem giúp em cách sửa lỗi này với ạ.

Em xin cảm ơn!
View attachment 298467
Code trên đã cũ, còn máy bạn có lẽ đang sử dụng Windows 64 bit nên nó báo lỗi, sửa lại các hàm API cho phù hợp Win 64 bit.
 
Upvote 0
Web KT
Back
Top Bottom