[英]How to pass a C#.net Dictionary to VBA
我正在嘗試將字典從 c# 傳遞給 vba,但發生此錯誤
System.Runtime.InteropServices.COMException: 'Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))'
我也嘗試將我的字符串列表轉換為 vb 集合,但發生了同樣的錯誤。 這是我的代碼
private void btn_macrorunner_Click(object sender, EventArgs e)
{
Dictionary<string, string> xlist_dictvb = new Dictionary<string, string>();
//xlist_names has been properly initialized and already has some items
xlist_names.ForEach(x => xlist_dictvb.Add(x, x));
ExcelFire(xlist_dictvb);
}
private void ExcelFire(Dictionary<string, string> pcoll = null)
{
//~~> Define your Excel Objects
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook;
//~~> Start Excel and open the workbook.
xlWorkBook = xlApp.Workbooks.Open(@"C:\Users\Hutanginamo\Documents\xlkalat\0928ExcelFile.xlsm");
if(pcoll != null)
{
//calls Sub ShowDict(pdict1 As Dictionary)
xlApp.Run("ShowDict", pcoll); //WHERE ERROR OCCURS
}
//~~> Clean-up: Close the workbook
xlWorkBook.Close(false);
//~~> Quit the Excel Application
xlApp.Quit();
//~~> Clean Up
ReleaseObject(xlApp);
ReleaseObject(xlWorkBook);
}
這是我的 vba 代碼
Sub ShowDict(pdict1 As Dictionary)
Dim x As Variant
For Each x In pdict1.keys
MsgBox (pdict1.Item(x))
Next
End Sub
為了實現你想要的,你必須通過正確的字典。 C#
字典不能像這樣在VBA
使用。 實現您想要的最簡單方法是在C#
使用VBA
字典,然后傳遞它。
請參閱此示例。
C# 代碼
Scripting.Dictionary dict = new Scripting.Dictionary();
dict.Add("Apples", 50);
dict.Add("Oranges", 60);
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook;
// ~~> Opens an existing Workbook. Change path and filename as applicable
xlWorkBook = xlApp.Workbooks.Open("C:\\Sample.xlsm");
// ~~> Display Excel
xlApp.Visible = true;
xlApp.Run("ShowDict", dict);
VBA 代碼
Sub ShowDict(pdict1 As Dictionary)
Dim x As Variant
For Each x In pdict1.keys
MsgBox (pdict1.Item(x))
Next
End Sub
C# 中的參考
VBA 中的參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.