
当方エクセル2003です。
Sub test_CreateObject()
Dim App As Excel.Application
Dim MyFileName As String
Set App = CreateObject("Excel.Application")
MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls"
With App
.Workbooks.Open FileName:=MyFileName
.Visible = True
End With
Set App = Nothing
End Sub
---------------------------------------------------------
Sub test_GetObject()
Dim App As Excel.Application
Dim MyFileName As String
Set App = GetObject(, "Excel.Application")
MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls"
With App
.Workbooks.Open FileName:=MyFileName
.Visible = True
End With
Set App = Nothing
End Sub
この二つは何が違うのでしょうか?
どちらも既存のエクセルファイルがが開きます。
No.1ベストアンサー
- 回答日時:
こんばんは。
>どちらも既存のエクセルファイルがが開きます。
いいえ。ご相談に掲示されたそれらのコードでは、結果が異なります。(必要に応じてエクセルを再起動しながら確認します)
createobjectの場合は、必ず新しいエクセルアプリケーションが起動します。
あなたのgetobjectでは、今開いているエクセルの中でブックが開きます。
あなたのマクロと違う
set app = getobject("", "Excel.Application")
とした場合は、createobjectと同じ結果となります。
やり直してみたら仰る通り、
createobjectの場合は、必ず新しいエクセルアプリケーションが起動します。
getobjectでは、今開いているエクセルの中でブックが開きます。
になりました。
ご回答ありがとうございました。
No.3
- 回答日時:
サンプルコードは、Excelのコードのようですが、エラーは出ないけれども、コードの内容がかなりヘンです。
オートメーションというのは、他のアプリケーションからコントロールすることです。仮に、Wordから試してみると良いです。たぶん、動かないはずです。どうすればよいのかは、考えてみてください。>この二つは何が違うのでしょうか?
オブジェクトが、まったく違います。GetObject は、既存のExcelのオブジェクトですが、CreateObject は、新規に生成されたExcelのオブジェクトです。
#2の方の参照先の「アットマーク・アイティ」を、何度か読んでみて、分かりにくいというか、今時の内容なんだなって思いました。VBAプログラミングで、いきなりCOMの話をすると、絵に描いた餅で、実際の所が見えてきません。
一応説明は、MSDNにあります。
「COM オブジェクトとは」
http://msdn.microsoft.com/ja-jp/library/cc351706 …
C++の話ですから、分からなくて当然です。
今回は、COMとオートメーションの対比ではありません。あくまでも、オートメーションの取得と生成のお話です。そして、GetObject とCreateObject の仕組みの違いです。そもそもCOMオブジェクトというものは、ここでは関係ないのです。
確かに、CreateObjectで、プログラムIDを引数にとってCOMオブジェクトを指定することは可能ですが、通常は、VBAプログラミングでは、クラス(例:Excel.Application)を指定して、オートメーション・オブジェクトを生成します。
それに対して、GetObject は、「すでにそのオブジェクトが存在していれば、新しいオブジェクトは作成せずに存在しているオブジェクトを返す」ということです。
質問のサンプルコードでは、オブジェクトは、まったく別物です。
Sub test_GetObject()
は、間違ってはいないければも、Excelマクロとしては、意味のないことをしています。
すでに存在しているExcelアプリケーション・オブジェクトを取得して、そこから、既存のブックを読んでいるだけです。つまり、マクロを動かしている本体のオブジェクトだということです。
それに対して、
Sub test_CreateObject()
これは、普通はExcelからは行いませんが、まったく別のもの(サーバー)になってしまいます。
Office オートメーション サーバーの GetObject および CreateObject の動作
http://support.microsoft.com/kb/288902/ja
もう少し、標準的なコードを探して試されることをお勧めします。
コードとしては古いようですが、ここにサンプルがあります。
Excel百科事典
http://home.att.ne.jp/zeta/gen/excel/c04p44.htm
もう少し実務的なマクロを扱わないと、この話では理解できないかもしれません。
No.2
- 回答日時:
>この二つは何が違うのでしょうか?
結果は同じです。
プログラムIDを引数にとり、COMオブジェクトを新規に生成するのがCreateObject。
既に存在するファイル名を引数にとり、そのファイルを操作するオートメーションオブジェクトを参照して取得するのがGetObjectです。ファイル操作のオブジェクトが複数ある可能性もあり、第2引数にプログラムIDを取ることもできます。
参考URLをよく読んでみてください。
参考URL:http://www.atmarkit.co.jp/fwin2k/operation/wsh03 …
まとめると
CreateObject・・・プログラムIDを引数にとり、COMオブジェクトを新規に生成する。
GetObject・・・既に存在するファイル名を引数にとり、
そのファイルを操作するオートメーションオブジェクトを参照して取得する。
ファイル操作のオブジェクトが複数ある可能性もあり、第2引数にプログラムIDを取ることもできる。
という事ですね。
URLもよく見てみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(プログラミング・Web制作) VBSでExcelファイル起動時、重複しても開くのを止めたい 1 2022/10/01 23:20
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
ExcelVBAで既に開いてるwordを閉じる
Excel(エクセル)
-
VBSの処理中一旦処理を止めて再開させたい。
Visual Basic(VBA)
-
-
4
EXCELのVBAでWORDが開いてあるかチェック
Excel(エクセル)
-
5
どこにもフォーカスを当てたくない
Access(アクセス)
-
6
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
7
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
8
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
12
SQLサーバーのジョブでのexeファイル実行について教えてください。
SQL Server
-
13
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
14
Access開いているブックのセル値参照
Access(アクセス)
-
15
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
16
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
17
ExcelのVBAで、選択したファイルが既に開かれているか確認したい
Excel(エクセル)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
20
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「Columns("A:C")」の列文字を...
-
カラーダイアログの指定色で塗...
-
worksheetFunctionクラスのVloo...
-
Crystal report を 8.0 から 6....
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
VBAについてです。 初心者です...
-
VBA (Row とRowsの違いについて)
-
エクセルのVBAの標準モジュール...
-
MSDEでオートメーションエラー
-
エクセルVBAでWeb画面の切り替え
-
VisualBasic2008からExcelの操...
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
Excel VBA グラフを任意sheetに...
-
vbaからIEを操作するための記載...
-
Outlook の予定表データをVB...
-
DataGridのつかいかた
-
PowerPointVBAでスライドマスタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでWordの複数ファイル...
-
オブジェクトが見つかりません
-
CreateObjectとGetObjectの違い
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
VBScriptからDLL参照設定したい
-
エクセルVBAでcode128のバー...
おすすめ情報