|
分類:[VB.NET/VB2005]
開発環境 :Windows XP :VB2005 :Excel 2003 (MS Office 2003 Professional SP2)
:Celeron 2.66 GHz :760 MB RAM
はじめまして。みどと申します。
Excel のメニューバーにメニューとサブメニューを追加し、さらに追加した サブメニューを選択するとFormを開いて...といった処理をしようと考えて おります。
VB2005にて共有アドインとしてプロジェクトを作成し、MSDNなどで 照会されているサンプルソースを基にコーディングし、最終的には 望みの処理ができる様にはなりましたが、Excelの起動に時間が掛かる 様になってしまいました。
下記にソースを記述させて頂きますが、サンプルソースをそのままで コーディングした「コードA」の方が「時間が掛かる」というもので、 Excelの起動からシートに何か入力できる様になるまでの実際の時間に ついては、
「コードA」 20秒 「コードB」 5秒 ←アドインをインストールしない状態と同じ時間
でした。
コードBについては、変数を全て Object で定義したり、定数を自作したりと 無茶苦茶なことをしていますが、コードBでは問題なく早く起動します。
「Core.CommandBar」といった「Microsoft.Office.Core」を参照する様な 記述があると遅くなる様です。
恐れ入りますが、「何か設定が抜けている!」のか「そういうもの!」なのか 何かご存知でしたら、ご教授下されば幸いです。 よろしくお願い致します。
*以下、コードの抜粋です。
■コードA・B 共通部分------------------------------------------------ Imports System.Runtime.InteropServices Imports Microsoft.Office '* Microsoft.Office.Core を参照設定に追加しました。
■コードA--------------------------------------------------------------
Public Class Connect
Implements Extensibility.IDTExtensibility2
Private applicationObject As Excel.Application Private addInInstance As Core.COMAddIn
Private MainMenuBar As Core.CommandBar Private MenuBarItem As Core.CommandBarControl
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
applicationObject = DirectCast(application, Excel.Application) addInInstance = DirectCast(addInInst, Core.COMAddIn)
MainMenuBar = applicationObject.CommandBars("Worksheet Menu Bar") MenuBarItem = DirectCast(MainMenuBar.Controls.Add(Core.MsoControlType.msoControlPopup, Temporary:=True), Core.CommandBarControl) MenuBarItem.Caption = "メニュー(&Q)"
MenuItem01 = MenuBarItem.Controls.Add(Core.MsoControlType.msoControlButton, Temporary:=True) MenuItem01.Caption = "サブメニュー1(&A)" MenuItem01.Visible = True
End Sub
End Class
■コードB--------------------------------------------------------------
Public Class Connect
Implements Extensibility.IDTExtensibility2
Private applicationObject As Object Private addInInstance As Object
Private Const GWk_msoControlPopup As Integer = 10 Private Const GWk_msoControlButton As Integer = 1
Private MainMenuBar As Object Private MenuBarItem As Object
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
Implements Extensibility.IDTExtensibility2
applicationObject = application addInInstance = addInInst
MainMenuBar = application.CommandBars("Worksheet Menu Bar") MenuBarItem = MainMenuBar.Controls.Add(GWk_msoControlPopup, Temporary:=True) MenuBarItem.Caption = "メニュー(&Q)"
MenuItem01 = MenuBarItem.Controls.Add(GWk_msoControlButton, Temporary:=True) MenuItem01.Caption = "サブメニュー1(&A)" MenuItem01.Visible = True
End Sub
End Class
------------------------------------------------------------------------
|