image

名前が示すように、CreateObject関数はオブジェクトの作成に使用されます。しかし、newキーワードを使用してオブジェクトを直接作成できるのに、なぜCreateObjectメソッドまたは関数を使用するのでしょうか。まあ、それは有効な質問であり、適切な答えがあります。 CreateObjectを使用したオブジェクトの作成は、遅延バインディング*と呼ばれます。実行時バインディングでは、オブジェクトの作成は実行時に行われます。参照を追加する必要はありません。これにより、VBAコードが移植可能になります。

たとえば、他のアプリケーションを処理するアプリケーションを作成し、参照を追加してnew *キーワードを使用することでアーリーバインディングを使用する場合です。後でそのコードを他のマシンに転送すると、そのマシンにも参照を追加する必要があります。

ただし、CreateObjectメソッドを使用して他のアプリケーションオブジェクトを作成した場合は、コードを転送または共有する場合に備えて、他のマシンに参照を追加する必要はありません。

この記事では、いくつかの例を使用してCreateObjectメソッドについて学習します。

CreateObject関数の構文:

Set object_name= CreateObject(classname as string,[servername])

文字列としてのクラス名:これは必須の変数です。これは、アプリケーションの名前とオブジェクトタイプを参照する文字列です。作成するオブジェクトのアプリケーション名とクラスは、AppName.ObjecTypeで宣言する必要があります。たとえば、Wordアプリケーションのオブジェクトが必要な場合は、「Word.Application」と記述します。これについては、後で例で詳しく説明します。

[サーバー名]:オプションの変数です。これは、オブジェクトが作成されるネットワークサーバーの名前の文字列です。 servernameが空の文字列( “”)の場合、ローカルマシンが使用されます。この章ではこれを使用しません。

これで、CreateObject関数の基本がわかったので、いくつかの例でそれらを使用してみましょう。

例1:ExcelVBAを使用してMicrosoftWordアプリケーションを開くしたがって、早期バインディングを使用する場合は、[ツール]→ [参照]メニューを使用してWordアプリケーションへの参照を追加します。

image

そして、私たちのコードは次のようになります。

Sub OpenWordApp()

Dim wordApp As New Word.Application

Dim wordDoc As Document

wordApp.Visible = True

wordDoc = wordApp.Documents.Add

End Sub

このコードの利点は、VBAのインテリジェンスの助けを借りて、作成したオブジェクトの使用可能なメソッドとプロパティを表示することです。システムで完全に機能します。ただし、このコードを他の人と共有していて、ツールからMicrosoft Wordライブラリへの参照を追加していない場合は、エラーが発生します。

image

このエラーを回避するには、以下のコードを使用してください。

Sub OpenWordApp()

Dim wordApp As Object



Set wordApp = CreateObject("Word.Application")



Dim wordDoc As Object

wordApp.Visible = True

Set wordDoc = wordApp.Documents.Add

End Sub

上記のコードは、どのマシンでも完全に正常に機能します。 CreateObjectメソッドを使用して遅延バインディングを実行してオブジェクトを作成しているため、移植可能です。

別の例を見てみましょう:

例2:CreateObject関数を使用してワークブックオブジェクトを作成するVBAを一定時間使用している場合は、Newキーワードを使用してワークブックを作成または追加しておく必要があります。この例では、CreateObjectを使用してこれを行います。

Sub addSheet()



' Declare an object variable to hold the object

' reference. Dim as Object causes late binding.

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Sheet")

' Make Excel visible through the Application object.

ExcelSheet.Application.Visible = True

' Place some text in the first cell of the sheet.

ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"

' Save the sheet to C:\test.xls directory.

ExcelSheet.SaveAs "C:\TEST.XLS"

' Close Excel with the Quit method on the Application object.

ExcelSheet.Application.Quit

' Release the object variable.

Set ExcelSheet = Nothing

End Sub

そうですね、これがVBAでCreateObjectメソッドを使用する方法です。そのメリットとデメリットについて説明しましょう。

オブジェクトを作成するためのCreateObjectの利点CreateObjectの主な利点は、コードを移植可能にすることです(オブジェクトの作成が懸念される場合)。を使用してオブジェクトプログラムへの参照を追加したかどうかを心配することなく、誰とでもコードを共有できます。

CreateObjectの欠点

CreateObjectメソッドの欠点は次のとおりです。

オブジェクトの作成に使用するクラスの構造を知っている必要があります。

オブジェクトを作成すると、VBAは役立つインテリセンスを提供しないため、オブジェクトのメソッドとプロパティをメモリに完全に依存します。

上記の欠点を克服することができます。トリックがあります。

他の人と共有するコードを書くときはいつでも、オブジェクトを作成するための最初の方法を使用します(ツールからの参照の追加)。これにより、コードをより速く作成できます。 VBAプログラムを終了してテストしたら、NewメソッドをCreateObjectメソッドに置き換えます。これにより、コードが移植可能になります。このトリックを使用できます。

そうですね、これがCreateObject関数を使用してVBAでオブジェクトを作成する方法です。私はすべてを説明できたと思います。この記事またはその他のVBA関連の質問について質問がある場合は、以下のコメントセクションで質問してください。

関連記事:

link:/ applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Excel VBAUserForms入門] | * Excelでフォームを作成する方法と使用方法を説明しますVBAツールボックス、ユーザー入力の処理方法、そして最後にユーザー入力の保存方法。これらのトピックについて、1つの例とステップバイステップガイドを使用して説明します。

link:/ general-topics-in-vba-vba-variables-in-excel [ExcelのVBA変数] | * VBAはVisualBasic forApplicationsの略です。

これは、Microsoftのプログラミング言語です。これは、MSExcel、MS-Word、MS-AccessなどのMicrosoft Officeアプリケーションで使用されますが、VBA変数は特定のキーワードです。

link:/ general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | *すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。

link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments] |引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。

link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する] | VBAを使用してシートを削除しているので、何をしているのかがわかります。

この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。

link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する] |このコードでは、最初にワークブックオブジェクトへの参照を作成しました。次に、新しいワークブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー*] `| Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。

link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする] | *このコードはVBAを無効にするだけではありませんアラートだけでなく、コードの時間効率も向上します。方法を見てみましょう。

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット] |あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数] |これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] |この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。

ダッシュボードを準備するには、Countif関数が不可欠です。

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法] |これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。