我想我在这里遇到时间问题。
情境:
在Excel启动时有一个帮助程序加载项检查更新并更新另一个加载项。
棘手的部分是“在Excel启动时”。通过帮助程序加载项的Workbook_Open()事件打开Excel,我可以检查更新。
实际上它确实有效,另一个插件得到更新。
问题是当用户打开Excel单击.xlsx / .xls / .csv / etc文件时。
我想检测到这一点,如果通过Excel图标打开Excel,则运行更新检查,否则它必须不执行任何操作。
如何确定Excel的打开方式?
到目前为止我尝试了什么:
这两个测试都无法正常工作,因为我认为,在创建空工作簿(如果Excel通过其图标启动)或加载(如果通过单击启动Excel启动)之前触发了辅助加载项Workbook_Open事件一个.xls文件)。
提前谢谢你:)
实施了可能的解决方案,检查命令行参数: https://www.dmcinfo.com/latest-thinking/blog/id/247/read-command-line-parameters-from-vba
Option Explicit
Private Declare Function GetCommandLineA Lib "kernel32" () As Long
Private Declare Function lstrcpynA Lib "kernel32" ( _
ByVal pDestination As String, ByVal pSource As Long, _
ByVal iMaxLength As Integer) As Long
Private Sub Workbook_Open()
Dim pCmdLine As Long ' Pointer to the string
Dim strCmdLine As String ' Command line string
' Get the pointer to the command line string
pCmdLine = GetCommandLineA
' Fill the string with zeros
' 300 characters for command line seems to be enough
strCmdLine = String(300, vbNullChar)
' Copy from the pointer to VBA-style string
lstrcpynA strCmdLine, pCmdLine, Len(strCmdLine)
' At this point we got the string
' But rest of it filled with 0 characters.
strCmdLine = Left(strCmdLine, InStr(1, strCmdLine, vbNullChar) - 1)
End Sub
如果单独启动Excel,结果为:
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
否则:
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /dde