是否有内置的方法在Excel VBA中对字符串进行URL编码,还是需要手动滚动此功能?
我有与Excel VBA相同的问题:Parsed JSON Object Loop但无法找到任何解决方案.我的JSON有嵌套对象所以像VBJSON和vba-json这样的建议解决方案对我不起作用.我还修复了其中一个正常工作,但结果是一个调用堆栈溢出,因为doProcess函数的许多递归.
最好的解决方案似乎是原始帖子中看到的jsonDecode函数.它非常快速且高效; 我的对象结构是JScriptTypeInfo类型的通用VBA对象.
此时的问题是我无法确定对象的结构是什么,因此,我事先并不知道将存在于每个通用对象中的键.我需要遍历通用VBA对象来获取键/属性.
如果我的解析javascript函数可以触发VBA函数或sub,那将是非常好的.
我想检查空数组.Google给了我各种解决方案,但没有任何效果 也许我没有正确应用它们.
Function GetBoiler(ByVal sFile As String) As String
'Email Signature
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
Dim FileNamesList As Variant, i As Integer
' activate the desired startfolder for the filesearch
FileNamesList = CreateFileList("*.*", False) ' Returns File names
' performs the filesearch, includes any subfolders
' present the result
' If there are Signatures then populate SigString
Range("A:A").ClearContents
For i = …Run Code Online (Sandbox Code Playgroud) 我有一个像下面这样的json:
{"sentences":[{"trans":"something ru","orig":"english word","translit":"Angliyskoye slovo","src_translit":""}], "src":"en","server_time":69}
Run Code Online (Sandbox Code Playgroud)
并解析它:
Function jsonDecode(jsonString As Variant)
Set sc = CreateObject("ScriptControl"): sc.Language = "JScript"
Set jsonDecode = sc.Eval("(" + jsonString + ")")
End Function
Set arr = jsonDecode(txt)
Run Code Online (Sandbox Code Playgroud)
结果 arr包含如下所示的值(在Watches中检查):
arr
- sentences (type: Variant/Object/JScriptTypeInfo)
- 0 (type: Variant/Object/JScriptTypeInfo)
- orig (type: Variant/String)
- trans (type: Variant/String)
...
- Item 1 (type: Variant/Object/JScriptTypeInfo)
- orig (type: Variant/String)
- trans (type: Variant/String)
...
- server_time
- src
Run Code Online (Sandbox Code Playgroud)
arr.src运作良好,但我怎么能得到arr.sentences(0).trans?首先,VBA替换sentences用Sentences,其次(当我试图手动更改JSON)它仍然不允许使用sentenses(0) …
我正在编写一个脚本,它将循环遍历我的电子表格,并查找是否有任何重复的所选单元格.如果有重复,那么该函数将返回一个行是重复的数组,并创建一个注释告诉我哪些行是重复的.我已经能够处理错误0但是现在当我使用UBound函数检查数组中是否存在元素时,我得到错误9.有没有人知道如何验证整数数组,如果它是空的或不是因为我的代码似乎没有完成这项工作.以下是我的代码
Function IsArrayEmpty(anArray As Variant) As Boolean
Dim i As Integer
On Error Resume Next
i = UBound(anArray, 1)
Select Case (Err.Number)
Case 0
IsArrayEmpty = True
Case 9
IsArrayEmpty = True
Case Else
IsArrayEmpty = False
End Select
End Function
Run Code Online (Sandbox Code Playgroud) 当我用 VBA 保存我的 Excel 文件时,它要求我输入我的凭据(它将它保存在某种服务器上)。通过查看网站,我找到了一种使用SendKeys和延迟操作的方法。
我的问题:
代码停止并等待用户输入 ( Enter) 并且我找不到开始下一行代码的方法(这实际上是推Enter...)
我的代码:
这是我需要帮助的具体部分:
.SaveAs Filename:="Y:\Must\Must Chart Management.csv", FileFormat:=xlCSV, Local:=True
Application.Wait (Now + TimeValue("0:00:05"))
SendKeys ("{ENTER}")
Run Code Online (Sandbox Code Playgroud)
这是整个事情:
Sub UpdateMust2020()
Application.DisplayAlerts = False
KillFile = "B:\Must\Must Chart Management.csv"
With ActiveWorkbook
Worksheets("Must Chart Management").Activate
.SaveAs Filename:="Y:\Must\Must Chart Management.csv", FileFormat:=xlCSV, Local:=True
Application.Wait (Now + TimeValue("0:00:05"))
SendKeys ("{ENTER}")
.SaveAs Filename:="E:\users\Must Definition Dashboard\Convergence\Must Chart Management.csv", FileFormat:=xlCSV, Local:=True
Worksheets("MasterQuery").Activate
.SaveAs Filename:="Y:\Must\Must Statistics Charts.csv", FileFormat:=xlCSV, Local:=True
.SaveAs Filename:="E:\users\Must Definition Dashboard\Convergence\Must Statistics Charts.csv", FileFormat:=xlCSV, Local:=True …Run Code Online (Sandbox Code Playgroud) 在我之前的问题中,如何为 VBA 中在运行时提供属性名称的属性赋值?,我学会了在运行时使用 CallByName 在类中设置属性。
然而,这一次,我试图弄清楚如何在运行时从字符串中获取对象。
例如,假设我有一个包含以下数据的字符串:Worksheets("RAW DATA").Range("A1").QueryTable.
这是我可能会尝试做的事情,上面的数据是strParam下面的输入:
Function GetObject(strParam As String) As Object
GetObject = SomeFunction(strParam)
End Function
Run Code Online (Sandbox Code Playgroud)
在这种情况下,GetObject 在对 进行评估时应该返回一个 QueryTable Worksheets("RAW DATA").Range("A1").QueryTable。VBA 中有什么东西可以代替SomeFunction上面的例子吗?
在这里回答我自己的问题.
我已经在Excel VBA中使用JSON做了一些工作,并发布了许多调查结果,我将以问答形式发布这些内容
https://stackoverflow.com/help/self-answer http://blog.stackoverflow.com/2011/07/ITS-OK-到问一答,你自己的问题/
所以在stackoverflow的其他地方,人们可以看到有关在VBA中解析JSON的问题,但他们似乎错过了一两个技巧.
首先,我重新使用自定义JSON解析库,而是使用ScriptControl的Eval方法作为我所有JSON代码的基础.此外,我们还表达了本机Microsoft解决方案的偏好.
这是一个先前的问题在Windows上的Excel VBA中,如何减轻由IDE的大小写行为破坏的解析JSON的点语法遍历问题?这个问题的基础.它显示了使用VBA.CallByName比使用点语法遍历解析的JSON对象更强大.另一个先前的问题在Windows上的Excel VBA中,如何循环解析JSON数组?展示了如何使用它来访问数组元素.但是CallByName返回一个奇怪的变量类型,它在Watch窗口中显示为Object/JScriptTypeInfo,如果在一个窗口中有一个类型Debug.Print(或悬停在变量上),则会得到无信息的"[object Object]".在Windows上的Excel VBA系列中的另一个问题中,如何为已解析的JSON变量获取字符串化的JSON表示而不是"[object Object]"?我提出了一些调试"糖",可以很好地检查变量.在第四个问题中在Windows Excel VBA中,如何获取JSON键以抢占"运行时错误'438':对象不支持此属性或方法"?,在研究如何查询成员的JSON对象时,我发现似乎附加到JScriptTypeInfo对象的hasOwnProperty()方法.
所以在这个问题中我问,究竟这个JScriptTypeInfo究竟是什么?
这是5系列的问题5.这是完整系列
Q1 在Windows上的Excel VBA中,如何减轻由IDE的大小写行为破坏的解析JSON的点语法遍历问题?
Q2 在Windows上的Excel VBA中,如何循环解析JSON数组?
Q3 在Windows上的Excel VBA中,如何为已解析的JSON变量获取字符串化的JSON表示而不是"[object Object]"?
Q4 在Windows Excel VBA中,如何获取JSON键以抢占"运行时错误'438':对象不支持此属性或方法"?
Q5 在Windows上的Excel VBA中,对于已解析的JSON变量,这个JScriptTypeInfo究竟是什么?
我正在构建一个VBA应用程序,该应用程序使用从网络抓取的资源来创建和修改Wordpress网站页面。Wordpress API返回一个JSON文件,但是在VBA中不支持解析JSON,因此我从GitHub导入了VBA-JSON。这是子例程:
Sub Wordpress()
'
' Wordpress API Test
'
Dim wpResp As Variant
Dim sourceSheet As String
Dim resourceURL As String
sourceSheet = "Resources"
resourceURL = Sheets(sourceSheet).Cells(6, 1)
wpResp = getJSON(resourceURL + "/wp-json/wp/v2/posts")
End Sub
Run Code Online (Sandbox Code Playgroud)
和它调用的函数。
Function getJSON(link) As Object
Dim response As String
Dim json As Object
On Error GoTo recovery
Dim retryCount As Integer
retryCount = 0
Dim web As MSXML2.XMLHTTP60
Set web = New MSXML2.XMLHTTP60
the_start:
web.Open "GET", link, False, UserName, pw
web.setRequestHeader "Content-type", "application/json"
web.send …Run Code Online (Sandbox Code Playgroud)