在 VBA 中的单元格中获取宏的结果
Get result of Macro in the cell in VBA
我的要求
当我 运行 下面的代码时,我会立即 window 得到它的结果,因为我在 最后第二行代码中使用 Debug.Print (cookieValues)
,但我需要该结果出现在 Sheet1
的 A1
单元格中。
这可能是一个基本问题,但我已经在互联网上完成了所有研究,但我无法得到它,因为可能有用于搜索它的技术词汇,而且作为 VBA 我的新手我不知道。
我用 Msgbox (cookieValues)
代替了 Debug.Print (cookieValues)
,因为我认为首先我会将值放入 msgbox,然后将其放入单元格 A1,但那也失败了。
Any help you can give as an experienced VBA person OR any recommended resources that can help me to get result in the cell.
我的代码的作用
它从站点获取 cookie 值并给出如下所示的输出结果
代码
Public Function NSEDataCall(website, setCookies) As String
Dim XMLHTTP As WinHttp.WinHttpRequest
'Initialize XMLHttp Object
'Use the best/proper XMLHttp object available on your system
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") ' needs Microsoft WinHTTP Services 5.1 reference
' XMLHTTP.Option(WinHttpRequestOption_EnableRedirects) = False ' WinHttpRequestOption_EnableRedirects=6
XMLHTTP.Open "GET", website, False
' Set headers.
XMLHTTP.setRequestHeader "REFERER", website
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
XMLHTTP.setRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
XMLHTTP.setRequestHeader "Accept-Language", "en-us,en;q=0.5"
XMLHTTP.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
' Set cookie value - used for second call
If Len(setCookies) > 0 Then
XMLHTTP.setRequestHeader "cookie", setCookies
Else
End If
XMLHTTP.send
If Len(setCookies) > 0 Then
' Get response headers
response = XMLHTTP.getAllResponseHeaders
' Debug.Print response
' Split by new line
responseArray = Split(response, vbCrLf)
' Debug.Print responseArray(7)
' Helps to identify dataType - output comes as code numbers
' MsgBox (VarType(Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1))
' Return the sv_bm cookie in response array from indices 7 (indices start from 0)
NSEDataCall = setCookies & "; " & Trim(Split(Split(responseArray(7), ";")(0), ":")(1))
Else
' Get response headers
response = XMLHTTP.getAllResponseHeaders
' Debug.Print response
' Split by new line
responseArray = Split(response, vbCrLf)
' Helps to identify dataType - output comes as code numbers
' MsgBox (VarType(Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1))
' Return the cookies in response array from indices 5 to 9
NSEDataCall = Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(7), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(8), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(9), ";")(0), ":")(1))
'Debug.Print (responseArray(5) + responseArray(6))
End If
End Function
' My Macro
Sub GetNSECookies()
Dim website As String
Dim cookieValues As String
Dim website2 As String
Dim cookieValuesFinal As String
' First call
website = "https://www.nseindia.com/market-data/securities-lending-and-borrowing"
cookieValues = NSEDataCall(website, cookieValues)
' Debug.Print (cookieValues)
' Second call for sv_bm cookie
website = "https://www.nseindia.com/market-data/securities-lending-and-borrowing"
cookieValues = NSEDataCall(website, cookieValues)
'Shows value in Immediate window
Debug.Print (cookieValues)
End Sub
立即显示代码的结果window
nsit=p8XRMHoQSM5uEQUM7XIJdT8B; nseappid=eyJhbGciOiJIUzI1NiIsInUl2PkrpgUZp9w8r1UF-yXGo4Os; AKA_A2=A; ak_bmsc=520CE4F35658A3B15048CCCE60A4E7547D38DEAjbZNKcjEdm4LTLidgmXX0=; bm_mi=C5AE845425DB55CAB9626B7A4DD0F7FD~D8U6FxMuj0HFHR1iPY=; bm_sv=E2881456097AB72A45E379FB86952E6f7nV/M=
在此先感谢您!
将这一行 Debug.Print (cookieValues)
替换为
Sheets("Sheet1").Range("A1")= cookieValues
我的要求
当我 运行 下面的代码时,我会立即 window 得到它的结果,因为我在 最后第二行代码中使用 Debug.Print (cookieValues)
,但我需要该结果出现在 Sheet1
的 A1
单元格中。
这可能是一个基本问题,但我已经在互联网上完成了所有研究,但我无法得到它,因为可能有用于搜索它的技术词汇,而且作为 VBA 我的新手我不知道。
我用 Msgbox (cookieValues)
代替了 Debug.Print (cookieValues)
,因为我认为首先我会将值放入 msgbox,然后将其放入单元格 A1,但那也失败了。
Any help you can give as an experienced VBA person OR any recommended resources that can help me to get result in the cell.
我的代码的作用
它从站点获取 cookie 值并给出如下所示的输出结果
代码
Public Function NSEDataCall(website, setCookies) As String
Dim XMLHTTP As WinHttp.WinHttpRequest
'Initialize XMLHttp Object
'Use the best/proper XMLHttp object available on your system
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") ' needs Microsoft WinHTTP Services 5.1 reference
' XMLHTTP.Option(WinHttpRequestOption_EnableRedirects) = False ' WinHttpRequestOption_EnableRedirects=6
XMLHTTP.Open "GET", website, False
' Set headers.
XMLHTTP.setRequestHeader "REFERER", website
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
XMLHTTP.setRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
XMLHTTP.setRequestHeader "Accept-Language", "en-us,en;q=0.5"
XMLHTTP.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
' Set cookie value - used for second call
If Len(setCookies) > 0 Then
XMLHTTP.setRequestHeader "cookie", setCookies
Else
End If
XMLHTTP.send
If Len(setCookies) > 0 Then
' Get response headers
response = XMLHTTP.getAllResponseHeaders
' Debug.Print response
' Split by new line
responseArray = Split(response, vbCrLf)
' Debug.Print responseArray(7)
' Helps to identify dataType - output comes as code numbers
' MsgBox (VarType(Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1))
' Return the sv_bm cookie in response array from indices 7 (indices start from 0)
NSEDataCall = setCookies & "; " & Trim(Split(Split(responseArray(7), ";")(0), ":")(1))
Else
' Get response headers
response = XMLHTTP.getAllResponseHeaders
' Debug.Print response
' Split by new line
responseArray = Split(response, vbCrLf)
' Helps to identify dataType - output comes as code numbers
' MsgBox (VarType(Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1))
' Return the cookies in response array from indices 5 to 9
NSEDataCall = Trim(Split(Split(responseArray(5), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(6), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(7), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(8), ";")(0), ":")(1)) & "; " & Trim(Split(Split(responseArray(9), ";")(0), ":")(1))
'Debug.Print (responseArray(5) + responseArray(6))
End If
End Function
' My Macro
Sub GetNSECookies()
Dim website As String
Dim cookieValues As String
Dim website2 As String
Dim cookieValuesFinal As String
' First call
website = "https://www.nseindia.com/market-data/securities-lending-and-borrowing"
cookieValues = NSEDataCall(website, cookieValues)
' Debug.Print (cookieValues)
' Second call for sv_bm cookie
website = "https://www.nseindia.com/market-data/securities-lending-and-borrowing"
cookieValues = NSEDataCall(website, cookieValues)
'Shows value in Immediate window
Debug.Print (cookieValues)
End Sub
立即显示代码的结果window
nsit=p8XRMHoQSM5uEQUM7XIJdT8B; nseappid=eyJhbGciOiJIUzI1NiIsInUl2PkrpgUZp9w8r1UF-yXGo4Os; AKA_A2=A; ak_bmsc=520CE4F35658A3B15048CCCE60A4E7547D38DEAjbZNKcjEdm4LTLidgmXX0=; bm_mi=C5AE845425DB55CAB9626B7A4DD0F7FD~D8U6FxMuj0HFHR1iPY=; bm_sv=E2881456097AB72A45E379FB86952E6f7nV/M=
在此先感谢您!
将这一行 Debug.Print (cookieValues)
替换为
Sheets("Sheet1").Range("A1")= cookieValues