2016-12-12 5 views
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を設定していません」解放されましたが、それは助けになりませんでした。

ありがとうございました。

+2

を使用する - この呼び出しが間違っています。フォームを参照として渡すのではなく、フォームを評価しています。 'Call SetColumnOrder(!sfmReordersView.Form)'または 'SetColumnOrder!sfmReordersView.Form'を試してください。 – Andre

+0

@Andre - OMGあなたは完全に正しいです。それを指摘していただきありがとうございます。これは私が持っていた問題を解決しました! – ArcherBird

+0

FWIWこれは文書化されている[docsSO](http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just-always-use-parentheses #t = 201612122152274158757) –

答えて

2

余分な括弧

SetColumnOrder (!sfmReordersView.Form) 

との通話が問題でした。フォームオブジェクトを参照として渡すのではなく、評価しています。 `SetColumnOrder(!sfmReordersView.Form)`

Call SetColumnOrder(!sfmReordersView.Form) 

または

SetColumnOrder !sfmReordersView.Form 
関連する問題