If statement VB脚本If then End语句

If statement VB脚本If then End语句,if-statement,vbscript,If Statement,Vbscript,我试图将宏转换为VB脚本,但在“if..then..end”语句中遇到了问题。这是我的密码 Option Explicit Public OpenedWB Dim valueEntered, fileCount Dim userResponse Dim NewWB, NewWS Dim i Dim OpenedWBName Dim Found Dim FSO, txtFILE Dim HostFolder Dim dApproved, dPrepared, filearray() Dim x

我试图将宏转换为VB脚本,但在“if..then..end”语句中遇到了问题。这是我的密码

Option Explicit

Public OpenedWB

Dim valueEntered, fileCount
Dim userResponse
Dim NewWB, NewWS
Dim i
Dim OpenedWBName
Dim Found
Dim FSO, txtFILE
Dim HostFolder
Dim dApproved, dPrepared, filearray()
Dim xlApp
Dim xlCalculationManual
Dim xlCalculationAutomatic, msoFileDialogFolderPicker, msoFileDialogViewSmallIcons

xlCalculationManual = -4135: xlCalculationAutomatic = -4105
msoFileDialogFolderPicker = 4: msoFileDialogViewSmallIcons = 7

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True

Set NewWB = xlApp.Workbooks.Add
NewWB.Windows(1).Visible = True
Set NewWS = NewWB.Worksheets.Add

Set FSO = CreateObject("Scripting.FileSystemObject")

With xlApp
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With

i = -1

'UI (Dynamic) Directory
With xlApp.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Title = "Select the folder to scan through sub-folders"
    .ButtonName = "Select this folder!"
    .InitialFileName = _
        "\\..somepath"
    .InitialView = msoFileDialogViewSmallIcons
    If .Show <> i Then End  'This is throwing an error (Expected statement error)
    HostFolder = .SelectedItems(1)
End With
选项显式
公共开放数据库
输入的Dim值,文件计数
Dim用户响应
昏暗的新世界,新世界
昏暗的我
Dim OpenedWBName
暗淡的发现
Dim FSO,txtFILE
Dim主机文件夹
Dim-daprovided、dPrepared、filearray()
Dim xlApp
尺寸计算手册
Dim XLCalculation自动、msoFileDialogFolderPicker、MSOFILEDIALOGVIEW小图标
xlCalculationManual=-4135:xlCalculationAutomatic=-4105
msoFileDialogFolderPicker=4:msofiledialogviewssmallicons=7
设置xlApp=CreateObject(“Excel.Application”)
xlApp.Visible=True
设置NewWB=xlApp.Workbooks.Add
NewWB.Windows(1).Visible=True
设置NewWS=NewWB.Worksheets.Add
设置FSO=CreateObject(“Scripting.FileSystemObject”)
使用xlApp
.ScreenUpdate=False
.EnableEvents=False
.Calculation=xlCalculationManual
以
i=-1
'用户界面(动态)目录
使用xlApp.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect=False
.Title=“选择要扫描子文件夹的文件夹”
.ButtonName=“选择此文件夹!”
.InitialFileName=_
“\\…某个路径”
.InitialView=msoFileDialogViewSmallIcons
If.Show i Then End'这是抛出错误(预期语句错误)
HostFolder=.SelectedItems(1)
以
我不确定为什么会出现这个错误,因为它在VBA中工作得很好,但我猜这是因为我在VBA子过程中有代码

有人能帮我解决这个问题吗


谢谢

你的意图是什么?如果您打算使用
End
作为结束程序的语句,那么您应该知道VBScript中没有
End
语句,它是“End program”命令(但无论如何都不应该使用它,因为它不执行任何程序清理,并且可能导致需要处理的资源泄漏)

我想您需要的是
Exit
语句。
Exit
语句实际上并不完全退出程序,它与其他语言中的
return
break
相当:

Exit语句语法有以下形式:

   Exit Do  
   Exit For  
   Exit Function  
   Exit Property  
   Exit Sub  
不幸的是,您不能在“顶级”脚本程序代码内使用
Exit
(即在显式
函数
外)。我的建议是将您的程序包装在
Sub
中,您的顶级程序只需调用
Sub
即可

另外,不要将其与
Stop
语句混淆,后者实际上会暂停脚本执行(如断点),直到用户恢复执行,因此它不是真正的“停止执行”命令。它也不会关闭句柄:

Stop
:暂停执行。
使用
Stop
语句类似于在代码中设置断点。
Stop
语句暂停执行,但不关闭任何文件或清除任何变量

在您的例子中,只需将
的If
倒置就简单多了,如下所示:

With xlApp.FileDialog(msoFileDialogFolderPicker)
    .AllowMultiSelect = False
    .Title = "Select the folder to scan through sub-folders"
    .ButtonName = "Select this folder!"
    .InitialFileName = "\\..somepath"
    .InitialView = msoFileDialogViewSmallIcons
    If .Show = i Then
        Set HostFolder = .SelectedItems(1)
    End If
End With
(我假设
HostFolder
必须分配
Set
语句,因为它是
对象而不是值,但如果它在没有
Set
的情况下工作,那就没问题了)

TL;博士:
  • VBScript中没有结束程序执行的单个
    End
    语句。它只存在于VB6、VBA和VB.NET中
  • Stop
    语句实际上像断点一样暂停执行,而不是结束执行
  • Exit
    语句仅在父控件结构、
    Sub
    函数
    中起作用,因此它在顶级程序中不起作用

    • 您的意图是什么?如果您打算使用
      End
      作为结束程序的语句,那么您应该知道VBScript中没有
      End
      语句,它是“End program”命令(但无论如何都不应该使用它,因为它不执行任何程序清理,并且可能导致需要处理的资源泄漏)

      我想您需要的是
      Exit
      语句。
      Exit
      语句实际上并不完全退出程序,它与其他语言中的
      return
      break
      相当:

      Exit语句语法有以下形式:

         Exit Do  
         Exit For  
         Exit Function  
         Exit Property  
         Exit Sub  
      
      不幸的是,您不能在“顶级”脚本程序代码内使用
      Exit
      (即在显式
      函数
      外)。我的建议是将您的程序包装在
      Sub
      中,您的顶级程序只需调用
      Sub
      即可

      另外,不要将其与
      Stop
      语句混淆,后者实际上会暂停脚本执行(如断点),直到用户恢复执行,因此它不是真正的“停止执行”命令。它也不会关闭句柄:

      Stop
      :暂停执行。
      使用
      Stop
      语句类似于在代码中设置断点。
      Stop
      语句暂停执行,但不关闭任何文件或清除任何变量

      在您的例子中,只需将
      的If
      倒置就简单多了,如下所示:

      With xlApp.FileDialog(msoFileDialogFolderPicker)
          .AllowMultiSelect = False
          .Title = "Select the folder to scan through sub-folders"
          .ButtonName = "Select this folder!"
          .InitialFileName = "\\..somepath"
          .InitialView = msoFileDialogViewSmallIcons
          If .Show = i Then
              Set HostFolder = .SelectedItems(1)
          End If
      End With
      
      (我假设
      HostFolder
      必须分配
      Set
      语句,因为它是
      对象而不是值,但如果它在没有
      Set
      的情况下工作,那就没问题了)

      TL;博士:
      • VBScript中没有结束程序执行的单个
        End
        语句。它只存在于VB6、VBA和VB.NET中
      • Stop
        语句实际上像断点一样暂停执行,而不是结束执行
      • Exit
        语句仅在父控件结构、
        Sub
        函数中起作用