2016-07-24 136 views
1

我想用Vb.Net创建一个Excel加载项。我已经在VS2010中开始了一个Excel 2007外接程序项目。可悲的是,我对vb.net并不擅长;我在这方面多一个VB6开发人员,我ThisAddin.vb代码:如何在VB.Net中开发我自己的Excel加载项

Public Class ThisAddin 

    Private Sub ThisAddIn_Startup() Handles Me.Startup 

    End Sub 

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown 

    End Sub 

    ' test function; simple 
    Public Function getRowCount() As Long 
     Dim thisWB As Workbook = Me.Application.ThisWorkbook 
     Dim activWS As Worksheet 
     activWS = thisWB.ActiveSheet 
     Return activWS.UsedRange.Rows.Count 
    End Function 
End Class 

我还添加了一个功能区项目(通过添加新项...菜单选项)在设计模式(不是XML ) - 然后添加一个按钮。然后我去编写,并试图调用函数,我得到这个错误使用时:

MsgBox(Globals.ThisAddIn.getRowCount()) 

这是我从这个链接了:Calling a procedure within another class

enter image description here

说实话,我已经一直在尝试无数的事情,并且我得到了很多错误。我一直在网上寻找关于从头创建我自己的Excel Addin的教程,但没有真正的运气。我不想使用Add-In-Express,因为这是第三方应用程序,我必须从头开始为我的公司创建一个Excel加载项。

有没有人有关于如何创建一个vb.net编码的Excel Addin(2007),我可以用作模板或指南的想法?我已经尝试了几次,还有很多依赖于Add-In-Express,我真的不能这么做。我有很多VBA代码(自然VBA,因此它位于我的Excel文件的VBA /开发人员部分的模块中),我想我可以将那些从VBA/VB6转换为VB.Net格式,这不是我关心的问题。这真的是要在VB.Net中编写我自己的Excel Addin。任何帮助真的会很棒。谢谢。

*注意:我也不想问同事(或者自己)只需在快速访问工具栏中添加我创建的函数和子集,因为这实际上不是一个解决方案,考虑到这些按钮将在他们创建或打开另一个工作簿时在那里。从本质上讲,我必须在vb.net中创建我自己的Excel插件。再一次感谢你。

+1

可能通过错误的工作是学习的情况。例如,[从HRESULT异常:0x800A03EC错误](http://stackoverflow.com/a/12893711/1115360)可能会帮助那一个。此外,请务必使用Option Strict On。 –

+0

你已经完成了哪些教程或步骤,展示如何构建Excel加载项? – ChicagoMike

+0

你可以尝试像'Dim thisWB = Globals.ThisAddIn.Application.ActiveWorkbook' – Slai

回答

2

该问题与Microsoft.Office.Tools.ExcelMicrosoft.Office.Interop.Excel中的定义有关。要编写一个“互操作”的版本,你可以这样做:

Public Function getRowCount() As Long 

     Dim thisWB As Excel.Workbook = Application.ActiveWorkbook 
     Dim activWS As Excel.Worksheet = CType(thisWB.ActiveSheet, Excel.Worksheet) 

     Return activWS.UsedRange.Rows.Count 

    End Function 

扩展一个本地对象的功能和使用VSTO,你可以做这样的:

Public Function getRowCount() As Long 

     Dim NativeWorkbook As Excel.Workbook = Application.ActiveWorkbook 
     Dim NativeWorksheet As Excel.Worksheet = CType(NativeWorkbook.ActiveSheet, Excel.Worksheet) 

     Dim thisWB As Workbook = Nothing 
     Dim activWS As Worksheet = Nothing 

     If NativeWorkbook IsNot Nothing Then 
      thisWB = Globals.Factory.GetVstoObject(NativeWorkbook) 
     End If 

     If NativeWorksheet IsNot Nothing Then 
      activWS = Globals.Factory.GetVstoObject(NativeWorksheet) 
     End If 

     Return activWS.UsedRange.Rows.Count 

End Function 

这是一个功能你可以放入ThisAddin.vb这将创建一个新的工作表。请注意,此函数命名工作表并将其添加到最后。

Public Function AddWorkSheet(sheetName As String) As Worksheet 

    Dim wk = Application.ActiveWorkbook 
    Dim ws As Worksheet = Nothing 

    Try 
     ws = CType(wk.Sheets.Add(, wk.Sheets(wk.Sheets.Count)), Worksheet) 
     ws.Name = sheetName 
    Catch ex As Exception 
     Throw 
    Finally 
     AddWorkSheet = ws 
    End Try 

End Function 

要使用此的ThisAddin.vb外,你可以做这样的事情:

Dim ws As Excel.Worksheet 
Dim newSheetName As String 
    . 
    ' 
ws = Globals.ThisAddIn.AddWorkSheet(newSheetName) 
+0

谢谢,吉姆..我会尝试这一点,当我再次拿起我的电脑..我可以问你,以及如果你有任何地方或链接或预订购买,这将向我展示更多如何编写Excel插件?我从来不知道有一个'NativeWorksheet'对象,并且一定会研究它...我真希望能够尝试这个! – RDJ

+1

@RDC我会开始[这里](https://msdn.microsoft.com/en-us/library/cc668205.aspx)。不确定有很多书可用。我花了很多时间,只是使用MSDN文档, –

+0

我实际上通过该链接发布之前这里..我没有保存任何链接,所以我没有发布任何..只是因为他们并没有真正帮助我。我基本上试图在我的帖子上面将VBA转录到VB.Net。话虽如此....我尝试了代码,它的工作原理!但是,当我想添加一个新工作表并将其分配给一个我可以使用的对象变量时,我无法使其工作。您能否帮助我多一点?请? – RDJ

相关问题