2016-07-24 15 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

それはエラーを通じて働くことによって学習の場合もあります。たとえば、[Exception from HRESULT:0x800A03EC Error](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の定義と関係しています。ネイティブオブジェクトの機能を拡張し、VSTOを使用するには

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 

、あなたはこのようにそれを行うことができます:あなたがこれを使用することができ、「相互運用」バージョンをコーディングする

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)から開始します。利用可能な本がたくさんあることがわかりません。 –

+0

MSDNのドキュメントを使用して、多くの時間を費やしましたが、実際にリンク先に行ってからリンクを保存していないので、投稿しませんでした。私は基本的に上記の私のポストでVBAをVB.Netに書き写そうとしました。それを言った....私はコードを試して、それは動作します!しかし、私は新しいシートを追加して、それを私が使用できるオブジェクト変数に割り当てるときに、それを動作させることはできません。もう少し手伝ってもらえますか?お願いします? – RDJ

関連する問題