Может ли надстройка VB.Net COM для Microsoft Access 2007 отвечать на файлы базы данных, которые открываются или закрываются ...? Как насчет более поздних версий ..?
Я хотел бы создать надстройку COM, которая выполняет различные функции. Я новичок в этой теме, и после долгих поисков и поисков я смог собрать воедино приведенный ниже код.
Я бы хотел ответить на эти три события:
- Доступ открыт для стартовой страницы (файл не открыт).
- Файл базы данных открывается.
- Файл базы данных закрывается.
Это было создано в Visual Studio 2008 для Access 2007. Первоначально я использовал мастер для расширяемой общей надстройки, но он не работал. Я нашел онлайн пример для C # и смог преобразовать его в VB и заставить его работать. Это в зачаточном состоянии, и только добавляет кнопку на ленте.
Мне все еще неясно, в чем разница между надстройкой VSTO и надстройкой "COM-потребителем", поэтому я не знаю, что мне доступно. Я понимаю, что в Access нет таких событий. Но, хотя, возможно, если бы не было надежного способа ответить на них, я мог бы использовать метод опроса, при котором надстройка пинговала бы Access один раз в секунду, чтобы узнать, открыт ли файл.
Imports Extensibility
Imports System.Runtime.InteropServices
Imports System.Reflection
Imports Microsoft.Office.Core
<GuidAttribute("04AE57EF-2D3A-496A-8A4E-43930FC9CF83"), _
ProgIdAttribute("AccessDatabaseExplorer.Connect")> _
Public Class Connect
Implements IDTExtensibility2
Private app As Object
Private addin As Object
Private WithEvents RibbonButton1 As CommandBarButton
Public Sub OnConnection( _
ByVal application As Object, _
ByVal connectMode As Extensibility.ext_ConnectMode, _
ByVal addInInst As Object, _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnConnection
app = application
addin = addInInst
If connectMode <> ext_ConnectMode.ext_cm_Startup Then
OnStartupComplete(custom)
End If
End Sub
Public Sub OnStartupComplete( _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnStartupComplete
CreateRibbonButtons()
End Sub
Public Sub OnBeginShutdown( _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnBeginShutdown
Dim omissing As Object = System.Reflection.Missing.Value
RibbonButton1.Delete(omissing)
RibbonButton1 = Nothing
End Sub
Public Sub OnDisconnection( _
ByVal RemoveMode As Extensibility.ext_DisconnectMode, _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnDisconnection
If RemoveMode <> ext_DisconnectMode.ext_dm_HostShutdown Then
OnBeginShutdown(custom)
End If
app = Nothing
End Sub
Public Sub OnAddInsUpdate( _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
'Do nothing.
End Sub
Private Sub CreateRibbonButtons()
Dim oCommandBars As CommandBars
Dim oStandardBar As CommandBar
oCommandBars = DirectCast(app.GetType().InvokeMember("CommandBars", _
BindingFlags.GetProperty, Nothing, app, Nothing), CommandBars)
oStandardBar = oCommandBars("Database")
'In case the button was not deleted, use the exiting one.
Try
RibbonButton1 = DirectCast(oStandardBar.Controls("My Custom Button"), _
CommandBarButton)
Catch ex As Exception
Dim omissing As Object = CObj(System.Reflection.Missing.Value)
RibbonButton1 = DirectCast(oStandardBar.Controls.Add(1, omissing, _
omissing, omissing, omissing), CommandBarButton)
RibbonButton1.Caption = "My Custom Button"
RibbonButton1.Style = MsoButtonStyle.msoButtonIconAndCaptionBelow
End Try
RibbonButton1.Tag = "My Custom Button"
RibbonButton1.OnAction = "!<MyCOMAddin.Connect>"
RibbonButton1.Visible = True
Dim oName As Object = CObj(app.GetType().InvokeMember("Name",
BindingFlags.GetProperty, Nothing, app, Nothing))
oStandardBar = Nothing
oCommandBars = Nothing
End Sub
Private Sub RibbonButton1_Click( _
ByVal Ctrl As CommandBarButton, _
ByRef CancelDefault As Boolean) _
Handles RibbonButton1.Click
MessageBox.Show("RibbonButton1 was Clicked", "MyCOMAddin")
End Sub
End Class