我有在打开 excel 书时获取命令行参数的代码(64 位;但 32 位代码也存在于 #if 子句下)。
例如,当我在命令提示符下运行以下代码行时,我希望能够获取输入字符串作为命令行参数:
启动 Excel ".\AwajiPush.xlsm" /p/"kjh%dg.pdf"
(顺便说一句,“开始”之所以在那里,是为了它可以在 .bat 批处理文件中工作)
我希望能够捕获 ".\AwajiPush.xlsm" 和 /p/"kjh%dg.pdf" 作为参数。
代码不会那样做。
为什么不获取第二个参数?
我不太了解指针的工作原理。是否有一段代码可以用来捕获至少一个包含两个参数的字符串,以便我可以解析它。如果它包含更多,那很好。我总是可以解释它,只要它是一致的。
我将存根放入程序 (MsgBox) 中,但我不确定为什么第二个存根显示为空白。
这是代码:
'Put this code in a new module called Parameters
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function GetCommandLineL Lib "kernel32" _
Alias "GetCommandLineA" () As LongPtr
Private Declare PtrSafe Function lstrcpyL Lib "kernel32" _
Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As LongPtr) As Long
Private Declare PtrSafe Function lstrlenL …Run Code Online (Sandbox Code Playgroud) 我想在vba代码中获取活动工作簿的路径。
ActiveWorkbook.Path做这个
但
我需要它来检索如下内容:
\\MachineName\ShareFolder\ETC\ETC2
Run Code Online (Sandbox Code Playgroud)
不:
S:\ETC\ETC2
Run Code Online (Sandbox Code Playgroud)
哪里S:映射到\\MachineName\ShareFolder\。我该怎么做?
是否有一种有效的方法从SQL Server中删除记录而不使用IN以下方案中的关键字:
-- If Documents were deleted, remove them from your ocean
DELETE FROM IndexHistory
WHERE DocId IN (SELECT IH.Docid
FROM IndexHistory IH
LEFT JOIN IndexedLineItems I ON IH.Docid = I.DocId
WHERE I.Docid IS NULL)
Run Code Online (Sandbox Code Playgroud)
如果您研究此场景,则您要从括号内的查询中删除所有记录.
据记载,使用"IN"是低效的.
因此,人们会认为应该有一种方法可以在没有"IN"的情况下删除它们,因为所有记录都可以在不使用"IN"的情况下识别.
因此,例如,我认为这样的事情可能是可能的,但我没有正确的语法:
DELETE FROM IndexHistory IH
LEFT JOIN IndexedLineItems I ON IH.Docid = I.DocId
WHERE I.Docid IS NULL
Run Code Online (Sandbox Code Playgroud)
如果答案是"不,那是不可能的",请不要低估这一点.
这是一个很好的问题.
如果不可能,也许可以建议改进Microsoft的语言.
在我这样做之前,我想我会在这个板上张贴,看看我是否遗漏了一些东西....
我是否可以以其他用户身份运行 VBA 代码,从而防止用户直接重命名\删除某些文件和文件夹,但允许程序以允许重命名\删除某些文件和文件夹的其他用户身份运行。
vba ×3
excel ×2
32bit-64bit ×1
64-bit ×1
directory ×1
sql-server ×1
subquery ×1
syntax ×1
t-sql ×1