Application.FileDialog.Show = -1?

时间:2016-12-08 16:37:48

标签: vba excel-vba excel

这不是一个问题问题,而是更多的理解问题。

我偷了下面的代码:

assistant.tell()

我不记得我从哪里获得了代码,但它是不久前的。我在一个旧宏中找到了这个,看了之后,我不理解Dim fd as Office.FileDialog FileDialog. Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False .Title = "Please select the file to process." .Filters.Clear .Filters.Add "Text files", "*.txt" .InitialFileName = "C:\" End With If fd.Show = -1 Then sFilename = fd.SelectedItems(1) Else MsgBox ("You did not pick a file! Cancelling macro.") Exit Sub End If 语句。

If

我认为If fd.Show = -1 Then Application.FileDialog.Show表达式,我知道0通常表示False,1通常表示True。 -1世界的意思是什么意思?

代码完美无缺,我试图研究这个主题,但我找到的所有内容都说“真”或“假”。非常感谢任何见解。

2 个答案:

答案 0 :(得分:5)

这将更具可读性,完全等同于:

If fd.Show Then
    sFilename = fd.SelectedItems(1)
Else
    MsgBox "You did not pick a file! Cancelling macro."
    Exit Sub
End If

我已经删除了MsgBox个参数周围的无关括号,因为MsgBox在这里被称为过程而不是函数,因此所有括号都是强制VBA来评估字符串作为值,...它已经是。使用无关的括号作为习惯会导致愚蠢和意外的错误和编译错误。

正如评论中已经提到的,在这种情况下,-1文字实际上只代表True

与此相同:

If fd.Show = True Then

但是,那将是多余的,因为布尔值已经是布尔表达式,因此永远不需要将布尔值与 make 布尔表达式并满足If语法:

If {bool-expression} Then
    {statements}
End If
  

我知道0通常意味着False,1通常意味着True

不完全。 0表示False,是的,但True只是 not false :任何非零整数值都会转换为True

Debug.Print CBool(42) 'prints True
Debug.Print CBool(-12) 'prints True
Debug.Print CBool(0) 'prints False

答案 1 :(得分:2)

实际上这是一个Office控件而“Show”返回一个long。 -1表示用户按下“接受”按钮,0表示按下“取消”按钮。

https://msdn.microsoft.com/en-us/library/office/ff865217.aspx