退出后MSAccess.EXE在后台保持打开状态:VBA / Form对象问题

时间:2016-12-12 21:39:53

标签: vba ms-access access-vba

我在Access中运行的VBA函数有一个非常奇怪的问题。调用此函数时,Access会发生一些事情,使其无法在任务管理器中真正退出。如果此功能未运行,Access将正常退出。我觉得它与将表单对象作为参数传递有关,但我无法理解为什么会发生这种情况。

对函数的调用如下所示:

...
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"认为形式对象不会被释放,但它没有帮助。

感谢您提供的任何见解!

1 个答案:

答案 0 :(得分:2)

带有额外括号的电话

<%= form_for @item, html: { multipart: true } do |f| %>
    <%= f.fields_for :item_images do |builder| %>
        <%= image_tag builder.object.image.url(:large), :class => "cropbox", 'data-id' => builder.object.id %>
        <% for attribute in [:crop_x, :crop_y, :crop_w, :crop_h] %>
            <%= builder.text_field attribute, :id => attribute + builder.object.id %>
        <% end %>
    <% end %>
<% end %>

是问题所在。您正在评估表单对象,而不是仅将其作为引用传递。使用

SetColumnOrder (!sfmReordersView.Form) 

Call SetColumnOrder(!sfmReordersView.Form)