2017-07-18 62 views

回答

2

不,你不能用VBA宏交互或COM從web插件加載項。請記住,Web加載項就像網頁一樣,因爲它們是沙盒式的,無法與操作系統或安裝的程序進行通信(至少沒有幫助程序或代理應用程序/庫)。

+0

OK。我看到我無法從OfficeJs VBA運行。這是否適用於從VBA Office.Js運行? –

+0

正確,VBA無法與Web插件通信或使用JavaScript for Office或Graph API –

+0

您的回答似乎有點誤導...我讀[這裏](http://rockthecode.io/blog/javascript-and- excel /),可以使用OfficeJS讀取和編輯範圍的值。因此,似乎可以在JS和VBA之間建立一個消息中繼。還有用於設置自定義XML部件的[setXml](https://dev.office.com/reference/add-ins/excel/customxmlpart)函數。這也可能用於VBA和JS之間的通信嗎? – Sancarn

0

這是未經測試,但我相信這些方針的東西會做的工作:

使用CustomXMLPart.dataNodeReplaced event

function addNodeReplacedEvent() { 
    Office.context.document.customXmlParts.getByIdAsync("vbaJSBridge", function (result) { 
     var xmlPart = result.value; 
     xmlPart.addHandlerAsync(Office.EventType.DataNodeReplaced, function (eventArgs) { 
      // do stuff with xmlPart 
      // here you should be able to receive information sent from VBA, 
      // and return any data necessary. 
     }); 
    }); 
} 

在VBA中使用:

Dim part As CustomXMLPart 

' Returns a custom xml part by its ID: 
Set part= ActiveDocument.CustomXMLParts.SelectByID("vbaJSBridge") 

part.LoadXML("<data id="vbaJSBridge">some data</data>") 

至於說我不確定這是否會完全工作,但這是一個很好的(有點哈克)做這項工作的方法。或者,您可以使用VBA設置HTTP服務器,您可以通過JavaScript發送HTTP請求。要做到這一點,你必須使用Mswsock.dll並調用accept方法,(我認爲)。 OK。