VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码

Posted

技术标签:

【中文标题】VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码【英文标题】:VBA for Excel - Avoid type code again if deeper select case dont match criteria 【发布时间】:2017-11-03 09:43:28 【问题描述】:

我想知道如果更深的选择案例不符合条件,是否有一种解决方法可以不重新输入代码。

我必须检查月份是否是下面所述的月份之一,如果是,我必须检查该月的日期是否符合条件。如果日期不匹配任何情况,则必须运行的代码是上述 ELSE 情况下的 Select 语句中设置的代码。

我知道解决此问题的唯一方法是使用 and IF 语句而不是嵌套的 select case,并使用 GO TO LABEL 让我回到 CASE ELSE 语句,但这似乎很不优雅。

如果更深的选择案例不符合条件,有没有办法不在 else 案例中重新输入相同的代码?

Select Case Month(Range("b" & Start))
                        Case 1

                        Case 4

                        Case 5

                        Case 6

                        Case 8
                         GiornoMese = listaattiva(j).Text & "/" & Month(Range("b" & Start)) & "/" & Year(Range("b" & Start))
                         Select Case Day(GiornoMese)
                                Case 15
                                    **HERE IF THE DAY IS NOT THE 15th
                                    CODE SHOULD JUMP OUT AND RUN CODE TYPED
                                    IN THE CASE ELSE STATEMENT**
                        Case 12

                        Case Else
                            'Debug.Print listaattiva(j).Text & "/" &
                            'Month (Range("b" & Start)) & "/" & Year(Range("b" & Start))
                            GiornoMese = listaattiva(j).Text & "/" & Month(Range("b" & Start)) & "/" & Year(Range("b" & Start))
                            If Weekday(GiornoMese, vbMonday) = 7 Then
                                'Domenica - Tutte le ore del giorno sono F3
                                For Each quarto In listaattiva(j).Attributes
                                    'Debug.Print listaattiva(j).Attributes.Length
                                    'Debug.Print quarto.Text
                                    F3 = F3 + quarto.Text
                                    'Debug.Print F3
                                Next

@MarcinSzaleniec 这会让我重新输入我已经在 CASE ELSE STATEMENT 中声明的代码(或 ctrl-v 粘贴)。

我必须检查 XML 文件中列出的数据是否在公共假期。 为此,我先检查月份,然后检查日期。

如果不是实际的公共假期月,我只需在 ELSE 语句中使用标准代码;如果是一个月和假期,我会编写不同的代码,但如果是一个月而不是假期,我会运行已经声明的代码ELSE 语句的代码。

我的更多是“美丽”问题,我想将代码保留在同一个 SUB 中,具有垂直的工作流程,而不必让 ppl 跳到其他 subs 上。

【问题讨论】:

【参考方案1】:

从 Case Else 部分的代码中单独创建一个 sub。您可以将必要的变量作为参数传递。尝试类似:

Sub DoIfElse (_Year as Integer, _Month as Integer)

(...)
end Sub

很难解读哪些变量是真正需要的,因为您只发布了代码片段,但我认为您知道自己需要什么。 然后,您可以根据需要在主子例程的各个位置使用 DoIfElse。

【讨论】:

以上是关于VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 选择案例 - 多个测试表达式

Excel VBA - 选择多个值以搜索案例

每个案例的 Excel VBA 发送电子邮件

VBA案例选择多个条件

选择具有复杂返回值的案例 (VBA 2007)

使用 VBA for Excel 在 UDF 中输入的名称无效