Excel VBA質問箱 IV

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

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


5921 / 13646 ツリー ←次へ | 前へ→

【48132】comアドインについて もも 07/4/4(水) 22:35 質問[未読]
【48133】Re:comアドインについて Blue 07/4/4(水) 23:30 発言[未読]
【48174】Re:comアドインについて yuu1 07/4/6(金) 12:53 回答[未読]
【48180】Re:comアドインについて もも 07/4/6(金) 23:57 質問[未読]
【48185】Re:comアドインについて りん 07/4/7(土) 8:25 発言[未読]
【48187】Re:comアドインについて もも 07/4/7(土) 10:07 質問[未読]
【48189】Re:comアドインについて yuu1 07/4/7(土) 11:47 回答[未読]
【48194】Re:comアドインについて もも 07/4/7(土) 22:03 質問[未読]
【48197】Re:comアドインについて yuu1 07/4/7(土) 22:49 回答[未読]
【48198】Re:comアドインについて もも 07/4/7(土) 23:31 質問[未読]
【48201】Re:comアドインについて yuu1 07/4/7(土) 23:53 回答[未読]
【48212】Re:comアドインについて もも 07/4/8(日) 19:24 お礼[未読]

【48132】comアドインについて
質問  もも  - 07/4/4(水) 22:35 -

引用なし
パスワード
   Comアドインを呼び出そうと考えています。
sub test()
Activesheets.Cells(1,1)="TEST"
end sub
これを、office XP Developerを用いDLL化(AddInProject1.DLL)した後、

Declare Sub test Lib "AddInProject1.DLL"
Sub jikken()
test
End Sub

成るプロシージャを参照設定した後に走らせてもエラーとなりDLL内のSubが呼び出せません。(エントリtestがDLL内に見つかりません となります)
何か設定が足りないのか、根本的にできないのでしょうか?知識のお持ちの方、どうぞよろしくご教授ください。

【48133】Re:comアドインについて
発言  Blue  - 07/4/4(水) 23:30 -

引用なし
パスワード
   ▼もも さん:
>これを、office XP Developerを用いDLL化(AddInProject1.DLL)した後、
これについては良くわかりませんが、

Declareを使って呼べるのはWin32 DLL(レガシーDLL)ですので、
"COM"アドインとなっていることからも、Win32 DLLではないのではないでしょうか?
ActiveX DLL等と同様に参照設定から使うもしくはCreateObject
から使うようなものなのではないでしょうか?

【48174】Re:comアドインについて
回答  yuu1  - 07/4/6(金) 12:53 -

引用なし
パスワード
   >Comアドインを呼び出そうと考えています。
comアドインはDeclareステートメントでは使えません。

comアドインのメソッドやプロパティをVBAから用いるには次の手順になります。
メソッドやプロパティはデザインモジュール(以下例ではAddInDesigner1)に記述しておきます。

(1)comアドインを登録する。(VBE-ツール-参照設定に表示される状態)
(2-1)参照設定をする場合(事前バインディング)
 参照設定にチェックして
 Dim xxx As New AddInProject1.AddInDesigner1
(2-2)参照設定をしない場合(事後バインディング)
 参照設定にチェックはしないで
 Dim xxx As Object
 Set xxx = CreateObject("AddInProject1.AddInDesigner1")
(3)オブジェクト使い方はクラスと同様
 xxx.メソッド または、
 xxx.プロパティ のように用いる

【48180】Re:comアドインについて
質問  もも  - 07/4/6(金) 23:57 -

引用なし
パスワード
   Blueさん、yuu1さん。ご回答ありがとうございます。

yuu1さん。
>メソッドやプロパティはデザインモジュール(以下例ではAddInDesigner1)に記述…

デザインモジュールに記述するプロシージャがmsgboxのような時はうまくいくのですが、先の Activesheets.Cells(1,1)="TEST" とするとエラー(オブジェクト変数またはwithブロック変数が設定されていません)になります。どう設定すればよいのかご教授ください。

【48185】Re:comアドインについて
発言  りん E-MAIL  - 07/4/7(土) 8:25 -

引用なし
パスワード
   もも さん、おはようございます。

>>メソッドやプロパティはデザインモジュール(以下例ではAddInDesigner1)に記述…
comアドインはお三方にまかせるとして。

>デザインモジュールに記述するプロシージャがmsgboxのような時はうまくいくのですが、先の Activesheets.Cells(1,1)="TEST" とするとエラー(オブジェクト変数またはwithブロック変数が設定されていません)になります。
誰でもエラーになります。

Activesheets.Cells(1,1)="TEST"
   ↓
