如果您在 Excel 中已经有了数组,这相当简单,只需要确保您的范围与数组的大小相同,您可以使用数组的下边界和上边界来执行此操作,如下所示:
Sub MultiDimension()
Dim MyArr(2, 3) As Long
MyArr(0, 0) = 0
MyArr(0, 1) = 1
MyArr(0, 2) = 2
MyArr(1, 0) = 3
MyArr(1, 1) = 4
MyArr(1, 2) = 5
Range("A1:A1").Resize(UBound(MyArr, LBound(MyArr) + 1), UBound(MyArr, UBound(MyArr))) = MyArr
End Sub
编辑:这会做你想要的。
Sub ReadFromAPI()
Dim MyString As String, MyVal As String, D1 As Long, D2 As Long, MyArr() As Variant, X As Long, APIURL As String
APIURL = "http://iqamah.org/api/test.php"
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", APIURL, False
.Send
MyString = .ResponseText
End With
If MyString <> "" Then
D1 = ((Len(MyString) - Len(Replace(MyString, " => Array", ""))) / 9) - 1
D2 = (Len(MyString) - Len(Replace(MyString, "(", ""))) - 1
ReDim MyArr(D1, D2)
For X = LBound(Split(MyString, vbLf)) To UBound(Split(MyString, vbLf))
MyVal = Split(MyString, vbLf)(X)
If Replace(MyVal, "=>", "") <> MyVal Then
If Replace(MyVal, "=> Array", "") <> MyVal Then
D1 = Mid(MyVal, InStr(1, MyVal, "[") + 1, (InStr(1, MyVal, "]")) - (InStr(1, MyVal, "[") + 1))
Else
D2 = Mid(MyVal, InStr(1, MyVal, "[") + 1, InStr(1, MyVal, "]") - (InStr(1, MyVal, "[") + 1))
MyArr(D1, D2) = Right(MyVal, Len(MyVal) - (InStr(1, MyVal, "=> ")) - 2)
End If
End If
Next
Range("A1:A1").Resize(D1 + 1, D2 + 1) = MyArr
Else
MsgBox "Nothing returned, Site might be down", vbOKOnly
End If
End Sub
作为工作表事件的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyString As String, MyVal As String, D1 As Long, D2 As Long, MyArr() As Variant, X As Long, APIURL As String
If Target = Range("M19") Then
Application.EnableEvents = False
APIURL = "http://iqamah.org/api/test.php?id=" & Target.Text
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", APIURL, False
.Send
MyString = .ResponseText
End With
If MyString <> "" Then
D1 = ((Len(MyString) - Len(Replace(MyString, " => Array", ""))) / 9) - 1
D2 = (Len(MyString) - Len(Replace(MyString, "(", ""))) - 1
ReDim MyArr(D1, D2)
For X = LBound(Split(MyString, vbLf)) To UBound(Split(MyString, vbLf))
MyVal = Split(MyString, vbLf)(X)
If Replace(MyVal, "=>", "") <> MyVal Then
If Replace(MyVal, "=> Array", "") <> MyVal Then
D1 = Mid(MyVal, InStr(1, MyVal, "[") + 1, (InStr(1, MyVal, "]")) - (InStr(1, MyVal, "[") + 1))
Else
D2 = Mid(MyVal, InStr(1, MyVal, "[") + 1, InStr(1, MyVal, "]") - (InStr(1, MyVal, "[") + 1))
MyArr(D1, D2) = Right(MyVal, Len(MyVal) - (InStr(1, MyVal, "=> ")) - 2)
End If
End If
Next
Range("A1:A1").Resize(D1 + 1, D2 + 1) = MyArr
Else
MsgBox "Nothing returned, Site might be down", vbOKOnly
End If
Application.EnableEvents = True
End If
End Sub