2013-02-04 38 views

回答

1

一種方法是使用COM自動化接口,就像從VBA或VSTO那樣。請確保使用ExcelDnaUtil.Application作爲根的Application對象。從您從xlfCaller收到一個COM Range對象ExcelReference轉換,你可以嘗試(這是VB.NET版本):

Private Function ReferenceToRange(ByVal xlRef As ExcelReference) As Object 
    Dim strAddress As String = XlCall.Excel(XlCall.xlfReftext, xlRef, True) 
    ReferenceToRange = ExcelDnaUtil.Application.Range(strAddress) 
End Function 

如果你想堅持使用C API,你首先必須選擇正確的表格,然後選擇實際的單元格。所以,你可能有:

string myCellSheet = (string)XlCall.Excel(XlCall.xlSheetNm, myCell); 
XlCall.Excel(XlCall.xlcWorkbookSelect, new object[] { myCellSheet }); 
XlCall.Excel(XlCall.xlcFormulaGoto, myCell); 

您將無法更改工作表函數的選擇,所以我想你是從宏觀或帶狀處理程序調用此。

+0

感謝您的迴應!在C#中,我無法訪問ExcelDnaUtil.Application上的範圍方法,因爲它是對象類型的。我應該輸入什麼類型? – Franchesca

+0

哦,我明白了,我只是用動態:D – Franchesca

+0

這行'XlCall.Excel(XlCall.xlfReftext,xlRef,True)'正在轟炸。我不打算從工作表函數中更改選定內容,但我從工作表函數中獲取了xlfCaller。這可能是一個問題嗎? – Franchesca

1

有可能與ExcelDNA做到:

var activeCell = new ExcelReference(5, 5); 
ExcelAsyncUtil.QueueAsMacro(() => XlCall.Excel(XlCall.xlcSelect, activeCell)); 

「ExcelAsyncUtil.QueueAsMacro」就可以跳過去,它取決於從中調用Excel命令上下文。如果你從另一個Excel函數中調用它 - 你應該用QueueAsMacro包裝它

相關問題