簡體   English   中英

如何將 C#.net 字典傳遞給 VBA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM