web-dev-qa-db-ja.com

VBA関数をサブプロシージャに呼び出す方法

私はこれがそこにいる誰かにとって簡単な質問であることを知っていますが、私は彼らが何であるかを理解していなかったので、実際に機能モジュールをまったく使用したことがありません。

そのため、これを使用できる(冗長性を削減する)ことができますが、フォームからサブ(ボタンクリックなど)プロシージャを呼び出す方法を知りたいです。

私はこれを試しました...

Sub Command_Click()
    Call "pptCreator"
End Sub

それがかなり悪いことは知っていますが、これを手順に入れる方法がわかりません。

15
Justin

Microsoft Accessで呼び出すことができるさまざまな方法のいくつかを次に示します。

モジュールからフォームサブまたは関数を呼び出すには

呼び出すフォームのサブルーチンは、次のようにパブリックでなければなりません:

Public Sub DoSomething()
  MsgBox "Foo"
End Sub

次のようにサブルーチンを呼び出します。

Call Forms("form1").DoSomething

電話をかける前にフォームを開いておく必要があります。

イベントプロシージャを呼び出すには、フォーム内のパブリックプロシージャを呼び出し、このパブリックプロシージャ内でイベントプロシージャを呼び出す必要があります。

フォームからモジュール内のサブルーチンを呼び出すには

Public Sub DoSomethingElse()
  MsgBox "Bar"
End Sub

...イベントプロシージャから直接呼び出します。

Call DoSomethingElse

イベントプロシージャを使用せずにフォームからサブルーチンを呼び出すには

必要に応じて、コントロールの下にイベントプロシージャを作成しなくても、実際に関数をフォームコントロールのイベントにバインドできます。これを行うには、最初に次のように、サブではなくモジュール内のパブリック関数が必要です。

Public Function DoSomethingElse()
  MsgBox "Bar"
End Function

次に、フォームにボタンがある場合、プロパティウィンドウのOnClickイベントに[イベントプロシージャ]を配置する代わりに、次のように入力します。

=DoSomethingElse()

ボタンをクリックすると、モジュール内のパブリック関数が呼び出されます。

プロシージャの代わりに関数を呼び出すには

サブルーチンを呼び出すと次のようになります:

Call MySub(MyParameter)

次に、関数の呼び出しは次のようになります。

Result=MyFunction(MyFarameter)

ここで、Resultは関数によって返される型の変数です。

注: Callキーワードは必ずしも必要ではありません。ほとんどの場合、次のようにサブルーチンを呼び出すことができます。

MySub(MyParameter)
31
Robert Harvey

pptCreatorが同じファイル内の関数/手順である場合、次のように呼び出すことができます

call pptCreator()

3
shahkalpesh

サブプロシージャの呼び出し– 3ウェイテクニック

プロシージャを作成したら、それがVisual Basic言語の一部であるかどうかに関係なく、使用できます。プロシージャの使用は、プロシージャの呼び出しとも呼ばれます。

プロシージャを呼び出す前に、使用するコードのセクションを最初に見つける必要があります。簡単なプロシージャを呼び出すには、名前を入力します。次に例を示します。

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"

msgbox strFullName
End Sub

Sub Exercise()
    CreateCustomer
End Sub

プロシージャの名前を使用して呼び出すだけでなく、その前にCallキーワードを置くこともできます。次に例を示します。

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    Call CreateCustomer
End Sub

Callキーワードを使用して、または使用せずにプロシージャを呼び出す場合、オプションで名前の右側に開き括弧と閉じ括弧を入力できます。次に例を示します。

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    CreateCustomer()
End Sub

手順とアクセスレベル

可変アクセスと同様に、プロシージャへのアクセスはアクセスレベルによって制御できます。プロシージャは、プライベートまたはパブリックにすることができます。プロシージャのアクセスレベルを指定するには、その前にPrivateまたはPublicキーワードを付けます。次に例を示します。

Private Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

グローバル変数に適用されたルールは同じです:

プライベート:プロシージャをプライベートにすると、同じモジュールの他のプロシージャから呼び出すことができます。外部モジュールのプロシージャは、そのようなプロシージャにアクセスできません。

また、プロシージャがプライベートの場合、その名前は[マクロ]ダイアログボックスに表示されません。

パブリック:パブリックとして作成されたプロシージャは、同じモジュールのプロシージャおよび他のモジュールのプロシージャから呼び出すことができます。

また、プロシージャがパブリックとして作成された場合、[マクロ]ダイアログボックスにアクセスすると、その名前が表示され、そこから実行できます。

3
Rockey

引数を渡すと、モジュール内のプロシージャが有用で汎用的になります。

例えば:

Public Function DoSomethingElse(strMessage As String)  
    MsgBox strMessage
End Function

StrMessageという文字列変数で渡されるメッセージを表示できるようになりました。

1
Mark3308

関数をフォームの新しいボタンに追加するには:(関数を呼び出すためにマクロを使用しないでください)

関数(関数MyFunctionName())を作成し、フォームデザインビューになったら:

  1. 新しいボタンを追加します(古いボタンを再割り当てできるとは思いませんが、わかりません)。
  2. ボタンWizardウィンドウが開いたら、[キャンセル]をクリックします。
  3. ボタンプロパティの[イベント]タブ-[クリック時]フィールドに移動します。
  4. そのフィールドのドロップダウンメニューで、[イベントプロシージャ]を選択します。
  5. ここで...が含まれるドロップダウンメニューの横のボタンをクリックすると、フォームのVisual Basicウィンドウでnew Private Subが表示されます。
  6. そのPrivate Subタイプで:MyFunctionNameを呼び出します
    次のようになります。

Private Sub Command23_Click()

MyFunctionNameを呼び出す

サブ終了

  1. 次に、保存します。
0
Gary C