C# Microsoft Interop Excel 1997-2003 VBA 宏:双击事件进入单元格不工作

C# Microsoft Interop Excel 1997-2003 VBA Macros: Double Click Event Into Cell Not Working

我们公司有一个旧的 Excel 1997-2003 VBA 应用程序 (.xls)。如果双击工作表中的特定单元格,则会执行宏。如果我手动打开文件并双击单元格,这就完全可以正常工作,然后执行宏。

但是,在我的 C# 代码中,我试图用 microsoft.office.interop.excel.application 对象打开 .xls。打开工作正常,但是当我双击单元格时,它们不执行宏而是跳转到单元格编辑...

这是双击单元格时执行的 VBA 子程序:

    Sub DblClickHandle()
   z = ActiveCell.Row
    Select Case Cells(1, 256)
        Case "1009":   'Bearbeitungs-Stati
            Call SchutzAus
            Select Case ActiveCell.Column
                Case 2:   'Position bearbeiten
                    Worksheets("AP-Bearbeitung").Activate
                    Call SchutzAus
                    Cells(z, 4) = Format$(Now, "DD.MM.YYYY")
                    Call SchutzEin
                    Select Case Cells(z, 2).FormulaR1C1
                        Case "Protokoll erzeugen"
                            If Existiert("Deckblatt") = True Then Call ReSet_AP
                            Call AP_Erstellen
                        Case "Export":
                            Call AP_Export
                        Case "Finanzierungsbestätigung"
                            Call CreateFinBest
                        Case "Ausdruck mit Preisen":
                            Call AP_Print(True)
                        Case "Ausdruck ohne Preise":
                            Call AP_Print(False)
                        Case "Ausdruck in PDF mit Preisen"
                            Call AP_PDF(True)
                        Case "Ausdruck in PDF ohne Preise"
                            Call AP_PDF(False)
                        Case "Einzelblattausdruck mit Preisen":
                            Call AP_DruckenEinzeln(True)
                        Case "Ausdruck mit Blattauswahl"
                            Call AP_Mehrfachdrucken
                        Case "Einzelblattausdruck ohne Preise":
                            Call AP_DruckenEinzeln(False)
                        Case "Laufzettel"
                            Call AP_Laufzettel
                        Case "Abtretung und Zahlungsanweisung"
                            Call CreateAbtZahAn
                        Case "Abtretung bei öffentl. Förderung"
                            Call CreateAbtZahAnÖ
                        Case Else
                            On Error GoTo errhandle779
                            Worksheets(Cells(z, 2).FormulaR1C1).Activate
                            On Error GoTo 0
                    End Select
                Case 1, 5:
                    If Cells(z, 10) Then
                        Cells(z, 5).FormulaR1C1 = ""
                      Else
                        Cells(z, 5) = Format$(Now, "DD.MM.YYYY")
                    End If
                Case 4:
                    If Len(Cells(z, 4).FormulaR1C1) > 2 Then
                        Cells(z, 4).FormulaR1C1 = ""
                      Else
                        Cells(z, 4) = Format$(Now, "DD.MM.YYYY")
                    End If
            End Select
            Call SchutzEin
        Case "1099":     'Pakete für Laufzettel
            Call SchutzAus
            If ActiveCell.FormulaR1C1 = "ý" Then
                ActiveCell.FormulaR1C1 = "¨"
                Call SchutzEin
                Exit Sub
            End If
            If ActiveCell.FormulaR1C1 = "¨" Then
                ActiveCell.FormulaR1C1 = "ý"
                Call SchutzEin
                Exit Sub
            End If
            Call SchutzEin
        Case "1999"
            Call BeiTasteEinfg
            Call SchutzAus
            Select Case ActiveCell.value
            Case "Kellerbaufirma":
               Cells(23, 1).value = "Keller fertig am"
            Case "Fa. Bodenplatte"
               Cells(23, 1).value = "Bodenplatte fertig am"
            Case "Keller fertig am"
               Cells(19, 1).value = "Kellerbaufirma"
            Case "Bodenplatte fertig am"
               Cells(19, 1).value = "Fa. Bodenplatte"
            Case Else:
            End Select
            Call SchutzEin
        Case Else:
            Call BeiTasteEinfg
    End Select
    Exit Sub
errhandle779:
    MsgBox Error()
    Resume Next
End Sub

我用谷歌搜索了所有内容以找到类似的问题,但没有找到任何内容。 你能帮我解决这个问题吗?

#Here is my C# code in which I am opening the .xls macro file with excel interop:

var xlapp = new Excel.Application();
xlapp.Visible = true;                        
xlapp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityByUI;
xlapp.EnableEvents = true;
xlapp.Workbooks.Open(@"\serverxy\bemuster\ap\" + "KV" + txtHv.Text + @"\" + "Ap.xls")

您可以先尝试将安全级别自动更改为低,而不是让用户定义它:

Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow;

如果这不起作用,请尝试 从您的 c# 代码调用启用 doubleClick 行为的宏:

var xlapp = new Excel.Application();
xlapp.Visible = true;                        
xlapp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow;
xlapp.EnableEvents = true;
xlapp.Workbooks.Open(@"\serverxy\bemuster\ap\" + "KV" + txtHv.Text + @"\" + "Ap.xls")

    string macro = "Module1.EnableRedirections";
    /// replace Module1 with whatever module you found the sub routine in

    try
    {
        xlapp.Run(macro);
    }
    catch (Exception ex)
    {
        // Some error handling
    }