Vba实现解析json数据。当中的关于Set oSC = CreateObject("MSScriptControl.ScriptControl") 不能创建对象的问题。

摘要:
最后,我在网上看到,单词分为32位和64位的方法只能在32位单词中使用,但不能在64位单词中实现,所以我在网上找到了各种解决方案。最后,找到一个方法并重写方法实现:'读取json格式的文件。Convert FunctionReadJsonDimoSCAsObjectSetoSC=CreateObjectx86'createActiveXviax86mshtahostDebug PrintTypeName'ScriptControl'定义通过变量加载DimJSONAsStringJSON=aWithoSC'操作oSC获得的json字符串。Language=“Javascript”。超时=-1.AddCode“varjson=”&JSON&“;”Eval'MsgBox.EvalReadJson=。EvalEndWithCreateObjectx86,True'在EndFunctionFunctionCreateObjectx86StaticWndAsObjectDimbRunningAsBoolean#IfWin64ThenbRunning=InStr˃0IfbCloseTheIfbRunningThenoWnd.CloseExitFunctionEndIfNotbRunningtheSettoWnd=CreateWindow()oWnd处关闭后窗口。execScript“FunctionCreateObjectx86:SetCreateObjectx86=CreateObject:EndFunction”,“VBScript”EndIfSetCreateObjectx86=oWnd。CreateObjectx86#ElseSetCreateObjectx86=CreateObject#EndIfEndFunctionFunctionCreateWindow()DimsSignature,oShellWnd,oProcOnErrorResumeTextSignature=LeftCreateObject.运行“%systemroot%syswow64mshta.exeabout:”“关于:moveTo;document.title='x86Host'shell.putproperty;”“,0,FalseDoForEachoShellWndInCreateObject.WindowsSetCreateWindow=oShellWnd.GetPropertyIfErr.Number=0TheExitFunctionErr。ClearNextLoopEndFunction已分别在32位和64位字上试用。您可以卸载json数据。

这几天在word里面写宏,想解析服务器传过来的json串。但是Set oSC = CreateObjectx86("MSScriptControl.ScriptControl")这个方法一直创建不了对象。

最后再网上看到说,word分为32位的和64位的这个方法只有在32位的word里面才可以使用,在64位的里面是实现不了的(不能创建对象)

于是在网上找各种的方案解决。最后找到一个方法,自己重写这个方法实现:(代码如下)

'读取json格式的文件。做转化
Function ReadJson(Optional a As String)
    Dim oSC As Object
    Set oSC = CreateObjectx86("MSScriptControl.ScriptControl") ' create ActiveX via x86 mshta host
    Debug.Print TypeName(oSC) ' ScriptControl
    '定义变量装获取到的json串
    Dim JSON As String
    JSON = a
    With oSC
        '操作oSC
        .Language = "Javascript"
        .Timeout = -1
        .AddCode "var json = " & JSON & ";"
        .Eval ("json.item[0].delist_time")
     'MsgBox .Eval("json.item[0].delist_time")
     
     ReadJson = .Eval("json.item[0].delist_time")
    
    End With
    CreateObjectx86 , True ' close mshta host window at the end
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("MSScriptControl.ScriptControl")
    #End If
End Function

Function CreateWindow()
    Dim sSignature, oShellWnd, oProc
    On Error Resume Next
    sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)
    CreateObject("WScript.Shell").Run "%systemroot%syswow64mshta.exe about:""about:<head><script>moveTo(-32000,-32000);document.title='x86Host'</script><hta:application showintaskbar=no /><object   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

然后分别在32位和64位的word上面都试过了。可以接卸json数据。至此问题解决。

免责声明:文章转载自《Vba实现解析json数据。当中的关于Set oSC = CreateObject("MSScriptControl.ScriptControl") 不能创建对象的问题。》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c#基础-自动内存管理STM32系统时钟RCC(基于HAL库)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[vba]excel中求选中数据和为给定数所有的组合

昨天下午开始学习的vba,累死了,肯定有bug,待调试 vba程序如下: 1 Dim aSum As Integer 2 Dim tSum As Integer 3 Dim judge(30) As Integer 4 Dim arrMax As Integer 5 Dim arr 6 Dim location(30) As Integer...

【VBA编程】15.WorkSheet对象常用属性

【Cells属性】 Cells属性用于返回一个Range对象,表示工作表中所有的单元格,包括已经使用的单元格和未使用的单元格。 【代码区域】 Sub使用Cells属性() '声明变量 Dim wk AsWorkbook Dim wt AsWorksheet '赋值 Set wk = Application....

各种VBA excel 命令、属性、方法

本示例为设置密码窗口 (1)If Application.InputBox("请输入密码:") = 1234 Then        [A1] = 1 '密码正确时执行Else      MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End If'本示例为设置密码窗口 (1)X = MsgBox("是否真的要结帐?", vbYesNo)...

VBA 如何实现让所有图片刚好适应所在单元格大小与表框

Excel疑难千寻千解丛书(三)Excel2010 VBA编程与实践.pdf Sub 让图片适应单元格() Dim sh As Shape Dim sSheet As Worksheet '源工作表 Set sSheet = Worksheets("Sheet1") For Each sh In sSheet.S...

VBA常用快捷键

摘自Excel 2007 Visual Basic用户界面帮助. 不过有些和系统快捷键冲突,就不起作用了.如Ctrl+Space,可以使用快捷键在代码窗口中访问下列命令。描述 快捷键查看代码窗口 F7查看“对象浏览器” F2查找 CTRL+F替换 CTRL+H查找下一个 F3查找前一个 SHIFT+F3下一个过程 CTRL+DOWN ARROW前一个过程...

批量横向打印Excel

使用VBA脚本写的,具体使用如下:在批量需要打印的Excel文档下面,新建一个文档,将代码粘贴VBA工程里,然后运行即可。 具体代码如下: Attribute VB_Name = "模块1" SubPiLiangPring() Attribute PiLiangPring.VB_ProcData.VB_Invoke_Func = "14" Dim curP...