Visual studio vbs语法错误:800A03EE';)';预期

Visual studio vbs语法错误:800A03EE';)';预期,visual-studio,vba,vbscript,Visual Studio,Vba,Vbscript,我尝试在名为“addcurrentkey.vbs”的文件中执行此操作 但第1行中应显示“)”。字符38 我尝试了以下教程: 为什么我不能执行.vbs文件 Private Sub AddCurrentKey(ByVal name As String, ByVal path As String) Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run

我尝试在名为“addcurrentkey.vbs”的文件中执行此操作 但第1行中应显示“)”。字符38

我尝试了以下教程:

为什么我不能执行.vbs文件

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
key.SetValue(name, path) 
End Sub 

您发布的代码可能是用VB.net(或VBA)编写的。您将以VBScript的形式运行代码,该脚本不支持类型化参数和变量。它也不提供您尝试使用的注册表对象。将此过程更改为:

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
  Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
  key.SetValue(name, path) 
End Sub
为此:

Private Sub AddCurrentKey(ByVal name, ByVal path)
  Dim key : key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  CreateObject("WScript.Shell").RegWrite key & "\" & name, path
End Sub

问题就会消失。

您发布的代码可能是用VB.net(或VBA)编写的。您将以VBScript的形式运行代码,该脚本不支持类型化参数和变量。它也不提供您尝试使用的注册表对象。将此过程更改为:

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
  Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
  key.SetValue(name, path) 
End Sub
为此:

Private Sub AddCurrentKey(ByVal name, ByVal path)
  Dim key : key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  CreateObject("WScript.Shell").RegWrite key & "\" & name, path
End Sub
问题将消失。

VBScript仍然使用“旧的”Visual Basic语法。它区分表达式中使用的函数调用和作为语句的过程调用。在表达式中使用(括号),但在语句中不使用。修正:

 key.SetValue name, path 
或者,如果您愿意:

 Call key.SetValue(name, path)

错误消息很难解释,因为脚本解释器认为您正在尝试编写以下内容:

 key.SetValue (name), path
这意味着完全不同的东西。VBScript通过引用传递参数。名称周围的额外括号将其转换为一个表达式,用于创建变量的副本。SetValue过程可以修改它,而不会影响name变量。不是它实际的功能,也不是您想要的。

VBScript仍然使用“旧”的Visual Basic语法。它区分表达式中使用的函数调用和作为语句的过程调用。在表达式中使用(括号),但在语句中不使用。修正:

 key.SetValue name, path 
或者,如果您愿意:

 Call key.SetValue(name, path)

错误消息很难解释,因为脚本解释器认为您正在尝试编写以下内容:

 key.SetValue (name), path

这意味着完全不同的东西。VBScript通过引用传递参数。名称周围的额外括号将其转换为一个表达式,用于创建变量的副本。SetValue过程可以修改它,而不会影响name变量。不是它实际的功能,也不是您想要的。

这不是您的全部代码,您在尝试“将其保存到文件中”时不会出现错误。请在您提出问题之前提供此程序声明的代码,并提供更多详细信息。您发布的代码的第1行中没有错误。@KenWhite它说的是第1行,即“Private Sub AddCurrentKey(ByVal name作为字符串,ByVal path作为字符串)”。编译错误Microsoft VBScript您已经说过了,我告诉您错误不在那里。同样,您发布的代码的第1行中没有错误。请提供更多信息,正如我在之前的评论中所问的那样。如果没有它,您可能无法在这里获得帮助,因为您没有提供我们可以用来帮助您的详细信息。@KenWhite那么,您可以执行此操作而不出错吗?@KenWhite错误就在那里。VBScript不支持类型化参数。这不是您的全部代码,并且您在尝试“将其保存到文件中”时不会出现错误。请在您提出问题之前提供此程序声明的代码,并提供更多详细信息。您发布的代码的第1行中没有错误。@KenWhite它说的是第1行,即“Private Sub AddCurrentKey(ByVal name作为字符串,ByVal path作为字符串)”。编译错误Microsoft VBScript您已经说过了,我告诉您错误不在那里。同样,您发布的代码的第1行中没有错误。请提供更多信息,正如我在之前的评论中所问的那样。如果没有它,您可能无法在这里获得帮助,因为您没有提供我们可以用来帮助您的详细信息。@KenWhite那么,您可以执行此操作而不出错吗?@KenWhite错误就在那里。VBScript不支持类型化参数。这是他的代码的另一个问题(他可能想了解),但不是导致他描述的错误的原因。这是他的代码的另一个问题(他可能想了解),但不是导致他描述的错误的原因。