Yin葉子 2023-10-10 22:10 采纳率: 33.3%
浏览 8

VBA使用位图句柄创建图片对象报错

我在使用VBA创建二维码的时候提示olepro32.dll文件未找到,我检查了我的windows文件夹下面是存在该文件的


Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32.dll" (lpPictDesc As PictDesc, riid As GUID, ByVal fPictureOwnsHandle As Long, IPic As IUnknown) As Long

Public Function BitmapToPicture(ByVal hBmp As Long, ByVal fPictureOwnsHandle As Long) As StdPicture
    If (hBmp = 0) Then Exit Function
    Dim oNewPic As IUnknown, tPicConv As PictDesc, IGuid As GUID
    With tPicConv
        .cbSizeOfStruct = Len(tPicConv)
        .picType = 1
        .hImage = hBmp
    End With
    With IGuid
        .Data4(0) = &HC0
        .Data4(7) = &H46
    End With
    OleCreatePictureIndirect tPicConv, IGuid, fPictureOwnsHandle, oNewPic
    Set BitmapToPicture = oNewPic
End Function

Sub 图片创建()
Dim Picture_obj As Object
    Picture_obj = BitmapToPicture("-821731954 ", 1)
End Sub

运行环境是Windows11 64位系统,Office 365 此段VBA代码在32位系统可以正常执行并创建一个图片对象

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-11 08:26
    关注

    【以下回答由 GPT 生成】

    问题分析:

    在64位系统上运行VBA代码时报告无法找到olepro32.dll文件的错误是因为该文件是32位DLL文件,无法在64位系统中被加载和调用。因此,需要找到适用于64位系统的DLL文件来替代olepro32.dll。

    解决方案:

    1. 从Windows系统文件夹复制oleaut32.dll文件到自定义的文件夹中。一般来说,oleaut32.dll文件位于"C:\Windows\System32"文件夹中。

    2. 使用VS命令行工具,将oleaut32.dll转换成64位DLL文件。打开VS命令行工具,运行以下命令: cd "自定义的文件夹路径" corflags oleaut32.dll /32BITREQ-

    3. 复制转换后的64位DLL文件(oleaut32.dll)到系统文件夹中。一般来说,系统文件夹是"C:\Windows\System32",但如果是64位系统,则应该复制到"C:\Windows\SysWOW64"文件夹中。

    4. 修改VBA代码中的DLL文件名称和路径,将原来的"olepro32.dll"替换为新的"oleaut32.dll"。修改后的VBA代码如下所示: vb Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" (lpPictDesc As PictDesc, riid As GUID, ByVal fPictureOwnsHandle As Long, IPic As IUnknown) As Long

    5. 运行修改后的VBA代码,尝试创建图片对象。

    请注意,由于这只是一种尝试解决问题的方法,无法保证一定能够解决问题。如果问题仍然存在,可能需要进一步考虑其他解决方案或咨询相关领域的专业人士。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月10日