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.Show
是boolean
表达式,并且我知道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?的主要内容,如果未能解决你的问题,请参考以下文章