因此,我在excel中使用以下代码在启动时读取环境参数:
Dim ExcelArgs As String
Dim arg As String
ExcelArgs = Environ("ExcelArgs")
MsgBox ExcelArgs
If InStr(UCase(ExcelArgs), "CREO") >= 0 Then
Application.DisplayAlerts = False
If Len(ExcelArgs) > Len("CREO") Then
arg = Split(ExcelArgs, ",")(1)
Call Creo.addNewPartToPartslist(arg)
End If
Application.DisplayAlerts = True
End If在我的批处理脚本中有下面这一行:
echo "Launch excel"
Set "ExcelArgs=CREO,DXFWITHOUTDRW
"C:\Program Files (x86)\Microsoft Office\OFFICE16\Excel.exe" /r "%APPDATA%\Microsoft\Excel\XLSTART\PERSONAL.XLSB"
exit 0问题是,如果我运行一次批处理文件,保持excel打开,将批处理文件中的excelargs更改为CREO,wqhatever,并重新运行批处理文件的excelargs,做不到更新!
因此,我的理论是,excel要么缓存环境变量,要么批处理脚本不能设置它。
有关将参数传递到excel的一些信息的链接:https://superuser.com/questions/640359/bat-file-to-open-excel-with-parameters-spaces
发布于 2016-09-02 04:12:02
通常,excel会查看是否有以前的实例正在运行,并让此实例处理文件的打开。
这很重要吗?是的,在您的情况下,打开文件的两个请求都由同一个excel进程处理。
这有什么不同呢?不共享环境变量。每个进程都有自己的环境块,这些环境块是在创建进程时初始化的(可以是自定义块,也可以是父进程环境的副本),一旦为进程创建了环境,就只有这个进程可以更改其环境。
在本例中,当您启动excel时,新进程将获得cmd进程的环境块的副本。稍后,当您更改cmd环境时,已在运行的excel实例看不到环境的任何更改,并且,由于打开excel的新请求被转换为对前一个进程的请求,因此不会有包含具有更改的cmd环境的新副本的新进程。
我看到的使其工作的唯一方法是强制excel启动一个新的进程(该进程将继承cmd实例中的更改),而不是重用前一个进程。
但这取决于excel版本。据我所知,2013版本包括一个/x开关,以强制单独使用进程。对于以前的版本,也许this question或this one可以帮助您。
发布于 2016-09-09 17:20:33
Excel已打开

然后启动批处理脚本:

默认情况下,它不会将其打开为只读,而是提示我,这不是一个大问题,但有点烦人,而且它还使得不可能循环多次运行不同输入参数的批处理。

有一点不确定我应该如何张贴这个,不能粘贴图片在评论中,并编辑原来的问题,这是如何在新的实例中启动环境变量(/x做了诀窍),但现在/r不工作,我应该作为新问题张贴和参考这个问题,或者我可以留下它作为答案?
https://stackoverflow.com/questions/39272980
复制相似问题