gpt4 book ai didi

linux - 当从 Linux 机器调用时,Excel 作为后台进程启动。我需要它作为一个应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:11 33 4
gpt4 key购买 nike

我必须使用位于 Windows 服务器中的批处理文件 (run_excel.bat) 从 Linux 服务器启动 Excel (2010)。 Unix 命令是'ssh account@domain pathname\run_excel.bat'run_excel.bat 文件只有一行,"start c:\...\excel.exe c:\pathname_of_program\this_excel.xlsm"。 Excel 程序应该做一些计算,它的 VBA 必须在某个阶段 msgbox 询问 “你想修改数据吗?” 问题是 Excel 启动但从不问这个问题,因为它仍然是后台进程,而不是应用程序——任务管理器可以看到这一点。我在 Workbooks_Open() 中包含了声明 Application.Visible = True,但 Excel 仍然在后台,永远不可见,并且不会在它所在的位置停止应该。

但是,如果我从 Windows 服务器启动 run_excel.bat(通过双击或从 cmd 行),批处理文件确实会调用 Excel 并且它作为应用程序打开没有问题,在必须停下来问问题的地方停下来,并与用户互动。

有什么方法可以强制 Excel 在从 Linux 机器调用时作为应用程序启动?此 Excel 程序必须自动运行,直到它提示用户。

最佳答案

根据 Excel 应用程序的隐藏方式,Application.Visible = True 可能不足以显示您的工作簿(和您的 MsgBox)。

您的解决方案可以很简单:

ActiveWindow.Visible = True

显示所有 Excel 窗口

如果有问题的窗口不是事件窗口,您可以显示它们所有:

Sub ShowAllExcelWindows()
Dim ww As Window
With Application
.Visible = True
For Each ww In .Windows
ww.Visible = True
Next ww
End With
End Sub

进一步的故障排除

您可以通过以下方式确认 Excel 应用程序 每个Excel 窗口的状态:

Sub checkActiveWindow()
With ActiveWindow
Debug.Print "activeWindow:", ".Caption=", .Caption
Debug.Print , ".Visible=", .Visible
Debug.Print , ".View=", .View
Debug.Print , ".WindowState=", .WindowState
End With
End Sub

XlWindowState Enumeration

 WindowState = xlMaximized -4137  
xlMinimized -4140
xlNormal -4143

注意事项:

  • 在某些情况下,当 Application.Visible=False 时,Excel 可能会“认为”ActiveWindow.Visible=True 尽管这显然不可能。

  • Window(index) 编号根据上次激活的窗口而变化。 (ActiveWindow 始终是 Window(1)。)

  • 不要将 Window 对象与 Windows 对象混淆,后者表示 Excel Window 对象的集合。 Windows 对象的属性和方法影响所有打开的 Excel 窗口,例如 Windows.Arrange xlArrangeStyleTiled 将“平铺”所有打开的 Excel 窗口。

  • Window 对象Windows 对象均与同名操作系统相关,Microsoft window 一尘不染? :-)


检查所有 Excel 窗口的可见性

返回所有打开的 Excel 窗口以及 Excel 应用程序本身的窗口信息的过程稍长一些:

Sub checkExcelWindows()

With Excel.Application 'get application window info
Debug.Print "Application", ".Caption=", .Caption
Debug.Print , ".Visible=", .Visible
Debug.Print , ".WindowState=", .WindowState
Debug.Print , ".Windows.Count=", Application.Windows.Count
End With

Dim w: For w = 1 To Windows.Count 'loop through open windows
With Excel.Application.Windows(w)
Debug.Print vbLf & "Window(" & w & "):", ".Caption=", .Caption
If ActiveWindow.Index = .Index Then Debug.Print , "This is currently ""ActiveWindow""."
Debug.Print , ".Visible=", .Visible
Debug.Print , ".View=", .View
Debug.Print , ".WindowState=", Switch(.WindowState = xlMaximized, "Maximized", _
.WindowState = xlMinimized, "Maximized", .WindowState = xlNormal, "Normal")
End With
Next w

End Sub

可能有other properties出于故障排除的目的,您需要添加到过程中。


更多信息:

关于linux - 当从 Linux 机器调用时,Excel 作为后台进程启动。我需要它作为一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504834/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com