各位老师,今天在查看网络时,看到一段将Excel窗口置于顶部代码,采用#If...Then...#Else 指令,看官方解释,也没看出个一二来,百思不得其解,咨询下:
1、什么情况下用这种结构?
2、这种结构代码有什么优势?
3、有没有通俗的解释?
- 'VBA代码:始终将Excel窗口置于顶部
- #If Win64 Then
- Public Declare PtrSafe Function SetWindowPos _
- Lib "user32" ( _
- ByVal hwnd As LongPtr, _
- ByVal hwndInsertAfter As LongPtr, _
- ByVal x As Long, ByVal y As Long, _
- ByVal cx As Long, ByVal cy As Long, _
- ByVal wFlags As Long) _
- As Long
- #Else
- Public Declare Function SetWindowPos _
- Lib "user32" ( _
- ByVal hwnd As Long, _
- ByVal hwndInsertAfter As Long, _
- ByVal x As Long, ByVal y As Long, _
- ByVal cx As Long, ByVal cy As Long, _
- ByVal wFlags As Long) _
- As Long
- #End If
- Public Const SWP_NOSIZE = &H1
- Public Const SWP_NOMOVE = &H2
- Public Const HWND_TOPMOST = -1
- Public Const HWND_NOTOPMOST = -2
- Sub ShowXLOnTop(ByVal OnTop As Boolean)
- Dim xStype As Long
- #If Win64 Then
- Dim xHwnd As LongPtr
- #Else
- Dim xHwnd As Long
- #End If
- If OnTop Then
- xStype = HWND_TOPMOST
- Else
- xStype = HWND_NOTOPMOST
- End If
- Call SetWindowPos(Application.hwnd, xStype, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
- End Sub
- Sub SetXLOnTop()
- ShowXLOnTop True
- End Sub
- Sub SetXLNormal()
- ShowXLOnTop False
- End Sub
复制代码
下面为官方的网址和解释:
#If...Then...#Else 指令 - Visual Basic | Microsoft Learn
#If...Then...#Else 指令
[size=0.875em]反馈
本文内容- [color=var(--theme-hyperlink)]语法
- [color=var(--theme-hyperlink)]组成部分
- [color=var(--theme-hyperlink)]注解
- [color=var(--theme-hyperlink)]示例
- [color=var(--theme-hyperlink)]另请参阅
有条件地编译选定的 Visual Basic 代码块。 语法
[backcolor=var(--theme-code-header)][size=0.8]VB复制[color=var(--theme-success-invert) !important][backcolor=var(--theme-success-base) !important][size=1.125]
#If expression Then statements[ #ElseIf expression Then [ statements ]...#ElseIf expression Then [ statements ] ][ #Else [ statements ] ]#End If组成部分
expression
对于 #If 和 #ElseIf 语句是必需的,在其他位置为可选。 任何表达式(仅由一个或多个条件编译器常量、文本和运算符组成),其计算结果为 True 或 False。 statements
#If 语句块必需,在其他位置为可选。 如果关联的表达式的计算结果为 True,则 Visual Basic 编译的程序行或编译器指令。 #End If
终止 #If 语句块。 注解
在表面上,#If...Then...#Else 指令的行为将与 If...Then...Else 语句的行为相同。 但是,#If...Then...#Else 指令将计算编译器编译的内容,而 If...Then...Else 语句则计算运行时的条件。 条件编译通常用于针对不同平台编译相同的程序。 它还用于阻止调试代码出现在可执行文件中。 在条件编译期间排除的代码在最终可执行文件中被完全省略,因此它不会对大小或性能产生任何影响。 不管任何计算结果如何,都将使用 Option Compare Binary 计算所有表达式。 Option Compare 语句不影响 #If 和 #ElseIf 语句中的表达式。 [backcolor=var(--theme-info-background)][color=var(--theme-info-dark)] 备注 不存在 #If、#Else、#ElseIf 和 #End If 指令的单行形式。 任何其他代码都不能与任何指令出现在同一行上。
条件编译块内的语句必须是完整的逻辑语句。 例如,无法有条件地仅编译函数的属性,但可以有条件地声明函数及其属性: [backcolor=var(--theme-code-header)][size=0.8]VB复制[color=var(--theme-success-invert) !important][backcolor=var(--theme-success-base) !important][size=1.125]
<code class="lang-vb" data-author-content="#If DEBUG ThenPublic Function SomeFunction() As String#ElsePublic Function SomeFunction() As String#End If" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; line-height: 1.3571; display: block; position: relative;">#If DEBUG Then<WebMethod()>Public Function SomeFunction() As String#Else<WebMethod(CacheDuration:=86400)>Public Function SomeFunction() As String#End If示例
此示例使用 #If...Then...#Else 构造来确定是否编译某些语句。 [backcolor=var(--theme-code-header)][size=0.8]VB复制[color=var(--theme-success-invert) !important][backcolor=var(--theme-success-base) !important][size=1.125]
#Const CustomerNumber = 36#If CustomerNumber = 35 Then ' Insert code to be compiled for customer # 35.#ElseIf CustomerNumber = 36 Then ' Insert code to be compiled for customer # 36.#Else ' Insert code to be compiled for all other customers.#End If另请参阅
- [color=var(--theme-hyperlink)]#Const 指令
- [color=var(--theme-hyperlink)]If...Then...Else 语句
|