ActiveSheet.Cells(1,1).Value="TEST"

ここに書くときに間違えただけだとすれば、
Application.ActiveSheet.Cells(1,1).Value="TEST"
こう書いたときにエラーになれば、ApplicationオブジェクトがEXCELではないということになります。

【48187】Re:comアドインについて
質問  もも  - 07/4/7(土) 10:07 -

引用なし
パスワード
   りん さん 
おはようございます。
すみません。訂正し忘れていました。
Activesheet.Cells(1,1)=… でした。

ただ、やはりエラーとなります。対象のエクセルブック・シートを認識させるにはどう記述すればいいのでしょうか?また、ブック・シートが複数ある時、それらに記号を振っておいてその記号で切替はできませんでしょうか?
よろしくお願いします。

【48189】Re:comアドインについて
回答  yuu1  - 07/4/7(土) 11:47 -

引用なし
パスワード
   >デザインモジュールに記述するプロシージャがmsgboxのような時はうまくいくのですが、先の Activesheets.Cells(1,1)="TEST" とするとエラー(オブジェクト変数またはwithブロック変数が設定されていません)になります。

デザイン-AddInDesigner1のアプリケーションはMicrosoft Excel x.xとして述べます。
ActivesheetsなどのApplicationへの全ての参照はcomアドインへ渡されたApplicationを介して記述する必要があります。(これは基本です)

記述の一例
(1)標準モジュール
 Public gx As Application
(2)AddInDesigner1のイベント
 Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  Set gx = Application
 End Sub

 Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  Set gx = Nothing
 End Sub
(3)実際の記述
 gx.Activesheet.Cells(1,1)=… 

Developerのマニュアル、ヘルプ、サンプル等へ目を通して下さい。

【48194】Re:comアドインについて
質問  もも  - 07/4/7(土) 22:03 -

引用なし
パスワード
   yuu1さん こんばんは
うまくいきません。
実は開発ガイドのウォークスルー通りImplements IDTExtensibility2から試したこともあったのですがやはり同じエラーで進めませんでした。今までの部分を述べます。

★以下をAddInDesigner1に記述

Public Gx As Application

Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
 Set Gx = Application
End Sub

Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
 Set Gx = Nothing
End Sub

Public Sub test()
 Gx.ActiveSheet.Cells(1, 1) = "seiko"
End Sub

★ホスト側にて上記DLLを参照設定して以下を標準Moduleに記述

Dim ABC As New AddInProject1.AddInDesigner1
Sub jikken()
 ABC.test
End Sub

お手数をおかけします。以上の記述で何が原因なのかご教授お願いします。

【48197】Re:comアドインについて
回答  yuu1  - 07/4/7(土) 22:49 -

引用なし
パスワード
   >実は開発ガイドのウォークスルー通りImplements IDTExtensibility2から試したこともあったのですがやはり同じエラーで進めませんでした。

この文面からすると、アプリケーションはVisual Basic for Application IDEではありませんか?
その場合、
Set Gx = Application
のApplicationとはVBEのインスタンスです。Excelではありません。

先のレスで
>デザイン-AddInDesigner1のアプリケーションはMicrosoft Excel x.xとして述べます。
と、示しているようにアプリケーションはMicrosoft Excel x.xとします。

アプリケーションをVisual Basic for Application IDEとして作りたいのであれば、別途Excelインスタンスを渡す処理が必要です。

【48198】Re:comアドインについて
質問  もも  - 07/4/7(土) 23:31 -

引用なし
パスワード
   yuu1さん こんばんは

いいえ、アプリケーションはMicrosoft Excel(バージョン10.0、ロード方法startup)にしています。この設定でApplicationはExcelと解釈されるはずですよね。
GxもPublicで参照設定していますので渡されるはずだと思うのですが何故、ApplicationをExcelと認識してくれないのか不思議です。

【48201】Re:comアドインについて
回答  yuu1  - 07/4/7(土) 23:53 -

引用なし
パスワード
   >記述の一例
>(1)標準モジュール
> Public gx As Application


こうしてますか?

明確に
Public gx As Excel.Application
としたほうがいいかもしれません。

どうしてもダメなら、comアドインの登録を削除して、新規作成直してみるとか...
通常はこれまでの手順で動作します。

【48212】Re:comアドインについて
お礼  もも  - 07/4/8(日) 19:24 -

引用なし
パスワード
   yuu1さん こんばんは
いろいろやってみたのですがdeveloperではやはりダメでした。しかし何故かvbで記述すると動作したので一度こちらで考えてみることにします。何かと勉強になりました。ありがとうございます。

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