【问题标题】:How to identify between ok and cancel button in inputbox如何识别输入框中的确定和取消按钮
【发布时间】:2013-12-12 09:14:35
【问题描述】:

嗨嗨,我必须编写一个代码,如果用户单击在输入框中输入内容,它应该继续进行。如果它没有输入任何值,它应该再次抛出相同的问题。这我已经实现了,但是我的问题是当用户点击 CANCEl 时,它再次询问相同的问题,而它应该退出。我对 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"

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    你需要处理(至少)三种情况——InputBox() 返回:

    1. 一个空值(Empty,vbEmpty),因为用户按下了“取消”或关闭了对话框
    2. 一个空字符串 ("") 或一串空白 (" ")
    3. 一个(希望是)有效的字符串

    在代码中:

    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
    

    样本输出:

    细绳 再试一次 空的 中止 细绳 与aa一起工作

    抱歉,Docs 只是在撒谎:

    如果用户单击确定或按 ENTER,则 InputBox 函数返回 文本框中的任何内容。如果用户点击取消,函数 返回一个长度为零的字符串 ("")。

    应该是:

    ...如果用户点击取消,函数返回一个空值 (TypeName Empty, VarType vbEmpty)。

    【讨论】:

      【解决方案2】:

      对于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
      

      【讨论】:

        【解决方案3】:

        我正在使用 VBS,我对取消/确定的调查显示以下内容:

        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 返回一个空值;按 OK 在文本字段中返回(可能为空==零长度)字符串;如果你要求一个“nmbr”,用“x”或“ok”覆盖变量可能不是一个好主意。
        • 对不起,Ekkhard 等人,它是伪代码,我应该更明确一点。重新在我的原始 cmets 中返回值,它们就是返回的值,即 IsEmpty(string) 和 len(string) = zero 对于 Cancel 都是 true。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多