0
Accessで実行されているVBA関数には本当に奇妙な問題があります。この関数が呼び出されると、タスクマネージャーで本当に終了しないようにAccessに何かが発生します。この関数が実行されないと、Accessは正常に終了します。フォームオブジェクトをパラメータとして渡すこととは何かがあるように感じますが、なぜこれが起こっているのか理解できません。MSAccess.EXEは、終了後もバックグラウンドで開いたままです。VBA /フォームオブジェクトの問題
関数の呼び出しは次のようになります。
...
With Forms!frmbuytool
'...setting visible properties of form objects
SetColumnOrder (!sfmReordersView.Form)
End with
...
関数は次のようになります。
私は追加Public Sub SetColumnOrder(frm As Form)
Dim db As Database
Dim rs As Recordset
Dim Username As String
Dim DataSheetID As Integer
Set db = CurrentDb
Username = Environ("USERNAME")
Set rs = db.OpenRecordset("SELECT DatasheetID FROM sysDataSheets WHERE DataSheetName = """ & frm.Name & """")
DataSheetID = rs!DataSheetID
'load up user settings
Set rs = db.OpenRecordset("SELECT * FROM sysUserSettings WHERE Username = """ & Username & """ AND DatasheetID = " & DataSheetID)
'if no settings are found for the user, use the defaults
If rs.EOF Then
If IsRowUser Then
Set rs = db.OpenRecordset("SELECT * FROM sysUserSettings WHERE Username = ""ROW_Default"" AND DatasheetID = " & DataSheetID)
Else
Set rs = db.OpenRecordset("SELECT * FROM sysUserSettings WHERE Username = ""CAN_Default"" AND DatasheetID = " & DataSheetID)
End If
End If
'Apply settings
Do While Not rs.EOF
With frm.Controls(rs!ColumnName)
.ColumnOrder = rs!ColumnOrder
.ColumnWidth = rs!ColumnWidth
.ColumnHidden = rs!ColumnHidden
End With
rs.MoveNext
Loop
frm.Refresh
Set frm = Nothing
Set rs = Nothing
Set db = Nothing
End Sub
何とかフォームオブジェクトではないことを考えて、「FRM = Nothingを設定していません」解放されましたが、それは助けになりませんでした。
ありがとうございました。
を使用する - この呼び出しが間違っています。フォームを参照として渡すのではなく、フォームを評価しています。 'Call SetColumnOrder(!sfmReordersView.Form)'または 'SetColumnOrder!sfmReordersView.Form'を試してください。 – Andre
@Andre - OMGあなたは完全に正しいです。それを指摘していただきありがとうございます。これは私が持っていた問題を解決しました! – ArcherBird
FWIWこれは文書化されている[docsSO](http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just-always-use-parentheses #t = 201612122152274158757) –