Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭用户从Access VBA打开的特定Excel文件_Excel_Ms Access_Vba - Fatal编程技术网

关闭用户从Access VBA打开的特定Excel文件

关闭用户从Access VBA打开的特定Excel文件,excel,ms-access,vba,Excel,Ms Access,Vba,我看到了如何使用的版本 Dim ran as Excel.Applcation 但是我使用的Access版本没有Excel.Application作为选项 我已经编写了以下运行的代码,但没有关闭该文件 Dim Path1 as String Dim objXL As Object Dim xlWB As Object Path1 = "C:/....." Set objXL = CreateObject("Excel.Application") Set xlWB = objXL.Workbo

我看到了如何使用的版本

Dim ran as Excel.Applcation 
但是我使用的Access版本没有Excel.Application作为选项

我已经编写了以下运行的代码,但没有关闭该文件

Dim Path1 as String
Dim objXL As Object
Dim xlWB As Object
Path1 = "C:/....."
Set objXL = CreateObject("Excel.Application")
Set xlWB = objXL.Workbooks.Open(Path1)


xlWB.Close False
Set xlWB = Nothing
objXL.Quit
Set objXL = Nothing

您可以使用以下代码关闭所有Excel文件(已发布):

Public Sub CloseAllExcel()
作为对象的Dim obj
关于GoTo ExitSub错误
作为整数的Dim i
“运行Excel应用程序的数量不应超过10000个
'虽然也可以使用,但无限循环的风险很小
对于i=0到10000
Set obj=GetObject(,“Excel.Application”)
退出
接下来我
进出口银行:
端接头
但是,如果我们要关闭一个特定的,我们需要一些我不能做的Win32魔法,但是,如果你不能做什么,你可以在StackOverflow上找到它。 弗洛伦特B发现的大多数代码

首先,声明我们的Win32函数

#如果是VBA7,则
私有声明PtrSafe函数AccessibleObjectFromWindow库“oleacc”(_
ByVal hwnd作为LongPtr,ByVal dwId作为Long,riid作为Any,ppvObject作为Object)作为Long
私有声明PtrSafe函数FindWindowExA Lib“user32”(_
ByVal hwndParent作为LongPtr,ByVal hwndChildAfter作为LongPtr_
ByVal LPSZ类作为字符串,ByVal LPSZ窗口作为字符串)作为长PTR
#否则
私有声明函数AccessibleObjectFromWindow库“oleacc”(_
ByVal hwnd为Long,ByVal dwId为Long,riid为Any,ppvObject为Object)为Long
私有声明函数FindWindowExA Lib“user32”(_
ByVal hwndParent尽可能长,ByVal hwndChildAfter尽可能长_
ByVal LPSZ类作为字符串,ByVal LPSZ窗口作为字符串)一样长
#如果结束
然后使用它们获取所有正在运行的Excel应用程序对象

公共函数GetExcelInstances()作为集合
Dim guid&(0到3),acc作为对象,hwnd,hwnd2,hwnd3
guid(0)=&H20400
guid(1)=&H0
guid(2)=&HC0
guid(3)=&H46000000
Set GetExcelInstances=新集合
做
hwnd=FindWindowExA(0,hwnd,“XLMAIN”,vbNullString)
如果hwnd=0,则退出Do
hwnd2=FindWindowExA(hwnd,0,“XLDESK”,vbNullString)
hwnd3=FindWindowExA(hwnd2,0,“EXCEL7”,vbNullString)
如果AccessibleObjectFromWindow(hwnd3和HFFFFF0,guid(0),acc)=0,则
GetExcelInstances.Add acc.应用程序
如果结束
环
端函数
然后使用该集合,以便我们可以检查哪个集合打开并关闭工作簿

Public Sub-close工作簿(工作簿路径为字符串)
将实例作为集合
Set-excelInstances=GetExcelInstances
将应用程序作为对象
将工作簿设置为对象
对于excelInstances中的每个excelApp
对于Excel App.工作簿中的每个Excel工作簿
如果excelWorkbook.FullName=workbookPath,则
Excel工作簿。关闭False
如果结束
下一个Excel工作簿
如果excelApp.Workbooks.Count=0,则
退出
如果结束
下一个excelApp
端接头
然后,实现关闭功能

Dim Path1作为字符串
Path1=“C:/…”
关闭工作簿路径1

您可以使用以下代码关闭所有Excel文件(已发布):

Public Sub CloseAllExcel()
作为对象的Dim obj
关于GoTo ExitSub错误
作为整数的Dim i
“运行Excel应用程序的数量不应超过10000个
'虽然也可以使用,但无限循环的风险很小
对于i=0到10000
Set obj=GetObject(,“Excel.Application”)
退出
接下来我
进出口银行:
端接头
但是,如果我们要关闭一个特定的,我们需要一些我不能做的Win32魔法,但是,如果你不能做什么,你可以在StackOverflow上找到它。 弗洛伦特B发现的大多数代码

首先,声明我们的Win32函数

#如果是VBA7,则
私有声明PtrSafe函数AccessibleObjectFromWindow库“oleacc”(_
ByVal hwnd作为LongPtr,ByVal dwId作为Long,riid作为Any,ppvObject作为Object)作为Long
私有声明PtrSafe函数FindWindowExA Lib“user32”(_
ByVal hwndParent作为LongPtr,ByVal hwndChildAfter作为LongPtr_
ByVal LPSZ类作为字符串,ByVal LPSZ窗口作为字符串)作为长PTR
#否则
私有声明函数AccessibleObjectFromWindow库“oleacc”(_
ByVal hwnd为Long,ByVal dwId为Long,riid为Any,ppvObject为Object)为Long
私有声明函数FindWindowExA Lib“user32”(_
ByVal hwndParent尽可能长,ByVal hwndChildAfter尽可能长_
ByVal LPSZ类作为字符串,ByVal LPSZ窗口作为字符串)一样长
#如果结束
然后使用它们获取所有正在运行的Excel应用程序对象

公共函数GetExcelInstances()作为集合
Dim guid&(0到3),acc作为对象,hwnd,hwnd2,hwnd3
guid(0)=&H20400
guid(1)=&H0
guid(2)=&HC0
guid(3)=&H46000000
Set GetExcelInstances=新集合
做
hwnd=FindWindowExA(0,hwnd,“XLMAIN”,vbNullString)
如果hwnd=0,则退出Do
hwnd2=FindWindowExA(hwnd,0,“XLDESK”,vbNullString)
hwnd3=FindWindowExA(hwnd2,0,“EXCEL7”,vbNullString)
如果AccessibleObjectFromWindow(hwnd3和HFFFFF0,guid(0),acc)=0,则
GetExcelInstances.Add acc.应用程序
如果结束
环
端函数
然后使用该集合,以便我们可以检查哪个集合打开并关闭工作簿

Public Sub-close工作簿(工作簿路径为字符串)
将实例作为集合
Set-excelInstances=GetExcelInstances
将应用程序作为对象
将工作簿设置为对象
对于excelInstances中的每个excelApp
对于Excel App.工作簿中的每个Excel工作簿
如果excelWorkbook.FullName=workbookPath,则
Excel工作簿。关闭False
如果结束
下一个Excel工作簿
如果excelApp.Workbooks.Count=0,则
退出
如果结束
下一个excelApp
端接头
然后,实现关闭功能

Dim Path1作为字符串
Path1=“C:/…”
closeWor