0

我有 VS 2012,主项目作为 Windows 窗体应用程序,添加项目作为 Excel 工作簿。我在两个项目中都有一些完全相同的代码,因此我试图通过共享该代码来节省时间。

从我的 excel 项目中,我添加了对我的 windows 窗体项目的引用并导入了命名空间。我可以访问我的主项目的公共功能,但我似乎无法访问我的公共潜艇。

我还尝试创建一个模块,在项目之间添加一个链接,但这会导致我也在两个地方更新代码。此外,我认为创建链接也可能会导致部署时出现一些问题。

例如,在我的 Windows 窗体项目中,我想从我的第二个项目中访问以下内容

Public Sub closeXLApp()

    'This sub is called to close the application without
    'saving any changes to the workbook. The sub closes
    'the app, workbook and sheet and performs some garbage clean up
    'as well making sure that the opened Excel instance is cleared from memory.

    xlBook.Close(SaveChanges:=False)
    xlApp.Quit()

    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

    xlSheet = Nothing
    xlBook = Nothing
    xlApp = Nothing

    GC.Collect()

End Sub

在我的第二个项目中,我创建了一个引用并将命名空间导入为:

Imports Compensation_Template_Welcome_Page

因此,当我尝试从我的第二个项目中访问上述公共子时:

Private Sub btnMinCloseProject_Click(sender As Object, e As EventArgs) Handles btnMinCloseProject.Click

    'This procedure runs when the btnMinCloseProject is clicked. The
    'procedure calls the function to close workbook without saving changes.

    closeXLApp()

End Sub

我收到一条错误消息,指出子组件由于其保护级别而未声明或不可访问。

有没有更好的方法来实现这一点?即使是一条更长的路线,我只是希望它从长远来看让它变得高效。

谢谢

4

1 回答 1

0

你的 subcloseXLApp()不是静态的(共享的),所以你需要创建一个包含这个 sub 的类的实例,然后调用 sub。

于 2013-10-30T03:29:58.077 回答