Sửa hàm API chạy cho Win64 bit

  • Thread starter Thread starter HanPN
  • Ngày gửi Ngày gửi
Liên hệ QC

HanPN

Thành viên mới
Tham gia
5/4/19
Bài viết
3
Được thích
1
Chào các bác
em có đoạn Code này dùng cho Win32 nhưng giờ muốn chuyển sang để có thể dùng được cho cả Win32 và 64 thì sửa thế nào vậy ạ, em cũng đã đọc và tìm kiếm nhiều rồi, nhưng chắc từ khóa chưa đúng nên chưa tìm được.
để không mất quá nhiều thời gian tìm kiếm nên Post bài lên để nhờ được sự giúp đỡ.
nếu bác nào biết thì mong giúp em và cũng đừng cho em ăn quá nhiều gạch đá
em cảm ơn

Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
 
Chào các bác
em có đoạn Code này dùng cho Win32 nhưng giờ muốn chuyển sang để có thể dùng được cho cả Win32 và 64 thì sửa thế nào vậy ạ, em cũng đã đọc và tìm kiếm nhiều rồi, nhưng chắc từ khóa chưa đúng nên chưa tìm được.
để không mất quá nhiều thời gian tìm kiếm nên Post bài lên để nhờ được sự giúp đỡ.
nếu bác nào biết thì mong giúp em và cũng đừng cho em ăn quá nhiều gạch đá
em cảm ơn

Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As LongPtr

Thêm phần in đậm xem được không.
 
Upvote 0
Khai báo hàm API để chạy cho cả 32 và 64 bit vừa dễ vừa khó. Phải hiểu cấu trúc của từng hàm API đó, không phải chỉ mỗi từ khóa PtrSafe đâu.
Với câu hỏi của chủ đề thì bạn khai báo như sau:

#If VBA7 Then
Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As LongPtr
#Else
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
#End If
 
Upvote 0
Khai báo hàm API để chạy cho cả 32 và 64 bit vừa dễ vừa khó. Phải hiểu cấu trúc của từng hàm API đó, không phải chỉ mỗi từ khóa PtrSafe đâu.
Với câu hỏi của chủ đề thì bạn khai báo như sau:

#If VBA7 Then
Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As LongPtr
#Else
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
#End If
Cảm ơn bác em sẽ thử ạ
 
Upvote 0
Khai báo hàm API để chạy cho cả 32 và 64 bit vừa dễ vừa khó. Phải hiểu cấu trúc của từng hàm API đó, không phải chỉ mỗi từ khóa PtrSafe đâu.
Với câu hỏi của chủ đề thì bạn khai báo như sau:

#If VBA7 Then
Private Declare PtrSafe Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As LongPtr
#Else
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
#End If
Em đã thử và thành công, cảm ơn bác!
 
Upvote 0
Dear bác.
Em có thể giúp em.
Sau khi chuyển máy, chuyển từ excel 2007 lên office 2010, 64bit toàn bộ các Code VBA liên quan đến gửi mail, đều báo lỗi:
Run-time error'-2147417851(80010105)'.
Method 'To' of object '_Mailtem'faied.
Em không rõ là lỗi code, hay em chưa cài đầy đủ các phần trong ofice 2010. Các code này, em chuyển sang máy cũ của em 2007 vẫn dùng vẫn bình thường, sang máy mới cài ofice 2010 là không chạy được.
và đên dòng .To = cll.Offset(, 24) thì lỗi

Code

Option Explicit
Function GetBoiler(ByVal sFile As String) As String
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.readall
ts.Close
End Function
Sub TachFile()
Dim data As Range, cll As Range
Dim sTo, ssub, sBody, bodyString, Signature, SigString As String
Set data = [a1].CurrentRegion
SigString = Environ("appdata") & _
"\Microsoft\Signatures\CHUKY.htm"
bodyString = "D:\M\DT.htm"
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If

If Dir(bodyString) <> "" Then
sBody = GetBoiler(bodyString)
Else
sBody = ""
End If
For Each cll In Range([A2], [A100000].End(3))
If cll.Value <> cll.Offset(1, 0).Value Then
data.AutoFilter 1, cll
data.SpecialCells(12).Copy
With Workbooks.Add
.ActiveSheet.[a1].PasteSpecial 1
.SaveAs ThisWorkbook.Path & "\" & cll & ".xlsx"
.Close
End With
data.AutoFilter
With CreateObject("Outlook.Application")
.Session.Logon
With .CreateItem(0)
.To = cll.Offset(, 24)
.CC = cll.Offset(, 25)
'.BCC = cll.Offset(,37) S? c?t t? c?t A ??n c?t ?i?n Mail BCC tr? 1
.Attachments.Add ThisWorkbook.Path & "\" & cll & ".xlsx"
.Subject = "TEST"
.HTMLBody = sBody & "<br>" & Signature
.send
End With
End With
End If
Next
End Sub
Kính mong các bác giúp em ạ. Trân trọng cảm ơn.
 
Upvote 0
Web KT

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

Back
Top Bottom