添加DoCmd.Close行时访问未关闭

时间:2017-01-12 22:32:04

标签: vba ms-access access-vba

我添加了DoCmd.Close acQuery, "Import", acSaveNo

即使使用这行代码,我的访问窗口也不会关闭。

Option Compare Database

Option Explicit
Public Function Import()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim intFile As Integer
Dim strFilePath As String
Dim intCount As Integer
Dim strHold
strFilePath = "C:\Transfer\FromSynapseTest\TEST.csv"
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Import", dbOpenForwardOnly)
intFile = FreeFile
Open strFilePath For Output As #intFile
Do Until rst.EOF
   If CDate(rst(3)) >= Date And rst(98) <> 0 Then
       For intCount = 0 To rst.Fields.Count - 1
           strHold = strHold & rst(intCount).Value & "|"
       Next
       If Right(strHold, 1) = "|" Then
           strHold = Left(strHold, Len(strHold) - 1)
       End If
       Print #intFile, strHold
   End If
   rst.MoveNext
   strHold = vbNullString
Loop
Close intFile
rst.Close
Set rst = Nothing

DoCmd.Close acQuery, "Import", acSaveNo
End Function

由于我是通过宏调用函数,我认为我不能这样做

Sub subToCloseForm

    DoCmd.Close

End Sub

我也根据我读到的http://www.blueclaw-db.com/docmd_close_example.htm尝试了DoCmd.Close acQuery, " ", acSaveNo:如果将objecttype和objectname参数留空(默认常量,acDefault,假定为objecttype),Microsoft Access将关闭活动状态窗口

非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

您根本不需要代码DoCmd.Close acQuery, "Import", acSaveNo。此命令尝试关闭查询“导入”,但您没有打开此查询。您根据此查询打开了一个记录集,并正确关闭了记录集。

如果您需要关闭名为“导入”的表单,请使用

DoCmd.Close acForm, "Import", acSaveNo

答案 1 :(得分:0)

如果您要完全关闭Access,请使用:

Application.Quit

答案 2 :(得分:0)

您打开记录集而不是查询时,不需要您的代码行DoCmd.Close acQuery, "Import", acSaveNo。 rst.close并设置rst =没有足够的内存管理。

在旁注中,我建议包含一个if语句来单步执行记录集。如果记录集为空,如果未选中,则会收到错误。尝试在if语句中插入for循环:

If not rst.eof and not rst.bof then
     'for loop...

end if