gpt4 book ai didi

vba - 用于分析两个 bool 条件的最简洁的 ElseIf 逻辑是什么?

转载 作者:行者123 更新时间:2023-12-03 00:23:45 25 4
gpt4 key购买 nike

我有一个名为 AddSheetAtEnd 的函数,它在当前书中创建一个新工作表。我正在使用它来准备用于输入某些数据的工作表。

最初我是这样的:

Function AddSheetAtEnd(ShtName As String)
If Not IsWorksheetName(ShtName) Then
'if worksheet doesn't exist, create sheet
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = ShtName
AddSheetAtEnd = True
End With
Else
'if worksheet exists, quit function
AddSheetAtEnd = False
Exit Function
End If
End Function

如果工作表确实存在,则此函数将退出,并且我有另一个函数可以在稍后写入数据之前删除工作表上的所有内容。我决定添加一个可选参数 readOnlyFlag 来授予删除工作表的权限,并在必要时添加新工作表,而不必使用另一个函数来删除工作表上的数据。现在我需要一种执行此操作的方法:

If readOnlyFlag = True AND sheetExists = True Then
'do nothing, exit
Elseif readOnlyFlag = False AND sheetExists = True Then
'delete sheet
'create sheet
Elseif readOnlyFlag = True AND sheetExists = False Then
'create sheet
Elseif readOnlyFlag = False AND sheetExists = False Then
'create sheet
End If

我正在尝试确定执行此操作的最简洁(且最有效的方式)。到目前为止我已经想出了这个:

If readOnlyFlag = True AND sheetExists = True Then 
AddSheetAtEnd = False
Exit Function
Elseif readOnlyFlag = False Then
If sheetExists = True Then DeleteSheet(ShtName)
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = ShtName
AddSheetAtEnd = True
End With
End If

是否有更强大或更简洁的方式来组织它?这些是否是多余的,或者遗漏了可能的情况?

最佳答案

您可以将 bool 值转换为 1 和 0,然后求和以找出具体内容。对于每个附加 bool 值,将其乘以 2 的附加幂(第一个测试在 2^0 处,因此乘以 1 - 不要相乘 - 第二个测试在 2^1 处,因此乘以 2,第三次测试在 2^ 2,所以乘以 4,等等)

根据您的具体情况,您可以执行 Abs(readOnlyFlag) + Abs(sheetExists) * 2

  • 如果 readOnlyFlag 为 False,则得到 0,如果为 True,则得到 1
  • 如果sheetExists为False,则为0,如果为True,则为2

结果是 0 = 均为 False,1 = readOnlyFlag True,2 = SheetExists True,3 = 均为 True

通用代码如下所示:

Select Case Abs(readOnlyFlag) + Abs(sheetExists) * 2
Case 0: 'Both False
Case 1: 'readOnlyFlag true
Case 2: 'sheetExists true
Case 3: 'Both True
End Select

根据你的具体情况,变成这样:

With ThisWorkbook
Select Case Abs(readOnlyFlag) + Abs(sheetExists) * 2
Case 0, 1: .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = ShtName
Case 2: DeleteSheet (ShtName)
Case 3: AddSheetAtEnd = False
End Select
End With

关于vba - 用于分析两个 bool 条件的最简洁的 ElseIf 逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com