Hướng dẫn Khắc phục lỗi trong VBA trong hệ thống 64 bit (Win 7 + Office 64 bit)

Liên hệ QC

phantuannam

Thành viên mới
Tham gia
27/6/06
Bài viết
18
Được thích
57
Mình không biết nên miêu tả lỗi này như thế nào cho cụ thể nên mình sẽ nêu các thông tin sau:

1. Mình có 1 file Kế toán Excel sử dụng VBA (Office 2003)

2. Máy bàn của mình cài XP SP3, Office 2010 32-bit sử dụng file này bình thường.

3. Laptop mình cài Win 7 64bit, Office 2010 64-bit thì khi mở file sẽ nhận ngay cảnh báo như hình dưới.

5139755557e09b7e8261e5b18d989782_50619904.64bit.png

Các bạn hướng dẫn giúp mình cách khắc phục để có thể sử dụng file này trên Laptop với.

Trân trọng cảm ơn.
 

File đính kèm

  • 64bit.jpg
    64bit.jpg
    14.1 KB · Đọc: 690
Vụ này hình như phải coi code mới xử lý được Nam ơi.
 
Upvote 0
Vụ này hình như phải coi code mới xử lý được Nam ơi.

Đa phần là do dùng hàm API mà ra
Ví dụ ta dùng hàm:
Mã:
Private Declare Function GetWindowLongptr Lib "USER32" Alias _
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Được viết trên Office 32 bit
Giờ nếu muốn dùng trên Office 64 thì phải vầy:
Mã:
Private Declare [COLOR=#ff0000]PtrSafe[/COLOR] Function GetWindowLongptr Lib "USER32" Alias _
"GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Tổng quát, để viết 1 code mà chưa biết sẽ chạy trên hệ thống nào, ta sẽ viết thế này:
Mã:
#If VBA7 Then
   Private Declare PtrSafe Function GetWindowLongptr Lib "USER32" Alias _
     "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
#Else
   Private Declare Function GetWindowLongptr Lib "USER32" Alias _
     "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long 
#End If
Nói chung cứ nhớ cú pháp:
Mã:
#If VBA7 Then
    [Public/Private] Declare [COLOR=#ff0000]PtrSafe [/COLOR]Function ...
#Else
    [Public/Private] Declare Function ...
#End If
Một vài biến Long có thể được đổi thành LongPtr
vân vân....
 
Upvote 0
Mong Anh ndu96081631 sửa giúp em đoạn câu bên dưới dùng cho office 2010 64bit

Thanhks Anh

Nguyên tắc tôi đưa ở trên nó là vậy, còn cụ thể ra sao thì bạn phại tự mình thí nghiệm xem báo lỗi ở đâu ta tính chổ đó
(bạn có Office 64 bit thì bạn tự thí nghiệm, tôi đâu có dùng Office 64, biết thử sao đây?)
 
Upvote 0
Nhờ các anh chị chỉnh lại hộ em cho nó chạy trên office 64 bit với ạ. Em xin cảm ơn!
Option Explicit


Private Const MB_USERICON = &H80&


Private Type MsgBoxParams
cbSize As Long
hWndOwner As Long
hInstance As Long
lpszText As Long
lpszCaption As Long
dwStyle As Long
lpszIcon As Long
dwContextHelpId As Long
lpfnMsgBoxCallback As Long
dwLanguageId As Long
End Type


Private Declare PtrSafe Function MessageBoxIndirectW Lib "user32" (lpMsgBoxParams As MsgBoxParams) As LongPtr


' note: I didn't bother to go ahead and start hacking with HelpFile and Context
Public Function IMsgBox(ByVal Prompt As StringPtr, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal Title As StringPtr, Optional ByVal ResourceIcon As StringPtr, Optional ByVal hWndOwner As LongPtr) As VbMsgBoxResult
Dim udtMsgBox As MsgBoxParams
' if no owner is specified, try to use the active form
' If hWndOwner = 0 Then If Not Screen.ActiveForm Is Nothing Then hWndOwner = Screen.ActiveForm.Hwnd
With udtMsgBox
.cbSize = Len(udtMsgBox)
' important to set owner to get behavior similar to the native MsgBox
.hWndOwner = hWndOwner
' .hInstance = App.hInstance
' set the message
.lpszText = StrPtr(Prompt)
' if no title is given, use the application title like the native MsgBox
If LenB(Title) = 0 Then Title = VietTelex("Thoong baso") 'App.Title
.lpszCaption = StrPtr(Title)
' thought this would be a nice feature addition
If LenB(ResourceIcon) = 0& Then
.dwStyle = Buttons
Else
.dwStyle = (Buttons Or MB_USERICON) And Not (&H70&)
.lpszIcon = StrPtr(ResourceIcon)
End If
End With
' show the message box
IMsgBox = MessageBoxIndirectW(udtMsgBox)
End Function
 
Upvote 0
Nhờ các anh chị chỉnh lại hộ em cho nó chạy trên office 64 bit với ạ. Em xin cảm ơn!
 

File đính kèm

  • TVEXCEL01.zip
    80.1 KB · Đọc: 82
Lần chỉnh sửa cuối:
Upvote 0
Đa phần là do dùng hàm API mà ra
Ví dụ ta dùng hàm:
Mã:
Private Declare Function GetWindowLongptr Lib "USER32" Alias _
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Được viết trên Office 32 bit
Giờ nếu muốn dùng trên Office 64 thì phải vầy:
Mã:
Private Declare [COLOR=#ff0000]PtrSafe[/COLOR] Function GetWindowLongptr Lib "USER32" Alias _
"GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Tổng quát, để viết 1 code mà chưa biết sẽ chạy trên hệ thống nào, ta sẽ viết thế này:
Mã:
#If VBA7 Then
   Private Declare PtrSafe Function GetWindowLongptr Lib "USER32" Alias _
     "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
#Else
   Private Declare Function GetWindowLongptr Lib "USER32" Alias _
     "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long 
#End If
Nói chung cứ nhớ cú pháp:
Mã:
#If VBA7 Then
    [Public/Private] Declare [COLOR=#ff0000]PtrSafe [/COLOR]Function ...
#Else
    [Public/Private] Declare Function ...
#End If
Một vài biến Long có thể được đổi thành LongPtr
vân vân....
Anh ơi, với máy sử dụng Win7 64 bit và office 32 bit thì thế nào ạ
Em trước dùng trên Win 7 32 bit và office 32 thì OK nhưng khi chuyển sang Win 7 64bit thì không dùng được
Em cảm ơn ạ
 
Upvote 0
Anh ơi, với máy sử dụng Win7 64 bit và office 32 bit thì thế nào ạ
Em trước dùng trên Win 7 32 bit và office 32 thì OK nhưng khi chuyển sang Win 7 64bit thì không dùng được
Em cảm ơn ạ
vụ này có khi bạn phải cài lại office 64 bits tương ứng với hệ điều hành !
 
Upvote 0
Có bác nào giúp e sửa cái lệnh này trong win 64 với ạ... Tks
.lpszText = Str(Prompt)
 
Upvote 0
Mình không biết nên miêu tả lỗi này như thế nào cho cụ thể nên mình sẽ nêu các thông tin sau:

1. Mình có 1 file Kế toán Excel sử dụng VBA (Office 2003)

2. Máy bàn của mình cài XP SP3, Office 2010 32-bit sử dụng file này bình thường.

3. Laptop mình cài Win 7 64bit, Office 2010 64-bit thì khi mở file sẽ nhận ngay cảnh báo như hình dưới.

5139755557e09b7e8261e5b18d989782_50619904.64bit.png

Các bạn hướng dẫn giúp mình cách khắc phục để có thể sử dụng file này trên Laptop với.

Trân trọng cảm ơn.
Bạn chỉ càn thêm chử " PtrSafe " vào giữa Declare và Function là được nha.
 
Upvote 0
Em chào mọi người,

Em cũng có 1 file VBA cũng bị lỗi khi sử dụng hệ thống 64bit, nhờ mọi người sửa code giúp em.
Em không biết về code VBA file này em vào công ty có sẵn rồi sử dụng thôi ạ.
Pass của VBA là: 1234567

Nhờ mọi người giúp đỡ.
Em cảm ơn nhiều!
 

File đính kèm

  • du lieu.zip
    1.4 MB · Đọc: 29
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom