Callステートメントの意味と機能について

このQ&Aのポイント
  • Callステートメントとは、プロシージャを呼び出すための構文ですが、他の機能も持っています。
  • Callステートメントの具体的な使い方や意味は、プログラムによって異なります。
  • 例えば、Call Application.SetOption("Auto Compact", varSet)の場合、最適化を有効化する操作を行っています。
回答を見る
  • ベストアンサー

Callステートメントは、「実行する」と言う意味?

Callステートメントは、プロシージャを呼び出す以外の機能に、 「実行する」的なものがあるのでしょうか? http://www.accessclub.jp/urawaza/73.html のサンプルを実行していて不思議に思ったのですが、 Call Application.SetOption("Auto Compact", varSet) ' --- E は、Application.SetOptionというプロシージャーを呼び出してるわけではないようです。 上記のサンプルの場合の Call Application.SetOption("Auto Compact", varSet) ' --- E は、 「最適化を有効(もしくは無効)にする」という意味なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8013/17127)
回答No.1

> Callステートメントは、プロシージャを呼び出す以外の機能に、「実行する」的なものがあるのでしょうか? あなたの言う「プロシージャを呼び出す」と「実行する」の違いって何? Callの機能はプロシージャを呼び出す プロシージャの機能は何かを実行する。 つまりプロシージャを呼び出せば、何かが実行されますよ。 > Call Application.SetOption("Auto Compact", varSet) ' --- E であれば Application.SetOptionというプロシージャーを呼び出して そのプロシージャが 最適化を有効(もしくは無効)にする という作業を行っているのです。

fxgrzmabaq23
質問者

お礼

ありがとうございました。

関連するQ&A

  • Callステートメント(エクセル)

    Sub test()  Set x = Application.InputBox(Prompt:="テスト", Type:=8)   スクリプト    Call abc    Call def    Call ghi   スクリプト End Sub 上記マクロで、"x"が"Call"で指定したプロシージャ内でも使えるようにするには、どのような指定が必要になるでしょうか?

  • VBAのCallステートメントについて

    ExcelのSheet1にCommandButton1(表示)があります。 -------------------------------------------------- Private Sub 表示_Click() (DBより表示処理) End Sub -------------------------------------------------- UserForm1にCommandButton1(登録)があります。 -------------------------------------------------- Private Sub 登録_Click() (DBへの登録処理) UserForm1.Hide Call WorkSheets("Sheet1").表示_Click() ・・・☆ Exit Sub End Sub -------------------------------------------------- 表記のようなプログラムにしたところ、☆印のところで、 下記エラーが表示されてしまいます。 【エラー】--------------------------------------------------- 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 ------------------------------------------------------------- どのようにしたらCallステートメントで表示_Clickを呼び出すことが できるのでしょうか。

  • VBA:Callステートメントでいつでもイベント発生可能な準備をしたい。

    タイトルどおり、Callステートメントでいつでもイベント発生可能な準備ができるようにしたいと考えています。しかし、Sub 実行準備SUBでエラーが出ています。どこをどう直せばよいのか教えて頂きたいです。 Private Sub Auto_Open() MsgBox "Ctrl + t でイベント実行準備を行います。" Application.OnKey "^{t}", "実行準備SUB" End Sub '--------------------------------------------------- Sub 実行準備SUB() Dim Target As Range Target = Range(Cells(1, 1), Cells(100, 100)) Call Worksheet_Change(ByVal Target) End Sub '--------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If r.Column = 2 Then r.Offset(0, -1).Value = Now End If Next r End Sub イベントは、シートの2列目のセルに変更があれば、1列目に日付時刻を記入するというものです。宜しくお願い致します。

  • ドキュメントウインドウオプション vba

    アクセス2010は、デフォルトで、 ドキュメントウインドウオプションが「タブ付きドキュメント」 になってると思うのですが、 VBAでこれをウインドウを重ねて表示するに設定する方法はありますか? ネットからのコピペで Sub 閉じる時最適化を有効にする() Dim i As Long i = Application.GetOption("Auto Compact") If i = 0 Then Call Application.SetOption("Auto Compact", True) End If End Sub これは、見つかったのですが、 ドキュメントウインドウオプションを設定する方法が見つからないので教えてください。 ご教授よろしくお願いします。

  • Setステートメントをまとめて記述する方法 (エクセル2000VBA)

    お世話になります。 Setステートメントで以下のように書いて、シート名を省略して使っています。  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") これをプロシージャ毎に書くとコードが長くなるので、先頭かどこかに1回書くだけで、全てのプロシージャで使えるようにしたいのですがどうしたら良いでしょうか? このようなプロシージャを実行したいのですが、 Private Sub CommandButton1_Click()  a.Range("A2").Value = "データ1"  b.Range("B4").Value = "データ2"  c.Range("C9").Value = "データ3" End Sub (他にもコマンドボタンやチェックボックス用のプロシージャがあります) Setステートメントだけを先頭に書くと、 「プロシージャの外では無効です」というエラーが出ましたので、 Public Sub hensuu()  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") End Sub のようにしたら、「実行時エラー"424":オブジェクトが必要です」というエラーが出てしまいました。 どのようにしたらエラーが出ず正しく動くようになりますでしょうか?よろしくお願いします。

  • エクセルからアクセスのプロシージャーを実行させるには?

    エクセルの標準モジュールには→エクセル側のプロシージャー アクセスの標準モジュールには→アクセス側のプロシージャー と言う名前のプロシージャーが作成されています。 これをどちらもエクセル側で実行させることは出来ないでしょうか? 「アクセス側のプロシージャー」ではアクセス側の処理が実行されます。 でもできればエクセル側のコマンドボタンを一回押すだけで エクセルとアクセスの両方の処理を実行させたいです。 エクセルの標準モジュールには Sub エクセル側のプロシージャー() Call アクセス側のプロシージャー End Sub これを実行すると コンパイルエラーになります。 どうすれば一度で二つのアプリケーションのプロシージャーを実行させることが可能でしょうか? よろしくお願い致します。

  • excelのifステートメントのテストで…

    御観覧ありがとうございます。 スパテクという本を買って、excelを勉強しようと、 サンプルを打ち込んでいて、何度かエラーになったりしましたが、 調べることや、入力ミスの確認で回避出来ていたのですが、 本通りに打っているのに、 「エラー438、オブジェクトは、このプロパティまたはメソッドをサポートしてません。」 と出ます。 エクセル2007です。入力したプロシージャは、 Option Explicit Dim nSample1_12 As Integer Sub Sample1_12() nSample1_12 = nSample1_12 + 1 ThisWorkbook.Worksheets("sheet1").Range("A1") = nSample1_12 End Sub Sub Sample1_13() Dim sA2 As String sA2 = ThisWorkbook.Worksheets("sheet1").Range("A2") If sA2 = "" Then ThisWorkbook.Worksheets("sheet1").Renge("A2") = "Sample1_13" ElseIf sA2 = "Sample1_13" Then ThisWorkbook.Worksheets("sheet1").Range("A2") = "基本の文法 ifステートメント" Else ThisWorkbook.Worksheets("sheet1").Range("A2") = "" End If End Sub このサンプル13を実行すると、A2にsample1_13と出るはずなそうなんですが…エラーになります。

  • アクセスからエクセルのプロシージャーを実行する際の

    アクセスからエクセルのプロシージャーを実行する際のエラーです。 おはようございます。長文ですがお許しください。 http://www.geocities.jp/cbc_vbnet/tips/excll.html(03.プロシージャの作成) を参考にアクセスからエクセルのプロシージャーを実行させてるのですがエラーになります。 エクセルファイルのパス→C:\Users\User\Desktop\a.xlsm エクセルファイルに入っているプロシージャ→test() *********************エクセルの標準モジュール********************* Sub test() MsgBox "" End Sub *********************アクセスのイベント********************* Private Sub 更新_Click() Dim App As Excel.Application ’参照設定済み Dim MyFileName As String Dim res As Variant MyFileName = "C:\Users\User\Desktop\a.xlsm" Set App = Excel.Application res = App.Application.Run(MyFileName & "!" & "test") End Sub このアクセスのイベントを実行すると、 「実行時エラー1004 マクロ'C:\Users\User\Desktop\a.xlsm!test'を実行できません。 このブックでマクロが使用できないか、また全てのマクロが無効になっている可能性があります。」 となります。 エクセルのマクロの設定は、「全てのマクロを有効にする」にしてあります。 a.xlsmはダブルクリックすれば普通に開けるし、testも問題なく実行できます。 そして、このアクセスのイベントを実行した後は、エクセルファイルが開けなくなります。 一瞬開くんですが、すぐ閉じてしまいます。 タスクマネージャーのプロセスからエクセルのアプリケーションを強制終了させると 再度開けるようになりますが、画像のように変なドキュメントの回復が出ます。 とりあえず、エクセルが開けなくなることは置いといて、 アクセスからエクセルのプロシージャーを実行する方法を教えてください。 当方オフィス2007です。ご回答よろしくお願いします。

  • アクセスからエクセルのプロシージャーを実行させたい

    オフィス2007です。 ////////////////////////////////////////////////////////// ‘Excel側の標準モジュール ////////////////////////////////////////////////////////// Sub Excelのプロシージャー() MsgBox "Excelです" End Sub ////////////////////////////////////////////////////////// ‘Access側の標準モジュール ////////////////////////////////////////////////////////// Sub Accessのプロシージャー() Dim xlsWB As Object Dim MyFileName As String MyFileName = "D:\Accessからプロシージャーの実行テスト用ファイル.xlsm" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!Excelのプロシージャー" Set xlsWB = Nothing End Sub の状態で、アクセス側から Accessのプロシージャー実行すると、 ////////////////////////////////////////////////////////// マクロ'Accessからプロシージャーの実行テスト用ファイル.xlsm!Excelのプロシージャー' を実行できません。 このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。 ////////////////////////////////////////////////////////// となります。 エクセル側は、「すべてのマクロを有効にする」にしているし、エクセルファイルを単独で開き、 Excelのプロシージャーを実行すると問題なく動きます。 同じ条件で、2003で検証すると問題なく動きます。(拡張子は適宜変えてます) エクセルのパスが間違ってるのかな?と思い、適当なパスに変えたところ、 「オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)」 というエラーがでたので、パスは合ってます。 原因がわかる方、ご回答よろしくお願いします。

  • 実行時エラー-2147217900(80040e1

    アクセスVBAです。 Set cn = CurrentProject.Connection rs.Open "T_test", cn, adOpenKeyset, adLockOptimistic としたときに、T_testと言うテーブル名は存在するのに、 「実行時エラー-2147217900(80040e14) SQLステートメントが正しくありません Delete、Insert、Procedure、SelectまたはUpdateを使用して下さい。」 と言うエラーが発生します。 どうしてテーブルが存在するのにこのエラーが発生するのでしょうか?

専門家に質問してみよう