Skip to content

Commit 11c0282

Browse files
committed
Added GET error checks, changed ArrayTable() for errors
Added new module with a GetDataFromURL function, does GET commands now. Added tests for the ModFunctions module. Change ArrayTable function for empty results, see issue #2
1 parent 00e373d commit 11c0282

12 files changed

+221
-93
lines changed

ModExchBittrex.bas

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,12 @@ End Sub
3333
Function PublicBittrex(Method As String, Optional MethodOptions As String) As String
3434

3535
'https://bittrex.com/home/api
36+
Dim Url As String
3637
PublicApiSite = "https://bittrex.com"
3738
urlPath = "/api/v1.1/public/" & Method & MethodOptions
3839
Url = PublicApiSite & urlPath
3940

40-
' Instantiate a WinHttpRequest object and open it
41-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
42-
objHTTP.Open "GET", Url
43-
objHTTP.Send
44-
objHTTP.WaitForResponse
45-
PublicBittrex = objHTTP.ResponseText
46-
Set objHTTP = Nothing
41+
PublicBittrex = GetDataFromURL(Url, "GET")
4742

4843
End Function
4944
Function PrivateBittrex(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -60,11 +55,11 @@ APIsign = ComputeHash_C("SHA512", TradeApiSite & postdata, secretkey, "STRHEX")
6055

6156
' Instantiate a WinHttpRequest object and open it
6257
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
63-
Debug.Print "POST: " & TradeApiSite & postdata
58+
'Debug.Print "POST: " & TradeApiSite & postdata
6459
objHTTP.Open "POST", TradeApiSite & postdata, False
65-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
66-
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
67-
objHTTP.SetRequestHeader "apisign", APIsign
60+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
61+
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
62+
objHTTP.setRequestHeader "apisign", APIsign
6863
objHTTP.Send (postdata)
6964

7065
objHTTP.WaitForResponse

ModExchCoinone.bas

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,12 @@ End Sub
3333
Function PublicCoinone(Method As String, Optional MethodOptions As String) As String
3434

3535
'https://Coinone.com/home/api
36+
Dim Url As String
3637
PublicApiSite = "https://api.coinone.co.kr/"
3738
urlPath = Method & "/" & MethodOptions
3839
Url = PublicApiSite & urlPath
3940

40-
' Instantiate a WinHttpRequest object and open it
41-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
42-
objHTTP.Open "GET", Url
43-
objHTTP.Send
44-
objHTTP.WaitForResponse
45-
PublicCoinone = objHTTP.ResponseText
46-
Set objHTTP = Nothing
41+
PublicCoinone = GetDataFromURL(Url, "GET")
4742

4843
End Function
4944
Function PrivateCoinone(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -73,9 +68,9 @@ APIsign = ComputeHash_C("SHA512", Base64Encode(postdata_json_txt), secretkey, "S
7368
'' Instantiate a WinHttpRequest object and open it
7469
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
7570
objHTTP.Open "POST", Url, False
76-
objHTTP.SetRequestHeader "Content-Type", "application/json"
77-
objHTTP.SetRequestHeader "X-COINONE-PAYLOAD", postdata64
78-
objHTTP.SetRequestHeader "X-COINONE-SIGNATURE", APIsign
71+
objHTTP.setRequestHeader "Content-Type", "application/json"
72+
objHTTP.setRequestHeader "X-COINONE-PAYLOAD", postdata64
73+
objHTTP.setRequestHeader "X-COINONE-SIGNATURE", APIsign
7974
objHTTP.Send (postdata)
8075

8176
objHTTP.WaitForResponse

ModExchCryptopia.bas

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,12 @@ End Sub
3333
Function PublicCryptopia(Method As String, Optional MethodOptions As String) As String
3434

3535
'https://www.cryptopia.co.nz/forum/Thread/255
36-
36+
Dim Url As String
3737
PublicApiSite = "https://www.cryptopia.co.nz"
3838
urlPath = "/api/" & Method & MethodOptions
3939
Url = PublicApiSite & urlPath
4040

41-
' Instantiate a WinHttpRequest object and open it
42-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
43-
objHTTP.Open "GET", Url
44-
objHTTP.Send
45-
objHTTP.WaitForResponse
46-
PublicCryptopia = objHTTP.ResponseText
47-
Set objHTTP = Nothing
41+
PublicCryptopia = GetDataFromURL(Url, "GET")
4842

4943
End Function
5044
Function PrivateCryptopia(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -76,9 +70,9 @@ HeaderValue = "amx " & apikey & ":" & hmacSignature & ":" & NonceUnique
7670
' Instantiate a WinHttpRequest object and open it
7771
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
7872
objHTTP.Open "POST", Url, False
79-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
80-
objHTTP.SetRequestHeader "Content-Type", "application/json"
81-
objHTTP.SetRequestHeader "Authorization", HeaderValue
73+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
74+
objHTTP.setRequestHeader "Content-Type", "application/json"
75+
objHTTP.setRequestHeader "Authorization", HeaderValue
8276
objHTTP.Send (postdataJsonTxt)
8377

8478
objHTTP.WaitForResponse

ModExchKraken.bas

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,12 @@ End Sub
3535
Function PublicKraken(Method As String, Optional MethodOptions As String) As String
3636

3737
'https://www.kraken.com/en-us/help/api#public-market-data
38-
38+
Dim Url As String
3939
PublicApiSite = "https://api.kraken.com"
4040
urlPath = "/0/public/" & Method & MethodOptions
4141
Url = PublicApiSite & urlPath
4242

43-
' Instantiate a WinHttpRequest object and open it
44-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
45-
objHTTP.Open "GET", Url
46-
objHTTP.Send
47-
objHTTP.WaitForResponse
48-
PublicKraken = objHTTP.ResponseText
49-
Set objHTTP = Nothing
43+
PublicKraken = GetDataFromURL(Url, "GET")
5044

5145
End Function
5246
Function PrivateKraken(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -70,10 +64,10 @@ APIsign = ComputeHash_C("SHA512", urlPath & ComputeHash_C("SHA256", NonceUnique
7064
' Instantiate a WinHttpRequest object and open it
7165
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
7266
objHTTP.Open "POST", Url, False
73-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
74-
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
75-
objHTTP.SetRequestHeader "API-Key", apikey
76-
objHTTP.SetRequestHeader "API-Sign", APIsign
67+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
68+
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
69+
objHTTP.setRequestHeader "API-Key", apikey
70+
objHTTP.setRequestHeader "API-Sign", APIsign
7771
objHTTP.Send (postdata)
7872

7973
objHTTP.WaitForResponse

ModExchLiqui.bas

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,12 @@ End Sub
3434
Function PublicLiqui(Method As String, Optional MethodOptions As String) As String
3535

3636
'https://www.Liqui.com/en-us/help/api#public-market-data
37-
37+
Dim Url As String
3838
PublicApiSite = "https://api.liqui.io"
3939
urlPath = "/api/3/" & Method & MethodOptions
4040
Url = PublicApiSite & urlPath
4141

42-
' Instantiate a WinHttpRequest object and open it
43-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
44-
objHTTP.Open "GET", Url
45-
objHTTP.Send
46-
objHTTP.WaitForResponse
47-
PublicLiqui = objHTTP.ResponseText
48-
Set objHTTP = Nothing
42+
PublicLiqui = GetDataFromURL(Url, "GET")
4943

5044
End Function
5145
Function PrivateLiqui(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -64,18 +58,18 @@ urlPath = "/tapi/"
6458
postdata = "method=" & Method & MethodOptions & "&nonce=" & NonceUnique
6559
Url = TradeApiSite & urlPath
6660
APIsign = ComputeHash_C("SHA512", postdata, secretkey, "STRHEX")
67-
Debug.Print postdata
68-
Debug.Print Url
69-
Debug.Print apikey
70-
Debug.Print APIsign
61+
'Debug.Print postdata
62+
'Debug.Print Url
63+
'Debug.Print apikey
64+
'Debug.Print APIsign
7165

7266
' Instantiate a WinHttpRequest object and open it
7367
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
7468
objHTTP.Open "POST", Url, False
75-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
76-
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
77-
objHTTP.SetRequestHeader "Key", apikey
78-
objHTTP.SetRequestHeader "Sign", APIsign
69+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
70+
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
71+
objHTTP.setRequestHeader "Key", apikey
72+
objHTTP.setRequestHeader "Sign", APIsign
7973
objHTTP.Send (postdata)
8074

8175
objHTTP.WaitForResponse

ModExchPoloniex.bas

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,12 @@ End Sub
3434
Function PublicPoloniex(Method As String, Optional MethodOptions As String) As String
3535

3636
'https://poloniex.com/support/api/
37-
37+
Dim Url As String
3838
PublicApiSite = "https://poloniex.com"
3939
urlPath = "/public?command=" & Method & MethodOptions
4040
Url = PublicApiSite & urlPath
4141

42-
' Instantiate a WinHttpRequest object and open it
43-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
44-
objHTTP.Open "GET", Url
45-
objHTTP.Send
46-
objHTTP.WaitForResponse
47-
PublicPoloniex = objHTTP.ResponseText
48-
Set objHTTP = Nothing
42+
PublicPoloniex = GetDataFromURL(Url, "GET")
4943

5044
End Function
5145
Function PrivatePoloniex(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
@@ -66,10 +60,10 @@ APIsign = ComputeHash_C("SHA512", postdata, secretkey, "STRHEX")
6660
' Instantiate a WinHttpRequest object and open it
6761
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
6862
objHTTP.Open "POST", Url, False
69-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
70-
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
71-
objHTTP.SetRequestHeader "Key", apikey
72-
objHTTP.SetRequestHeader "Sign", APIsign
63+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
64+
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
65+
objHTTP.setRequestHeader "Key", apikey
66+
objHTTP.setRequestHeader "Sign", APIsign
7367
objHTTP.Send (postdata)
7468

7569
objHTTP.WaitForResponse

ModExchWEXnz.bas

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Debug.Print PublicWEXnz("ticker", "/ltc_btc-btc_eur")
2424
t1 = DateToUnixTime("1/1/2014")
2525
t2 = DateToUnixTime("1/1/2018")
2626

27-
Debug.Print t1, t2
27+
'Debug.Print t1, t2
2828
Debug.Print PrivateWEXnz("getInfo", apikey, secretkey)
2929
'{"success":1,"return":{"funds":{"usd":0,"btc":0.14,"ltc":0,"nmc":0, etc...
3030
Debug.Print PrivateWEXnz("TradeHistory", apikey, secretkey, "&since=" & t1 & "&end=" & t2)
@@ -34,24 +34,18 @@ End Sub
3434

3535
Function PublicWEXnz(Method As String, Optional MethodOptions As String) As String
3636

37-
'https://btc-e.com/api/3/docs
38-
37+
'https://wex.nz/api/3/docs
38+
Dim Url As String
3939
PublicApiSite = "https://wex.nz"
4040
urlPath = "/api/3/" & Method & MethodOptions
4141
Url = PublicApiSite & urlPath
4242

43-
' Instantiate a WinHttpRequest object and open it
44-
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
45-
objHTTP.Open "GET", Url
46-
objHTTP.Send
47-
objHTTP.WaitForResponse
48-
PublicWEXnz = objHTTP.ResponseText
49-
Set objHTTP = Nothing
43+
PublicWEXnz = GetDataFromURL(Url, "GET")
5044

5145
End Function
5246
Function PrivateWEXnz(Method As String, apikey As String, secretkey As String, Optional MethodOptions As String) As String
5347

54-
'https://btc-e.com/tapi/docs
48+
'https://wex.nz/tapi/docs
5549
Dim NonceUnique As String
5650

5751
'BTC-e wants a 10-digit Nonce
@@ -64,10 +58,10 @@ APIsign = ComputeHash_C("SHA512", postdata, secretkey, "STRHEX")
6458
' Instantiate a WinHttpRequest object and open it
6559
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
6660
objHTTP.Open "POST", TradeApiSite, False
67-
objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
68-
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
69-
objHTTP.SetRequestHeader "Key", apikey
70-
objHTTP.SetRequestHeader "Sign", APIsign
61+
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
62+
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
63+
objHTTP.setRequestHeader "Key", apikey
64+
objHTTP.setRequestHeader "Sign", APIsign
7165
objHTTP.Send (postdata)
7266

7367
objHTTP.WaitForResponse

ModFunctions.bas

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,42 @@
11
Attribute VB_Name = "ModFunctions"
2+
'Functions in module:
3+
'DateToUnixTime - retuns the UnixTime of a date/time
4+
'UnixTimeToDate - returns the date/time of a UnixTime
5+
'TransposeArr - Custom transpose function, worksheetfunction.transpose won't handle long strings
6+
'URLEncode - especially for Excel 2013 and before, afterwards it's a standard function
7+
'Source: https://github.com/krijnsent/crypto_vba
8+
Sub TestFunctions()
9+
10+
Debug.Print DateToUnixTime(#4/26/2017#)
11+
'1493164800
12+
Debug.Print DateToUnixTime(Now)
13+
'e.g. 1511958343
14+
Debug.Print UnixTimeToDate(1493164800)
15+
'26-4-2017
16+
Debug.Print UnixTimeToDate(1511958343)
17+
'29-11-2017 12:25:43
18+
19+
' Declare a two dimensional array
20+
' Fill the array with text made up of i and j values
21+
Dim TestArr(1 To 3, 1 To 2) As Variant
22+
Dim i As Long, j As Long
23+
For i = LBound(TestArr) To UBound(TestArr)
24+
For j = LBound(TestArr, 2) To UBound(TestArr, 2)
25+
TestArr(i, j) = CStr(i) & ":" & CStr(j)
26+
Next j
27+
Next i
28+
FlipArr = TransposeArr(TestArr)
29+
Debug.Print TestArr(1, 2)
30+
Debug.Print FlipArr(2, 1)
31+
32+
33+
Debug.Print URLEncode("http://www.github.com/")
34+
'http%3A%2F%2Fwww.github.com%2F
35+
Debug.Print URLEncode("https://github.com/search?q=crypto_vba&type=")
36+
'https%3A%2F%2Fgithub.com%2Fsearch%3Fq%3Dcrypto_vba%26type%3D
37+
38+
End Sub
39+
240
Function DateToUnixTime(dt) As Long
341
DateToUnixTime = DateDiff("s", "1/1/1970", dt)
442
End Function

ModHash.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Function ComputeHash_C(Meth As String, ByVal clearText As String, ByVal Key As S
5252
ElseIf Meth = "SHA256" Then
5353
Set SHAhasher = CreateObject("System.Security.Cryptography.SHA256Managed")
5454
ElseIf Meth = "SHA384" Then
55-
Set SHAhasher = CreateObject("System.Security.Cryptography.SHA256Managed")
55+
Set SHAhasher = CreateObject("System.Security.Cryptography.SHA384Managed")
5656
ElseIf Meth = "MD5" Then
5757
Set SHAhasher = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
5858
Else

ModJSON.bas

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ Next
124124
'4 -- 3 -- 1 -- 1924,41 -- VAL
125125
'4 -- 4 -- 1 -- 1924,41522 -- VAL
126126

127-
128127
End Sub
129128

130129
Sub TestArrayTable()
@@ -182,24 +181,46 @@ Debug.Print Tbl(4, 4)
182181
'1924,41
183182
'Sht.Range("B21").Resize(UBound(Tbl, 2), UBound(Tbl, 1)) = WorksheetFunction.Transpose(Tbl)
184183

185-
186-
'Poloniex deposit/withdrawal
184+
'Poloniex deposit/withdrawal, no header output
187185
JsonResponse = "{""deposits"":[{""currency"":""BTC"",""address"":""DEP1"",""amount"":""0.01006132"",""confirmations"":10,""txid"":""17f819a91369a9ff6c4a34216d434597cfc1b4a3d0489b46bd6f924137a47701"",""timestamp"":1399305798,""status"":""COMPLETE""},{""currency"":""BTC"",""address"":""DEP2"",""amount"":""0.00404104"",""confirmations"":10,""txid"":""7acb90965b252e55a894b535ef0b0b65f45821f2899e4a379d3e43799604695c"",""timestamp"":1399245916,""status"":""COMPLETE""}],""withdrawals"":[{""withdrawalNumber"":134933,""currency"":""BTC"",""address"":""1N2i5n8DwTGzUq2Vmn9TUL8J1vdr1XBDFg"",""amount"":""5.00010000"", ""timestamp"":1399267904,""status"":""COMPLETE: 36e483efa6aff9fd53a235177579d98451c4eb237c210e66cd2b9a2d4a988f8e"",""ipAddress"":""IP192""}]}"
188186
Set Json = JsonConverter.ParseJson(JsonResponse)
189187
ResArr = JsonToArray(Json)
190188
Tbl = ArrayTable(ResArr, False)
191189
Debug.Print Tbl(1, 2)
192190
Debug.Print Tbl(4, 2)
191+
'deposits
192+
'DEP2
193193

194-
'Remove last element
194+
'Test no header reply
195195
JsonResponse = "{""error"":[],""result"":{""XXBTZEUR"":[[1492606800,""1121.990"",""1124.912"",""1119.680"",""1124.912"",""1122.345"",""352.76808800"",602],[1492610400,""1124.499"",""1124.980"",""1119.680"",""1122.000"",""1122.194"",""218.62127780"",713],[1492614000,""1121.311"",""1122.900"",""1120.501"",""1122.899"",""1122.266"",""445.46426003"",851],[1492617600,""1122.894"",""1124.499"",""1120.710"",""1123.291"",""1123.068"",""253.55336370"",860],[1492621200,""1124.406"",""1126.000"",""1123.017"",""1125.990"",""1124.775"",""234.27612705"",918],[1492624800,""1125.610"",""1126.231"",""1123.010"",""1126.229"",""1125.453"",""243.42246123"",772]],""last"":1495191600}}"
196196
Set Json = JsonConverter.ParseJson(JsonResponse)
197197
Set JsonRes = Json("result")
198198
ResArr = JsonToArray(Json)
199199
Tbl = ArrayTable(ResArr, False)
200200
Debug.Print Tbl(1, 2)
201201
Debug.Print Tbl(4, 4)
202+
'result
203+
'1492617600
202204

205+
'Empty data set returned 1
206+
JsonResponse = "{""success"":true,""message"":"""",""result"":[]}"
207+
Set Json = JsonConverter.ParseJson(JsonResponse)
208+
ResArr = JsonToArray(Json)
209+
Tbl = ArrayTable(ResArr, True)
210+
Debug.Print Tbl(1, 2)
211+
Debug.Print Tbl(3, 2)
212+
'Waar
213+
'0
214+
215+
'Empty data set returned 2
216+
JsonResponse = "{""success"":false,""message"":""APISIGN_NOT_PROVIDED"",""result"":null}"
217+
Set Json = JsonConverter.ParseJson(JsonResponse)
218+
ResArr = JsonToArray(Json)
219+
Tbl = ArrayTable(ResArr, True)
220+
Debug.Print Tbl(1, 2)
221+
Debug.Print Tbl(2, 2)
222+
'Onwaar
223+
'APISIGN_NOT_PROVIDED
203224

204225
End Sub
205226

@@ -367,7 +388,8 @@ For rw = LBound(ArrIn, 2) To UBound(ArrIn, 2)
367388
Lvl = Val(ArrIn(1, rw))
368389
If Lvl < MaxD And Lvl > 0 Then
369390
TblHeaders.Add "GROUP_" & Lvl, "GROUP_" & Lvl
370-
ElseIf Lvl = MaxD And ArrIn(5, rw) = "VAL" Then
391+
'ElseIf Lvl = MaxD And ArrIn(5, rw) = "VAL" Then
392+
ElseIf Lvl = MaxD Then
371393
If Val(ArrIn(3, rw)) > 0 Then
372394
TblHeaders.Add "VAL_" & ArrIn(3, rw), "VAL_" & ArrIn(3, rw)
373395
Else

0 commit comments

Comments
 (0)