2011/09/26

access2010 VSTOアプリケーションアドイン -2-

少々改変してみる。

ファイルを開いてないとき非表示、開いた場合ラベルの変更

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
          onLoad="Ribbon_Load">
  <backstage>
    <button id="CloseAndOpen"
            imageMso="FileOpen"
            insertAfterMso="FileCloseDatabase"
            getLabel="BS_CmdGetLabel"
            getVisible="BS_CmdGetVisible" 
            onAction="BS_CmdClick" />
  </backstage>
</customUI>
getLabel/getVisibleでBackstage上のbuttonを制御
コールバックは、RibbonAddinForMe.vb に。
Private Function CurrentProjectIsOpened() As Boolean
    Return Not String.IsNullOrEmpty(
        Globals.ThisAddIn.Application.CurrentProject.FullName)
End Function

Public Sub BS_CmdClick(control As Office.IRibbonControl)
    Dim CurrentProjectFullName As String =
        Globals.ThisAddIn.Application.CurrentProject.FullName
    Globals.ThisAddIn.Application.CloseCurrentDatabase()
    Globals.ThisAddIn.Application.OpenCurrentDatabase(CurrentProjectFullName)
End Sub

Public Function BS_CmdGetVisible(control As Office.IRibbonControl) As Boolean
    Return CurrentProjectIsOpened()
End Function

Public Function BS_CmdGetLabel(control As Office.IRibbonControl) As String
    If CurrentProjectIsOpened() Then
        If Globals.ThisAddIn.IsMDB Then
            Return "データベースを閉じて開く"
        Else
            Return "プロジェクトを閉じて開く"
        End If
    Else
        Return ""
    End If
End Function
ThisAddIn.vb にプロパティを追加
Public ReadOnly Property IsMDB As Boolean
    Get
        Return Me.Application.CurrentProject.ProjectType =
            Access.AcProjectType.acMDB
    End Get
End Property
データベースが開かれているかどうかをCurrentProject.FullNameを参照することで代用してみている。いまのところ問題は起きてない。
CurrentProject.ProjectType=acNullの場合開いていないということなのだろうか。まぁここで使用することは向かないような気がするのでこれでいいかな。

0 件のコメント: