Vbscript 如何识别inputbox中的“确定”和“取消”按钮

Vbscript 如何识别inputbox中的“确定”和“取消”按钮,vbscript,Vbscript,嗨,嗨,我必须写一个代码,如果用户点击在输入框中输入一些东西,它应该继续。如果它没有输入任何值,它应该再次抛出相同的问题。我已经做到了,但我的问题是,当用户再次单击“取消”时,会问同样的问题,而它应该退出。我对VB脚本非常陌生。请帮助我如何处理这些按钮?下面是我现有的代码 Do while x=0 strAnswer = InputBox("Please enter the file extension * For all files:", _ "File Extension") I

嗨,嗨,我必须写一个代码,如果用户点击在输入框中输入一些东西,它应该继续。如果它没有输入任何值,它应该再次抛出相同的问题。我已经做到了,但我的问题是,当用户再次单击“取消”时,会问同样的问题,而它应该退出。我对VB脚本非常陌生。请帮助我如何处理这些按钮?下面是我现有的代码

Do while x=0
strAnswer = InputBox("Please enter the file extension  *  For all files:", _
    "File Extension")
If strAnswer = "" Then
        MsgBox"You must enter an extension."

Else

        a=strAnswer
        Exit Do
    End If
Loop


intRow = 2
'strFileName = "T:\public\Madhumita\New.xls"
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
'objWorkbook.SaveAs(strFileName)
objExcel.Cells(1, 1).Value = "Folder"
objExcel.Cells(1, 2).Value = "File Name"
objStartFolder = "T:\public\Madhumita\Madhu"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
If a="*" Then
For Each objFile in colFiles
objExcel.Cells(intRow, 1).Value = objfolder.Name
objExcel.Cells(intRow, 2).Value = objFile.Name
intRow = intRow + 1
Next

else

For Each objFile in colFiles
m=objFSO.GetExtensionName( objFile.Path )

If m=a Then

objExcel.Cells(intRow, 1).Value = objfolder.Name
objExcel.Cells(intRow, 2).Value = objFile.Name
intRow = intRow + 1


End If
Next
End If 
objExcel.Range("A1:B1").Select
objExcel.Selection.Font.Bold = True
objExcel.Cells.EntireColumn.AutoFit
Sub SaveAs() 
    Application.Dialogs(xlDialogSaveAs).Show 
End Sub 


objExcel.Quit
MsgBox "Done"
您需要处理(至少)三种情况-InputBox()返回:

  • 由于用户按下“取消”或关闭对话框而导致的空值(empty,vbEmpty)
  • 空字符串(“”)或空白字符串(“”)
  • (希望是)有效字符串
  • 代码:

    Option Explicit
    
    Do While True
       Dim vInp : vInp = InputBox("ee")
       WScript.Echo TypeName(vInp)
       Select Case True
         Case IsEmpty(vInp)
           WScript.Echo "Abort"
           Exit Do
         Case "" = Trim(vInp)
           WScript.Echo "Try again"
         Case Else
           WScript.Echo "Work with " & vInp
           Exit Do
       End Select
    Loop
    
    样本输出:

    String Try again Empty Abort String Work with aaa 一串 再试一次 空的 中止 一串 与aaa合作 很抱歉,这只是个谎言:

    如果用户单击OK或按ENTER键,InputBox函数将返回 文本框中的内容。如果用户单击“取消”,则该功能 返回长度为零的字符串(“”)

    应该是:

    。。。如果用户单击Cancel,函数将返回空值 (TypeName为空,VarType为vbEmpty)


    我正在使用VBS,我对cancel/ok的调查显示:

    Cancel返回一个空字符串和一个零长度字符串-和您说的一样?,显然不是

    Ok仅返回长度为零的字符串

    我使用下面的代码来区分

       if IsEmpty(nmbr)  then               'cancel button pressed ?
            nmbr = "x"  
       end if  
    
       if not IsEmpty(nmbr) then            'ok button pressed ?
          if len(nmbr) = 0 then
            nmbr = "ok"
          end if 
       end if
    
    对于
    InputBox()
    ,您可以使用默认值来确定用户是否单击了取消,或者他们是否单击了确定,或者单击Enter继续而不输入值:

    Sub Get_TIN()
       TIN = Trim(InputBox("Enter the provider TIN:", "Provider TIN", "ex. 123456789"))
    
       If TIN = "" Then    'When CANCEL is clicked because "TIN" will be empty.
          MsgBox "You pressed Cancel. Program will now end.", vbExclamation + vbOKOnly, "Macro End"
          Exit Sub
       End If
    
       If IsEmpty(TIN) = False Then     'When OK is clicked or Enter pressed because default text will be stored. Next, set TIN to "".
          TIN = ""
       End If
    End Sub
    

    取消输入框返回空值;按OK返回文本字段中的字符串(可能为空==零长度);如果您要求使用“nmbr”,那么用“x”或“ok”覆盖变量可能不是一个好主意。对不起,Ekkhard等人,这是为了伪代码,我应该更明确一些。如果是我原始注释中的返回值,它们就是返回的值,即IsEmpty(string)和len(string)=zero对于Cancel都为true。