我正在尝试使用Vb.Net创建Excel加载项。我在VS2010中启动了Excel 2007加载项目。可悲的是,我对vb.net并不擅长;在这方面我更像是VB6开发人员,我的ThisAddin.vb代码是:
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)中添加了一个Ribbon项(通过Add New Item ...菜单选项) - 然后添加一个按钮。然后我转到代码并尝试调用该函数,并在使用时出现此错误:
MsgBox(Globals.ThisAddIn.getRowCount())
我从这个链接得到的内容:Calling a procedure within another class
说实话,我一直在尝试各种各样的事情,而且我遇到了很多错误。我一直在网上寻找关于从零开始创建我自己的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插件。再次感谢你。
答案 0 :(得分:2)
该问题与Microsoft.Office.Tools.Excel
和Microsoft.Office.Interop.Excel
中的定义有关。要编写“Interop”版本,您可以使用它:
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
要扩展Native对象的功能并使用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)