2

我通过 WCF Web 服务创建了一个方法。我已经上传到我的服务器了。我想做的是在 Excel VBA 宏中调用该方法。是否可以?

就像是:

Dim client As DaybookServicesClient = New DaybookServicesClient()
' Use the 'client' variable to call operations on the service.

' Calls my method
client.ExecuteSQLJob()

' Always close the client.
client.Close()

如何在 Excel VBA 中引用我的服务?

4

2 回答 2

2

一种方法是创建 WebGet wcf 服务,服务将返回 adorecordset xml,在宏上您可以使用以下代码获取记录集

    Public Function GetRSFromString(sXML As String) As Object
   Dim oStream As Object, oRecordset As Object
   Set oStream = CreateObject("ADODB.Stream")
   oStream.Open
   oStream.WriteText sXML
   oStream.Position = 0
   Set oRecordset = CreateObject("ADODB.Recordset")
   oRecordset.Open oStream
   oStream.Close
   Set oStream = Nothing
   Set GetRSFromString = oRecordset
   Set oRecordset = Nothing
End Function


Public Function GetSoapRequest()
    Dim strResult As String
    Dim xmlhtp As Object, xmlDoc As Object, oRecordSetFromXML As Object
    Set xmlhtp = CreateObject("msxml2.xmlhttp.6.0")
    With xmlhtp
            .Open "get", "http://[server]/ServiceName.svc/FunctionName", False
            .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            .Send
            Set xmlDoc = CreateObject("msxml2.DOMDocument.6.0")
            strResult = .responseText
            xmlDoc.loadXML strResult
            Set oRecordSetFromXML = AdoFunction .GetRSFromString(xmlDoc.Text)
    End With
    Set xmlDoc = Nothing
    Set xmlhtp = Nothing               
End Function
于 2012-06-22T12:30:54.943 回答
0

您可以使用Web 服务参考工具从 excel 中调用 Web 服务,为您的服务生成代理,然后在 VBA 代码中进行调用。

但是,由于 VB 和 Java(托管服务)之间的互操作性,我之前曾尝试过使其正常工作并失败了。

如果您的呼叫是一种方式(VBA 代码不需要响应),最好让 VBA 代码通过 msmq 向中介服务发送消息,然后由中介服务代表您拨打电话。这是我最终使用的解决方案。

于 2012-06-22T11:55:17.300 回答