经典用法_找到已打开的相同文件,就自动关闭它(多种语句搜索与提示)
在设计数据库窗体导出这步时,往往都已打开了相同的文件,但在工作中我们都会忘记,而重新打开或者已导出了数据时,设置了自动打开文件,临时有事外出回来后忘记了此事又重新打开,往往会替换掉原来的文件。出现这种情况非常不方便,所以就在网搜索了一下,找到一些判断语句,结合一些对话语法,完成了自动判断文件是不是已经打开,然后提示怎样操作。
为了让更多的人能理解,在语句处写下了注释,注释有错的地方,请看客给予提出宝贵意见。
Private Sub export_Click()
On Error GoTo 200 '此处是判别如果出现文件已打开了,就直接跳到200行处执行新的命令
Dim myxl As Object '是声明myxl变量为Object 数据类型
Set myxl = GetObject(, "excel.application") '获取一个对象
For Each axls In myxl.Workbooks '循环语句,获取对象文件
If InStr(1, axls.Name, "柴油罐组采购检查表.xls", 1) Then '此处是对已获取到的文件进行检测是否已经打开,如果打开了,就进行提示
MsgBox "文档原已打开,现将提示您进行操作!" '提示语句
'下面加入一条MSG人机对话,提示操作者是否想对原已经打开的文件进行关闭还是保留操作
msg = "如果重新打开,请选择“是”,程序将为您关闭文件!,随后您重新点击按钮打开文件!" & vbCrLf & _
" " & vbCrLf & _
"如果不重新打开,请选择“否”,程序将为您保持现有打开状态!"
If MsgBox(msg, vbYesNo) = vbYes Then '固化选择是,就关闭文件,另选择就保留打开状态。vbYes和vbNo的设置是要看您给对方一个怎样的操作,操作的结果就是紧接着后面的语句
axls.Close '关闭文档
myxl.Quit '退出excel
Exit For
End If
End If
Next axls
Set myxl = Nothing ''释放内存资源,让计算有更多的空间,通道顺畅。
GoTo 300
'下面是执行提示命令,提示操作者怎样进行操作,是人机对话
200: If MsgBox("文档没有打开, 或者不存在!" & vbCrLf & _
" " & vbCrLf & _
"点击“是”,将为您创建文件。点击“否 ”,直接退出!", vbYesNo) = vbNo Then
Exit Sub
300: MsgBox "再见" '提示语句
Else '此处是在上面如果都没有出现错误的情况下,转到这里开始执行下面一切语句命令
Dim fileA As String '定义一个字符串类型的变量fileA
Dim fileB As String '定义一个字符串类型的变量fileB
fileA = CurrentProject.Path + "\柴油罐组采购检查表模板.xls " '指定文件名称
fileB = CurrentProject.Path + "\" & Format(Now(), "yyyy" & "年" & "mm" & "月" & "dd" & "日") & "柴油罐组采购检查表.xls " '指定文件名称变更成为以日期为前辍的文件名称
FileCopy fileA, fileB '执行复制文件另存为新的文件
Set rst = Nothing '释放内存资源,让计算有更多的空间,通道顺畅。
MsgBox "已完成采购周报模板更名,您可以在新文件中插入数据了!"
Dim xlApp As excel.Application
Dim xlBook As Workbook, xlSheet As Worksheet '定义
Set xlApp = CreateObject("Excel.Application")
Set xlApp = New excel.Application
DoCmd.SetWarnings False ' 执行下面查询时,屏蔽掉提示消息
'开始第一次的第1个文件数据导出
Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\" & Format(Now(), "yyyy" & "年" & "mm" & "月" & "dd" & "日") & "柴油罐组采购检查表.xls") '打开要输出的EXECL文件
Set xlSheet = xlBook.Worksheets(1) '这里是插入数据而需要打开上报数据文件中第1个工作表
xlSheet.Range("A3", "T60000").ClearContents '这里是标注插入数据从A列第3行至J列60000行之间
Me.checkList_export.Form.Recordset.MoveFirst '从窗体上把数据导出,但窗体必须要打开
xlBook.Worksheets(1).Range("A3").CopyFromRecordset Me.checkList_export.Form.Recordset '这里是完成第1个数据文件的导出
xlBook.Save
xlBook.Close '关闭工作薄
Set rst = Nothing '释放内存资源,让计算有更多的空间,通道顺畅。
DoEvents
MsgBox "您选择的数据已完成导出,正在打开文件,请等待!" '提示数据文件导出已完成,再提示后面操作
GoTo 120
120: MsgBox "祝您工作愉快"
FileName = CurrentProject.Path & "\柴油罐组采购检查表.xls "
Shell "excel.exe " & FileName, 3 '打开文件
End If
End Sub