0

私はアクセスデータベースを持っています。これは前の質問と似ていますが、ドロップダウンとサブフォームがあります。ドロップダウンからオプションを選択して、以下のサブフォームで対応するサブフォームを開くことができるようにしたいと思います。これが私のコードです...

Option Compare Database
Option Explicit

Private Sub btnCloseHRForms_Click()
  DoCmd.Close

End Sub

Private Sub cmbSelectFrms_AfterUpdate()
Select Case selectSubform
  Case 1
    Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True
  Case 2
    Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True
  Case 3
    Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True
End Select
End Sub

Private Sub Form_Load()
Dim dba As Database
Dim rst As Recordset
Dim SQL As String

Set dba = CurrentDb
Set rst = dba.OpenRecordset("tbl_Forms", dbOpenDynaset, dbSeeChanges)
SQL = "SELECT ListName FROM tbl_Forms"
Set rst = dba.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)

Set rst = Nothing
Set dba = Nothing
End Sub

Function selectSubform(ID)
Dim dbacurrent As Database
Dim rstcurrent As Recordset
Dim SQL As String

Set dbacurrent = CurrentDb
SQL = "SELECT * FROM tbl_Forms WHERE ID = " & ID
Set rstcurrent = dbacurrent.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)
selectSubform = rstcurrent.Fields("ID")

Set dbacurrent = Nothing
Set rstcurrent = Nothing

End Function

助言がありますか?VBAにアクセスするのは初めて

4

1 に答える 1

1

関数 selectSubform(ID) には ID パラメータを渡す必要がありますが、渡していません。関数を定義する場合:

Function selectSubform(ID)
    ' ... Do some stuff
    selectSubform = SomeValue
End Function

ID という名前のパラメーターが必要であることをコンパイラーに伝えています。

余談ですが、各コード モジュールの先頭に Option Explicit ステートメントを配置し、エディターで Option Explicit オプションをオンにすることを強くお勧めします。これには、データ型を示す必要があります。現状では、ID パラメーターとして期待されるデータ型がわかりません。また、関数によって返されるデータ型もわかりません (ただし、Select Case ステートメントで見かけの整数として使用されているため、暗示されています)。いくつかの仮定を立てて、次の変更を試みます (今はテストできませんし、コードの残りの部分について話すこともできません)。

ここでは、コンボ ボックスの選択が適切なサブフォームの ID であると想定しています。そうでない場合は、ID パラメータのソースを明確にする必要がある場合があります)。

Private Sub cmbSelectFrms_AfterUpdate()
    Select Case selectSubform(Me.cmbSelectForms)
        Case 1
            Forms!frm_HRForms!subformHRForms.Form!subform1.Visible = True
        Case 2
            Forms!frm_HRForms!subformHRForms.Form!subform2.Visible = True
        Case 3
            Forms!frm_HRForms!subformHRForms.Form!subform3.Visible = True
    End Select
End Sub 

ここには他の問題が埋もれている可能性があります。ただし、明示的な変数宣言を要求するように VBA IDE を設定し、各コード モジュールに Option Explicit を追加すると、問題の特定に大いに役立ちます。

于 2012-12-26T16:06:08.283 に答える