[[20240426112221]] 『意味を教えてください』(シエンタ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『意味を教えてください』(シエンタ)

>「参照設定」を使う方法で、「Dictionary」を使っていると、
>ブックを共有する際に不便です。
>reateObject」を使ってDictionaryを使うと、
>ブックを共有する際に便利です。

というのを見かけました。
何が便利で何が不便なのか理解できません。

作ったエクセルファイルを他の人に渡して使うためには
他の人のパソコンでも参照設定をしなければ使えないから
不便だということでしょうか?

でも、実際には他の人に渡して使ってもらっても
動かなかったのですがこれはたまたま
渡した人のパソコンで設定されていただけですか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >というのを見かけました。
 それ、どこで見たのか表示頂かないと議論にならんでしょうよ。

  ↓ここですかね?

【VBA】Dictionaryの参照設定をする【CreateObjectが便利です】
https://daitaideit.com/vba-dictionary-reference/

(白茶) 2024/04/26(金) 11:42:20


 参照設定の情報はブックに保持されているので、
 使用するPCに対象のライブラリー(*)があれば、
 それが自動的に読み込まれて問題なく使えると思います。
 もしなければ、[参照設定]ダイアログボックスに「参照不可」と表示されます。
 (この例ではMicrosoft Scripting Runtimeですかね。これはどのPCにもあるはずです)
(xyz) 2024/04/26(金) 13:43:50

CreateObjectを使うと
使用するPCに対象のライブラリー(*)がなくても
使用できるようになるという認識で
いいのですか?

(シエンタ) 2024/04/26(金) 16:32:02


 そういうことは無いと思います。

 ちなみに、
 > どのPCにもあるはずです
 というのは言い過ぎでした。LinuxやMacOS?で動作するマシンにはないでしょうしねえ。

 なお、既にあったコメントにきちんと応対してくださいね。

 # 余談です。(コメント不要です)
 # インテリセンスや、速度のことを考えたら参照設定が優れています。
 # ただし、こうした質問掲示板では、「参照設定ってなんですか」という質問を誘発するので、
 # 回答者は避けがちです。

(xyz) 2024/04/26(金) 16:40:22


 誤解されている向きもあるかと思いますので、参考までに書いておきます。
 参照設定するかCreateObjectを使うかという対立構図で記事は書かれていますが、
 少し違うと思います。

 1. こうした(外部?)オブジェクト変数の宣言方法には、
   ・事前バインディングと
   ・遅延バインディング(実行時バインディング)のふたつがあります。
   インテリセンスの利用可否は、こちらが関係する話です。
   速度も事前バインディングのほうが速いと言われています。

   Dim dic As Dictionary
   とするのが事前バインディング(Early Binding)
   Dim dic As Object
   とするのが遅延(または実行時)バインディング( Late Binding )
   です。
   https://excel-ubara.com/excelvba4/EXCEL227.html
   などを参照してください。  

 2. 事前バインディングの場合に、オブジェクトの生成は
   Set dic = New Dictionary
   としなければならないわけではなく、
   Set dic = CreateObject("Scripting.Dictionary")
   としても問題はありません。

   実際、CreateObject関数のヘルプにはそのような例も載っています。
   (New Excel.Application ではなく、CreateObject関数を使ってExcel.Application を生成する例)

(xyz) 2024/04/26(金) 23:14:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.