Application.FileDialog.Show = -1?

Posted

技术标签:

【中文标题】Application.FileDialog.Show = -1?【英文标题】:Application.FileDialog.Show = -1? 【发布时间】:2016-12-08 16:37:48 【问题描述】:

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

我偷了下面的代码:

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.Showboolean 表达式,并且我知道0 通常表示False,1 通常表示True。 -1到底是什么意思?

代码运行良好,我尝试研究该主题,但我发现的所有内容都显示“真”或“假”。非常感谢任何见解。

【问题讨论】:

在 VB Land int(true) is -1 not 1 / See ***.com/questions/14462272/why-is-true-equal-to-1 因为 why true 是 -1,see here. 【参考方案1】:

这将更具可读性,并且完全等效:

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 将字符串评估为值, ......它已经是。习惯使用多余的括号会导致愚蠢和意外的错误和编译错误。

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

同理:

If fd.Show = True Then

但是,那将是多余的,因为布尔值已经是一个 布尔表达式,所以永远不需要将布尔值与 使布尔表达式进行比较并满足If 语法:

If bool-expression Then
    statements
End If

我知道 0 通常表示 False,1 通常表示 True

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

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

【讨论】:

+1 哇。很好的解释。我将不得不尝试整个Not False 想法。除了 True 和 False 之外,我实际上从未尝试将任何东西放在布尔表达式中。谢谢你的信息! 如果您希望避免隐式转换,您可以使用If CBool(fs.Show) Then 以获得最终的可读性 =) 啊,是的,因为在 If 后跟一个布尔值基本上只是在声明 If bool = True?还是我必须明确使用CBool() 才能使用它? @SalvadorVayshun 该视频解释了为什么 False 为 0 而 True 为 0:Excel Magic Trick 652: Boolean Logic for Logical & Array Formulas @SalvadorVayshun 没错——这就是我对的具体意思,因为布尔值已经是一个布尔表达式。如果您不进行显式转换,VBA 将进行隐式转换。【参考方案2】:

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

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

【讨论】:

好眼光!那就是我从那里偷代码的地方!感谢您指出这一点。

以上是关于Application.FileDialog.Show = -1?的主要内容,如果未能解决你的问题,请参考以下文章