Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3912 / 13644 ツリー ←次へ | 前へ→

【59527】アドインの有効化について 08/12/16(火) 19:04 質問[未読]
【59528】Re:アドインの有効化について neptune 08/12/16(火) 20:38 発言[未読]
【59530】Re:アドインの有効化について 08/12/17(水) 9:47 お礼[未読]
【59532】Re:アドインの有効化について neptune 08/12/17(水) 10:53 発言[未読]
【59533】Re:アドインの有効化について 08/12/17(水) 11:42 発言[未読]
【59534】Re:アドインの有効化について 角田 08/12/17(水) 11:56 回答[未読]

【59527】アドインの有効化について
質問    - 08/12/16(火) 19:04 -

引用なし
パスワード
   こんにちは、桜です。
少々畑が違うかもしれませんが、もし可能ならお力を貸してください。

作成したマクロ入りexcelファイルを、
「読み取り専用」「マクロ有効」で立ち上げたくVBを作成しました。
「読み取り専用」「マクロ有効」でファイルを立ち上げるところまでは成功したのですが
そのファイルに「WORKDAY関数」が含まれており、これが無効の状態で立ち上がってしまいます。

オープンマクロでアドインのリフレッシュを試みたのですが
一度WORKDAY関数が使われているセルをクリックし、その後エンターを押さないと有効化されません。

■VB側
Option Explicit
Const cnsBook = "test.xls"
Const xlAutoOpen = 1
Dim objExcelApp, objWbk, strPath

' 本スクリプトファイルのフォルダ名の取得
With WScript
 strPath = Replace(.ScriptFullName, .ScriptName, "")
End With
' Excelのオブジェクトの参照を取得
Set objExcelApp = CreateObject("Excel.Application")
' 指定のワークブックを開く(同一フォルダ)。
Set objWbk = objExcelApp.Workbooks.Open(strPath & cnsBook, False, True)
' Excelウィンドウを表示
objExcelApp.Visible = True
' 自動起動マクロ(Auto_Open)があれば実行
objWbk.RunAutoMacros xlAutoOpen
Set objWbk = Nothing
Set objExcelApp = Nothing


■EXCEL VBA側(
Private Sub Workbook_Open()
  AddIns("分析ツール").Installed = False
  AddIns("分析ツール").Installed = True
End Sub

※VBA側に、一度「WORKDAY関数」を使用しているセルをアクティブにし、
その後最初に表示したいワークシートをアクティブにするコードも入れてみたのですが上手くいきませんでした。


よろしくお願いいたします。

【59528】Re:アドインの有効化について
発言  neptune  - 08/12/16(火) 20:38 -

引用なし
パスワード
   ▼桜 さん:
こんにちは

AddIn オブジェクトのHelpの下の方に
///////////////////////////////////////////////
Installed プロパティに True が設定されているにもかかわらず、
そのアドイン内の関数が呼び出せない場合は・・・
///////////////////////////////////////////////
と書かれている部分がありますが、その部分は検証済みですか?

>※VBA側に、一度「WORKDAY関数」を使用しているセルをアクティブにし、
>その後最初に表示したいワークシートをアクティブにするコードも入れてみたのですが上手くいきませんでした。

【59530】Re:アドインの有効化について
お礼    - 08/12/17(水) 9:47 -

引用なし
パスワード
   ▼neptune さん:
こんにちは、ありがとうございます。
ヘルプで調べるのを失念しておりました。お恥ずかしいです。

On Error Resume Next  ' エラー処理を無効にします。
Set wbMyAddin = Workbooks(Addins("My Addin").Name)
lastError = Err
On Error Goto 0    ' エラー処理を有効にします。
If lastError <> 0 Then
  ' アドインが読み込まれていなければ、そのファイルを開きます。
  Set wbMyAddin = Workbooks.Open(Addins("My Addin").FullName)
End If

こちらも足して試してみたのですが
  Set wbMyAddin = Workbooks.Open(Addins("My Addin").FullName)
この部分でエラーを吐き出してしまいました。
書き換えるべき部分が分からず、さらに調べてみたところVB側だけで無事希望の動作ができたようなので、VBAではありませんが一応載せておきます。
理解度が足りずあっちこっち切り貼りして分かる部分を書き換えたため、きれいなコードではありません…。

Option Explicit
Const cnsBook = "test.xls"
Const xlAutoOpen = 1
dim xlApp,xlBook,strPath

Set xlApp = CreateObject("Excel.Application")
' 本スクリプトファイルのフォルダ名の取得
With WScript
 strPath = Replace(.ScriptFullName, .ScriptName, "")
End With
'アドインリフレッシュ
Call AddinRefresh(xlApp,"分析ツール")

xlApp.Visible = True

Set xlBook = xlApp.Workbooks.Open(strPath & cnsBook, False, True)


Private Sub AddinRefresh(inXlsApp,inAddinName)
On Error Resume Next
inXlsApp.AddIns(inAddinName).Installed = False
inXlsApp.AddIns(inAddinName).Installed = True
End Sub

ですが、どうしてこれで上手くいくか、等はまだまだ理解が及んでおりません。
実用する前にもう少し自分のレベルを何とかしたいと思います…。

お答えくださってありがとうございました。

【59532】Re:アドインの有効化について
発言  neptune  - 08/12/17(水) 10:53 -

引用なし
パスワード
   ▼桜 さん:
こんにちは

もう見ないかな?

もしかして、VBじゃなくて、VBSのソースじゃありませんか???
変数の宣言を見ると、どうもそんな感じを受けますが。。。。。

>ですが、どうしてこれで上手くいくか、等はまだまだ理解が及んでおりません。
なんですが、忘れてましたがそういえば、VBSを使って、ExcelBookを開いた時
は確かOpenイベントは発生しなかった事をどこかで読んだ記憶があります。

OLEではどうなのかはちょっと検証すればわかると思います。
新規BookのOpenイベントにMsgBox "Hoge"等と書いて実験したら如何?

又、昔ながらの方法ですが、標準モジュールにAuto_Openという
プロシージャを作成する事でもBookが開く時に自動的に実行させることが
出来ます。これも試す価値ありかと思います。

でも、OLEで操作できるなら出来るだけそうするほうが、良いですね。

【59533】Re:アドインの有効化について
発言    - 08/12/17(水) 11:42 -

引用なし
パスワード
   ▼neptune さん:
こんにちは。
おっしゃるとおりVBSです。すみません;
一応一番最初に投稿したコードに入れていた「OPENイベントがあれば実行」はきちんと実行されていたと思います。
Openイベントからエラーを吐き出したりはしていたので…。

Msgboxの検証やOLE検証はちょっと出先なのですぐにできそうになく、ご報告まで。
ありがとうございます。
とても勉強になります。

【59534】Re:アドインの有効化について
回答  角田  - 08/12/17(水) 11:56 -

引用なし
パスワード
   こんにちは。
CreateObjectの場合「アドイン登録のみ」のアドインは自動的には
読み込まれませんので【先に】アドインブックを自分で開く必要があります。

詳細は下記参照。
www.h3.dion.ne.jp/~sakatsu/faq_res.htm#faq_q20
分析ツール(FUNCRES.XLA)も同じ事です。

objExcelApp.LibraryPath & "\Analysis\FUNCRES.XLA"

3912 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free