2015年7月10日金曜日

Visual Studio2010でExcel AddIn開発

Visual Studio2010でExcelのAddInを開発

【環境】
.NET VB (Microsoft Visual Studio 2010(sp1) .NET Framework 4)
Microsoft Excel 2010

【対応】
Visual Studio2010側

1.ファイル>新規作成>プロジェクト>テンプレート>Visual Basic>Office>2010>Excel 2010 アドインを選択


2.SampleExcelAddIn1を作成
 ThisAddIn_Startup()、ThisAddIn_Shutdown()が自動生成される。
 今回は自動生成された関数を使用せずApplication_WorkbookBeforeSave 関数をApplication.WorkbookBeforeSaveにHandlesし新たに作成


Public Class ThisAddIn

    Private Sub ThisAddIn_Startup() Handles Me.Startup

    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown

    End Sub

    'Excel保存時
    Private Sub Application_WorkbookBeforeSave(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.WorkbookBeforeSave
        Dim activeWorksheet As Excel.Worksheet = Application.ActiveSheet

        If activeWorksheet IsNot Nothing Then
            Dim nameCell As Excel.Range = activeWorksheet.Range("B2")
            nameCell.Value2 = "Hello ExcelAddIn"
        End If
    End Sub End Class

3.デバック実行すると以下のようにExcelが起動されB2セルにセットした文字列が表示される。




4.Excelに配置したボタンからAddInを呼び出すようにする。
 「2.」コードを修正


Public Class ThisAddIn

    Private Sub ThisAddIn_Startup() Handles Me.Startup

    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown

    End Sub

    'Excel保存時
    Private Sub Application_WorkbookBeforeSave(ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.WorkbookBeforeSave
        Dim activeWorksheet As Excel.Worksheet = Application.ActiveSheet

        If activeWorksheet IsNot Nothing Then
            Dim nameCell As Excel.Range = activeWorksheet.Range("B2")
            nameCell.Value2 = "Hello ExcelAddIn"
        End If
    End Sub End Class

    Private utilities As AddInUtilities
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities

    End Function

5.他のソリューション(ExcelVBA等)に公開するメンバーを宣言するインターフェイスを定義します。 このインターフェイスをアドイン プロジェクトで定義できます。

 SampleExcelAddIn1プロジェクトにAddInUtilities.vbを追加


Imports System.Runtime.InteropServices
Imports System.Windows.Forms

<ComVisible(True)> _
Public Interface IAddInUtilities
    Sub ImportData()
End Interface

<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class AddInUtilities
    Implements IAddInUtilities

    ' This method tries to write a string to cell A1 in the active worksheet.
    Public Sub ImportData() Implements IAddInUtilities.ImportData
        Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
        If activeWorksheet IsNot Nothing Then
            Dim range1 As Excel.Range = activeWorksheet.Range("C3")
            range1.Value2 = "Hello ExcelAddIn ボタン1アクション"
            MessageBox.Show("ボタン1アクションでC3セルに値を設定")
        End If
    End Sub
End Class


6.Excelにマクロを作成
  Excel側
 SampleExcelAddIn1.xlsmを新規作成してボタンを配置



 ボタンのイベントのマクロを作成


Sub ボタン1_Click()
    'すでに"追加シート"シートがあるか確認
    If Worksheets.Count = 1 Then
        Set wkWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
        wkWorkSheet.Name = "追加シート"
    Else
        Dim blShoyomst As Boolean
        blShoyomst = False
        For i = 1 To Worksheets.Count
            Set wkWorkSheet = Worksheets(i)
            If wkWorkSheet.Name = "追加シート" Then
                blShoyomst = True
                wkWorkSheet.Select
                Exit For
            End If
        Next
        'あらたに"追加シート"を挿入
        If Not blShoyomst Then
            Set wkWorkSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
            wkWorkSheet.Name = "追加シート"
        End If
    End If

    Dim addIn As COMAddIn
    Dim automationObject As Object
    Set addIn = Application.COMAddIns("SampleExcelAddIn1")  '← Visual Studioのアドイン
    Set automationObject = addIn.Object
    automationObject.ImportData         '← 5.で作成したインターフェース
End Sub

7.Visual Studio2010側のSampleExcelAddIn1ソリューションをビルド
 作成したAddInを設定
 開発>COMアドイン



8.ボタンクリックしてAddIn実行



0 件のコメント:

コメントを投稿