这不是一个问题问题,而是更多的理解问题。
我偷了下面的代码:
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世界的意思是什么意思?
代码完美无缺,我试图研究这个主题,但我找到的所有内容都说“真”或“假”。非常感谢任何见解。
答案 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