|
参考下这个思路,看能不能解决
在x64 OFFICE中使用ScriptControl控件的方法- Sub Test()
- Dim oSC As Object
- Set oSC = CreateObjectx86("ScriptControl") ' create ActiveX via x86 mshta host
- Debug.Print TypeName(oSC) ' ScriptControl
- With oSC
- '操作oSC
- End With
- CreateObjectx86 , True ' close mshta host window at the end
- End Sub
- Function CreateWindow()
- Dim sSignature, oShellWnd, oProc
- On Error Resume Next
- sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)
- CreateObject("WScript.Shell").Run "%systemroot%\syswow64\mshta.exe about:""about:<head><script>moveTo(-32000,-32000);document.title='x86Host'</script><hta:application showintaskbar=no /><object id='shell' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shell.putproperty('" & sSignature & "',document.parentWindow);</script></head>""", 0, False
- Do
- For Each oShellWnd In CreateObject("Shell.Application").Windows
- Set CreateWindow = oShellWnd.GetProperty(sSignature)
- If Err.Number = 0 Then Exit Function
- Err.Clear
- Next
- Loop
- End Function
- Function CreateObjectx86(Optional sProgID, Optional bClose = False)
- Static oWnd As Object
- Dim bRunning As Boolean
- #If Win64 Then
- bRunning = InStr(TypeName(oWnd), "HTMLWindow") > 0
- If bClose Then
- If bRunning Then oWnd.Close
- Exit Function
- End If
- If Not bRunning Then
- Set oWnd = CreateWindow()
- oWnd.execScript "Function CreateObjectx86(sProgID): Set CreateObjectx86 = CreateObject(sProgID): End Function", "VBScript"
- End If
- Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID)
- #Else
- Set CreateObjectx86 = CreateObject("ScriptControl")
- #End If
- End Function
复制代码 |
|