把VBA类放入行动

我的问题涉及到的问题: JSON导入到Excel

我理解这篇文章的大部分内容,但我不明白如何将它们放在一个excel模块或类模块中。 请有人帮助我了解如何组装这个野兽达到我的目的?

编辑29-5-14 @ 7.44AM –

这是我迄今为止所做的尝试:

安装为ClassModule syncWebRequest

'BEGIN CLASS syncWebRequest Private Const REQUEST_COMPLETE = 4 Private m_xmlhttp As Object Private m_response As String Private Sub Class_Initialize() Set m_xmlhttp = CreateObject("Microsoft.XMLHTTP") End Sub Private Sub Class_Terminate() Set m_xmlhttp = Nothing End Sub Property Get Response() As String Response = m_response End Property Property Get Status() As Long Status = m_xmlhttp.Status End Property Public Sub AjaxPost(Url As String, Optional postData As String = "") m_xmlhttp.Open "POST", Url, False m_xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" m_xmlhttp.setRequestHeader "Content-length", Len(postData) m_xmlhttp.setRequestHeader "Connection", "close" m_xmlhttp.send (postData) If m_xmlhttp.readyState = REQUEST_COMPLETE Then m_response = m_xmlhttp.responseText End If End Sub Public Sub AjaxGet(Url As String) m_xmlhttp.Open "GET", Url, False m_xmlhttp.setRequestHeader "Connection", "close" m_xmlhttp.send If m_xmlhttp.readyState = REQUEST_COMPLETE Then m_response = m_xmlhttp.responseText End If End Sub 'END CLASS syncWebRequest 

安装为模块testing

 Sub Test() Dim request As New syncWebRequest request.AjaxGet "http://crimson/php/SiteEnquiryAjax.php?action=aisFeed&brandCode=s&siteID=0625?format=json" Dim json As String json = request.Response End Sub 

我习惯于使用普通的模块,但是之前不需要使用类模块。 因此,我试图理解这一点,并把它翻译成符合我的要求,但是如果我把它变得比预期的要复杂的话,请原谅我。

我试图从返回JSON的本地web服务查询数据。 Web服务以下列forms返回基于ID(例如0656)的数据:

 {"total":"1","results":[{"brandName":"ABC","brandingName":"Cat","siteCategory":"Production","siteName":"Scrubbed","streetAddress":"ABC RD, SUBURB, VIC 3000","siteState":"VIC","phoneNumber":"03 0909 0909","mobileNumber":"0409 090 909","faxNumber":"03 9090 9090","applicationServer":"CAT0656ABC001","dateOpened":"1979-08-21","siteNotice":"","lastContact":"2014-05-19 04:36:31",}]} 

我的目标是把它放在一个电子表格中,用户可以input站点ID(例如0656),然后电子表格就可以用上面的例子来提取和响应数据。

编辑29-5-14 @ 8.42AM –

更新模块testing – 我的意图是testing链接问题中的parsing器exampled,但是当我现在运行macros时收到一个错误。 我的理解是,这可能是我想要实现的东西的缺失部分。 我现在已经注释掉了添加的项目来阻止错误的发生。

 Sub Test() Dim request As New syncWebRequest request.AjaxGet "http://crimson/php/SiteEnquiryAjax.php?action=aisFeed&brandCode=s&siteID=0625" Dim json As String json = request.Response 'Set clients = parser.Parse(request.Response) 'For Each client In clients 'Name = client("Name") 'State = client("siteState") 'street = client("Address")("Street") 'suburb = client("Address")("Suburb") 'city = client("Address")("City") 'Next End Sub 

编辑29-5-14 @ 9.40AM –

换句话说,我想打开这个: “url / SiteEnquiryAjax.php?action = aisFeed&brandCode = s&siteID = 0656”的HTTP结果

 {"total":"1","results":[{"brandName":"ABC","brandingName":"Cat","siteCategory":"Production","siteName":"Scrubbed","streetAddress":"ABC RD, SUBURB, VIC 3000","siteState":"VIC","phoneNumber":"03 0909 0909","mobileNumber":"0409 090 909","faxNumber":"03 9090 9090","applicationServer":"CAT0656ABC001","dateOpened":"1979-08-21","siteNotice":"","lastContact":"2014-05-19 04:36:31",}]} 

进入这个: Excel输出

Excel输出

不知道你正在收到的错误的具体细节,我以前使用过vba-json,我想你在使用它之前没有实例化parsing器:

 Dim parser As New JSONLib Set clients = parser.parse(Request.Response) 

就项目的devise而言,我认为你已经做好了将Request作为一个类分开,然后从一个模块发出请求。 我遇到了许多类似的问题,从Excel中访问Salesforce并创build了一个我认为可能有所帮助的库: Excel-REST 。 它遵循一个类似的想法,但将其分为三类:客户端,请求和响应。 这是一个例子:

 Sub RetrieveJSONSimple Dim Client As New RestClient Dim Response As RestResponse Set Response = Client.GetJSON("url...") If Response.Status = Ok Then ' Response.Data is parsed json For Each Client in Response.Data Name = Client("Name") State = Client("siteState") Street = Client("Address")("Street") Suburb = Client("Address")("Suburb") City = Client("Address")("City") Next Client End If End Sub Sub RetrieveJSONAdvanced Dim Client As New RestClient Client.BaseUrl = "http://crimson/php/" ' Can also setup authentication with HTTP Basic, OAuth, and others Dim Request As New RestRequest Request.Resource = "SiteEnquiryAjax.php?action=aisFeed&brandCode=s&siteID={SiteId}" Request.AddUrlSegment "SiteId", "0625" ' GET and json are default, but can be set Request.Method = httpGET Request.Format = json Dim Response As RestResponse Set Response = Client.Execute(Request) ' Process as before End Sub