0

私はAccessデータベースを書いています。同一のフォームがいくつかあります。これらは、メインの連絡先テーブルのさまざまなフィールドのルックアップリストを編集するために使用されます。

たとえば、会社フィールドと国フィールドがあります。編集可能なリストごとに開くフォームは、アクティブなフォームからアクティブなテーブルを参照する方法がわからないため、それぞれの繰り返しvbaコードと同じです。

テーブル内のすべてのyes/noボックスをクリアするために現在持っているコードは次のとおりです。

Private Sub cmdClearTicks_Click()

    Dim db As Database
   ' Dim sel  As Control

    Set db = CurrentDb
    ' Clear all ticks of selected records
    db.Execute "UPDATE ContactCompany " _
        & "SET Selected = null "


    ' Update Selected Field
   Me.Requery

End Sub

ContactCompanyテーブルの名前です。このサブをグローバルに設定できるようにしたいのですがContactCompany、現在開いているフォームのテーブルを参照するために何を置き換える必要があるかを理解できません。Me.RecordSource動作しないものをすでに試しました。

非常に簡単な修正だと思いますが、とても感謝しています。

ショーンは以下に素晴らしい修正を投稿しました。私は今、フィルターも含めてグローバルに定義することに困惑しています。

Sub SelectFiltered(RS As String)

Dim strFilter As String
Dim strSQl As String

If InStr(RS, "FROM") Then
    RS = Mid(RS, InStr(RS, "FROM") + 5)
    If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
End If

strFilter = Me.Filter

If Me.FilterOn = False Then

'Select Case MsgBox("No search or filter applied.", vbCritical + vbOKOnly, "Warning")
'End Select

strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 "

Else

strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 " & _
"WHERE " & strFilter

End If

DoCmd.SetWarnings False
DoCmd.RunSQL strSQl
DoCmd.SetWarnings True

End Sub

Me.filterはグローバルサブでは機能しません。ショーン-これに対する答えはすぐにわかると思います。再度、感謝します!

4

1 に答える 1

0

あなたは使用に近いですMe.Recordsource

db.Execute "UPDATE " & Me.Recordsource & " SET Selected = null "
または、グローバル関数として必要な場合は、それに渡しMe.Recordsourceます

Sub ClearTicks(RS as string,StrFilter as string)

    Dim db As Database
    Set db = CurrentDb

    If InStr(RS, "FROM") Then 
        RS = Mid(RS, InStr(RS, "FROM") + 5)
        If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
    End If

    ' Clear all ticks of selected records
    db.Execute "UPDATE " & RS & " SET Selected = null "

    If StrFilter="" then 'no filter
    Else 'filter
    End If
End Sub

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

Private Sub cmdClearTicks_Click()
    ClearTicks Me.Recordsource,Me.Filter
    Me.Refresh
End Sub

より簡単に拡張できる、より再利用可能な関数メソッドが必要な場合はMe.Name、パラメーターとしてサブ/関数を呼び出し(例MySub Me.Name)、次に再利用可能な関数で呼び出します。

sub MySub(FrmName as string)
Forms(FrmName).Filter
Forms(FrmName).Recordsource
Forms(FrmName).AnyOtherParamater
于 2012-06-21T14:27:38.283 に答える