2016-08-21 5 views
1

私はMySysObjectsからその行ソースを取得し、DBのフォームの完全なリストを示すコンボボックスを持っています。 フォーム名はコンボボックスから選択され、VBAを使用して文字列として関数に渡されます(その文字列をFormに変換する方法がわからないため)。だから、 、フォームの文字列値が、私は今、私がものを行うことを望む形式の文字列変数を持つ関数に渡されたら... 私が通常使用する:MS Accessリファレンス文字列変数によるフォーム

Function MyFunction() 
    Dim frmForm as Form 
    Set frmForm = form("MyForm") 
    DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden 
    With frmForm 
     Do stuff... 
    End With 
End Function 

しかし!私は、関数に文字列変数を渡されてきたように - など:

Function MyFunction(strFormName as String) 
    Dim frmForm as Form 
    Set frmForm = Form(strFormName) 'THIS DOESN'T WORK 
    DoCmd.OpenForm frmForm.Name, acDesign, , , , acHidden 
    With frmForm 
     Do stuff... 
    End With 
End Function 

私の質問は、私はFormオブジェクトを返すようにSetステートメントを使用しない方法ですか? フォーム上のコンボボックスの値を変換し、Formオブジェクトを関数に渡すか、コンボボックスの値を関数に変換し、Setなどを使用して変換することができます。 私はそれが簡単な構文の質問であることを望んでいますが、私が知っているすべてを試したので、私は試していないその謎めいた答えが必要です!

Set frmForm = Form(strFormName) 

ファーストコレクションの名前がForms、ないFormです:

答えて

1

は、この行で2つの問題があります。 もう一つは、Formsは現在開いているフォームのコレクションです。したがってstrFormNameがその時点で開いていないと、Forms(strFormName)はエラーをスローします。

DoCmd.OpenForm strFormName, acDesign, , , , acHiddenを実行すると、フォームはデザインビューで開き、既に開いているかどうかに関係なく非表示になります。そして、あなたはエラーを引き起こさずにSet frmFormを行うことができます。

Function MyFunction(strFormName As String) 
    Dim frmForm As Form 
    DoCmd.OpenForm strFormName, acDesign, , , , acHidden 
    Set frmForm = Forms(strFormName) 
    With frmForm 
     'Do stuff... 
    End With 
End Function 
+0

返信ありがとうございます! はい、私はいくつかのタイプミスをしたことがわかります! フリーハンドを入力するだけで、大文字の問題や欠落した文字(特に 's')を見落としたことがわかりました。 基本的に、これまでに何度も読んだことがあります(フォームが開かれるまでは、何も設定できなくなりました!)が、実際にこれまで使用したことがないので、基本的な点を無視する! 問題が修正されました。そして私はそれについても数時間研究したと思っています!一度あなたが知っている。ええと! – TimesMoney

+0

... ありがとう! 感謝! – TimesMoney

関連する問題