vb如何获取多个excel程序其中一个的控制权? 在一个电脑上,打开了多个E
答案:2 悬赏:0
解决时间 2021-01-27 06:24
- 提问者网友:感性作祟
- 2021-01-26 08:15
vb如何获取多个excel程序其中一个的控制权? 在一个电脑上,打开了多个E
最佳答案
- 二级知识专家网友:动情书生
- 2021-01-26 09:19
要知道文件地址和文件名
代码:
Private Sub Command1_Click()
Dim nExcel As Object, mExcel as Object
Set nExcel = GetObject("C:Test1.xlsx")
Set mExcel = GetObject("E:Test2.xlsx")
nExcel.Worksheets(1).Range("A1")="这是第一个文件"
mExcel.Worksheets(1).Range("A1")="这是第二个文件"
'更改后可能要稍等一会,打开的文件中才能看到结果
Set nExcel = Nothing
Set mExcel = Nothing
End Sub如果使用GetObject(,"Excel.Application"), 始终只能得到第一个Excel实例,另一个不同进程的Excel得不到。
追问:我问题可能没有提清楚,两个文件是已经打开了的,这样会不会让Excel提示要不要重新打开文件?如果在第二个实例中已打开文件2,这样直接打开文件的操作会不会在实例1弹出文件被占用的对话框导致打开失败或再以只读方式打开?今天电脑不在边上,无法验证,等我验证,谢谢你的建议
追答:我知道你的意思,打开仍可以操作。后来有一次用createobject代替上面的GETobject,也可以操作已经打开的Excel
追问:有没有QQ号?以后多跟你请教
代码:
Private Sub Command1_Click()
Dim nExcel As Object, mExcel as Object
Set nExcel = GetObject("C:Test1.xlsx")
Set mExcel = GetObject("E:Test2.xlsx")
nExcel.Worksheets(1).Range("A1")="这是第一个文件"
mExcel.Worksheets(1).Range("A1")="这是第二个文件"
'更改后可能要稍等一会,打开的文件中才能看到结果
Set nExcel = Nothing
Set mExcel = Nothing
End Sub如果使用GetObject(,"Excel.Application"), 始终只能得到第一个Excel实例,另一个不同进程的Excel得不到。
追问:我问题可能没有提清楚,两个文件是已经打开了的,这样会不会让Excel提示要不要重新打开文件?如果在第二个实例中已打开文件2,这样直接打开文件的操作会不会在实例1弹出文件被占用的对话框导致打开失败或再以只读方式打开?今天电脑不在边上,无法验证,等我验证,谢谢你的建议
追答:我知道你的意思,打开仍可以操作。后来有一次用createobject代替上面的GETobject,也可以操作已经打开的Excel
追问:有没有QQ号?以后多跟你请教
全部回答
- 1楼网友:往事埋风中
- 2021-01-26 09:40
vb获取控制excel的权限。
Public Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, _
ByRef lpdwProcessId As Long) As Long
Function KillProcess(hwnd As Long)
Dim CurrentForegroundThreadID As Long
Dim strComputer As String
Dim objWMIService
Dim colProcessList
Dim objProcess
Dim ProcIdXL As Long
ProcIdXL = 0
CurrentForegroundThreadID = GetWindowThreadProcessId(hwnd, ProcIdXL)
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where ProcessID =" & ProcIdXL)
For Each objProcess In colProcessList
objProcess.Terminate
Next
End Function
KillProcess (ExcelApplication.hwnd)
追问:这个貌似是终结进程的,我要的是取得控制权。另外killprocess()里面的hwnd如何判断是我想要的那个实例的?因为有多个Excel实例存在
Public Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, _
ByRef lpdwProcessId As Long) As Long
Function KillProcess(hwnd As Long)
Dim CurrentForegroundThreadID As Long
Dim strComputer As String
Dim objWMIService
Dim colProcessList
Dim objProcess
Dim ProcIdXL As Long
ProcIdXL = 0
CurrentForegroundThreadID = GetWindowThreadProcessId(hwnd, ProcIdXL)
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where ProcessID =" & ProcIdXL)
For Each objProcess In colProcessList
objProcess.Terminate
Next
End Function
KillProcess (ExcelApplication.hwnd)
追问:这个貌似是终结进程的,我要的是取得控制权。另外killprocess()里面的hwnd如何判断是我想要的那个实例的?因为有多个Excel实例存在
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