Excel 如何让shell函数读取变量中的值而不是VBA中的变量名?

Excel 如何让shell函数读取变量中的值而不是VBA中的变量名?,excel,vba,variables,Excel,Vba,Variables,这个问题与我试图在Excel中实现的宏有关,特别是代码中的shell函数。代码的作用是执行chrome.exe,在文档的特定页面中打开一个PDF文件,代码不是我的,它来自本文: () 这就是我的问题所在: Dim arch As String arch = "file:///C:\Users\user\Downloads\Trabajo.pdf#page=6" If Not chromePath = "" Then Shell ("&q

这个问题与我试图在Excel中实现的宏有关,特别是代码中的shell函数。代码的作用是执行chrome.exe,在文档的特定页面中打开一个PDF文件,代码不是我的,它来自本文:

()

这就是我的问题所在:

Dim arch As String
arch = "file:///C:\Users\user\Downloads\Trabajo.pdf#page=6"

If Not chromePath = "" Then
    Shell ("""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" ""arch""")
End If
我真正需要它做的是,shell函数打开chrome.exe并转到存储在变量arch中的路径

在发布的代码中,其工作方式如下:

    Shell ("""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" ""file:///C:\Users\user\Downloads\Trabajo.pdf#page=6""")
我把PDF路径变成了一个变量,因为它在我交付包含excel文档和PDF的文件夹的每台电脑上都会改变

我已经设法让PDF路径被读取并放入变量arch中。
我觉得有点尴尬,因为这可能是一个非常愚蠢的问题。提前非常感谢。

将变量括在引号内将其转换为一个。您只需在半秒钟内查看它,就可以知道您的变量无法工作,因为您甚至没有将变量与字符串文字连接起来(例如
“MyString”&MyVar

另外,您不需要将
Shell
参数括在括号内,因为您不使用它返回值,在VBA中这样做通常不是好的做法

不管怎样,这里我将向你们展示几种方法。首先是你的多双引号环境风格:

Shell """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" " & """" & arch & """"
注意,我必须将变量与
&
组合到字符串中

而且使用
Chr$()
功能更容易阅读:

Shell Chr$(34) & "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe " & _
                                                     Chr$(34) & arch & Chr$(34)
Chr$(34)
是双引号字符的字符代码。这样可以更容易地将包含实际双引号字符的字符串包围起来


使用双引号时要记住的事项:

Shell """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" " & """" & arch & """"
  • 单个
    将打开或关闭字符串文本
  • Double
    将表示一个“空”字符串(
    x=”“
  • 现在字符串文本中,要成为字符串一部分的任何引号都需要使用另一个双引号字符
  • 让我们仔细看看第3点

    这是可以验证的,因为您可以通过在第一个
    之后和最后一个之前添加空格来更改上述字符串,例如:

    MsgBox " ""This is a string"" "
    
    如果不给您一个语法错误,这是行不通的:

    MsgBox "" "This is a string" ""
    
    这是因为第一个打开字符串,第二个是转义字符。但它除了一个空间外什么也逃不掉(反过来也是如此)

    然后您可以使用4个
    “”
    ,就像

    现在,您可以直观地看到为什么只需4个
    就可以将单个
    单独放入字符串文本中

    & """" & arch & """"
    ' ^^ ^
    ' || |_ Ends the string
    ' ||
    ' ||_ Escapes the next "
    ' |
    ' |_ Starts the string