Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何修改后续代码以获得执行其余代码所依据的条件:_Vba_Excel - Fatal编程技术网

Vba 如何修改后续代码以获得执行其余代码所依据的条件:

Vba 如何修改后续代码以获得执行其余代码所依据的条件:,vba,excel,Vba,Excel,晚上好。我花了5个小时的大部分时间试图理解并找到如何修改下面的代码,以包含一个单独的条件,该条件决定是执行每一行的其余代码还是跳到下一行 我什么也找不到。 我试图将标准设置为范围(一列),但没有效果。我不明白如何进入状态。我要么在没有For的情况下得到,要么在没有End的情况下得到,如果或其他类似错误 我想问的是,是否有一个善良的灵魂可以给我一个线索,让我知道应该在哪里插入这样的陈述? 声明如下: 如果对应的单元格值为值,则 跳过并做下一步 否则会 列和页为: 第1页: G列-包含5类,其中一类

晚上好。我花了5个小时的大部分时间试图理解并找到如何修改下面的代码,以包含一个单独的条件,该条件决定是执行每一行的其余代码还是跳到下一行

我什么也找不到。 我试图将标准设置为范围(一列),但没有效果。我不明白如何进入状态。我要么在没有For的情况下得到,要么在没有End的情况下得到,如果或其他类似错误

我想问的是,是否有一个善良的灵魂可以给我一个线索,让我知道应该在哪里插入这样的陈述? 声明如下:

如果对应的单元格值为,则 跳过并做下一步 否则会

列和页为:

第1页:

G列-包含5类,其中一类是税。在此基础上,如果是逃税,则执行

列L-包含带有关键字的说明。在中通常有2-3行文本,其中有1个唯一的关键字。 M列-放置基于关键字的类别的位置

第2页:

列A-要搜索的关键字

C列-每个关键字(天然气、电力等)旁边应对应的类别

这是下面需要修改的原始代码

Sub Categories_Update()
    Dim lastrow As Long, lastrow2 As Long
    Dim i As Integer, j As Integer
    Dim PatternFound As Boolean

    Call speedup

    lastrow = Sheets("Rules").Range("A" & Rows.Count).End(xlUp).Row
    lastrow2 = Sheets("DebitCard_Check").Range("L" & Rows.Count).End(xlUp).Row

    For i = 4 To lastrow2

        PatternFound = False
        j = 1

        Do While PatternFound = False And j < lastrow
            j = j + 1
            If UCase(Sheets("DebitCard_Check").Range("L" & i).Value) Like "*" & UCase(Sheets("Rules").Range("A" & j).Value) & "*" Then
                Sheets("DebitCard_Check").Range("M" & i).Value = Sheets("Rules").Range("C" & j).Value
                PatternFound = True
            End If
        Loop

    Next i

    Call normal

End Sub

'-------------------------------

Public Sub speedup()

    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
End Sub

'-------------------------------

Public Sub normal()

    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub
子类别\u更新()
将最后一行的长度调暗,最后一行的长度调暗
尺寸i为整数,j为整数
找到的模糊模式为布尔型
呼叫加速
lastrow=工作表(“规则”).Range(“A”和Rows.Count).结束(xlUp).行
lastrow2=工作表(“借记卡检查”)。范围(“L”和行数。计数)。结束(xlUp)。行
对于i=4到最后一行2
PatternFound=False
j=1
当PatternFound=False且j
我相信您请求的修改包含在下面(请参见星号和随后的注释以了解解释):

子类别\u更新()
将最后一行的长度调暗,最后一行的长度调暗
尺寸i为整数,j为整数
找到的模糊模式为布尔型
呼叫加速
lastrow=工作表(“规则”).Range(“A”和Rows.Count).结束(xlUp).行
lastrow2=工作表(“借记卡检查”)。范围(“L”和行数。计数)。结束(xlUp)。行
对于i=4到最后一行2
“***我认为这就是您试图插入的内容,一个导致基于的行被跳过的条件
'列G为“TAX”-此条件将其发送到下面的部分“Skip1”(您可以任意调用它)
如果UCase(表(“借记卡检查”).Range(“G”和i).Value)=“TAX”,则转到Skip1
PatternFound=False
j=1
当PatternFound=False且j
谢谢您,先生(对迟交的答案表示歉意)让我测试一下,很快回来!你好,德米特里,谢谢你!它工作得很好。我对它做了一点修改,以便将更广泛的可能性(请注意)包括在下面
中,如果UCase(Sheets(“DebitCard_Check”).range(“G”&I).Value)像“*TAX*”那样,那么如果我理解正确,那么就跳到Skip1
,因为我不喜欢复制粘贴,也不喜欢学习(这并不是说每次都会有人给我写这些东西)执行循环的实际代码块从我的原始
Do While
部分开始。end以
end Sub
结束。因此,为了包含一个命令和引导代码的预游标/过滤器,我必须在循环开始之前包含位。我希望我是正确的。我的目标是相同的,但f生病是因为我的语法似乎自然而然地转到了C#,并拒绝围绕VBA。你知道有一个很好的地方吗?在那里我可能会找到一个很好的VBA语法表?除了上面的->谢谢!这正是我一直在寻找的。这很有趣,因为我在理解C#方面也有类似的困难,因为我的思维很自然到VBA。很抱歉,我不知道在哪里你一定能找到你需要的东西,但这里有两个链接至少可以让你开始:祝你好运!这太棒了!这些链接真的很棒。是的,在语言之间切换通常非常容易,但当你不熟悉新语言时,会变得越来越糟糕st:D
Sub Categories_Update()
    Dim lastrow As Long, lastrow2 As Long
    Dim i As Integer, j As Integer
    Dim PatternFound As Boolean

    Call speedup

    lastrow = Sheets("Rules").Range("A" & Rows.Count).End(xlUp).Row
    lastrow2 = Sheets("DebitCard_Check").Range("L" & Rows.Count).End(xlUp).Row

    For i = 4 To lastrow2

        PatternFound = False
        j = 1

        Do While PatternFound = False And j < lastrow
            j = j + 1
            If UCase(Sheets("DebitCard_Check").Range("L" & i).Value) Like "*" & UCase(Sheets("Rules").Range("A" & j).Value) & "*" Then
                Sheets("DebitCard_Check").Range("M" & i).Value = Sheets("Rules").Range("C" & j).Value
                PatternFound = True
            End If
        Loop

    Next i

    Call normal

End Sub

'-------------------------------

Public Sub speedup()

    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
End Sub

'-------------------------------

Public Sub normal()

    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub
Sub Categories_Update()

Dim lastrow As Long, lastrow2 As Long
Dim i As Integer, j As Integer
Dim PatternFound As Boolean

Call speedup

lastrow = Sheets("Rules").Range("A" & Rows.Count).End(xlUp).Row
lastrow2 = Sheets("DebitCard_Check").Range("L" & Rows.Count).End(xlUp).Row

For i = 4 To lastrow2

    ' *** I think this is what you are trying to insert, a conditional that causes the row to get skipped based on
    'column G being "TAX" - this conditional sends it to the part "Skip1" (you can call it anything) down below
    If UCase(Sheets("DebitCard_Check").Range("G" & i).Value) = "TAX" Then GoTo Skip1

    PatternFound = False
    j = 1

    Do While PatternFound = False And j < lastrow
        j = j + 1
        If UCase(Sheets("DebitCard_Check").Range("L" & i).Value) Like "*" & UCase(Sheets("Rules").Range("A" & j).Value) & "*" Then
            Sheets("DebitCard_Check").Range("M" & i).Value = Sheets("Rules").Range("C" & j).Value
            PatternFound = True
        End If
    Loop

    ' ***You need to add this piece to tell it where to skip to.  It has to have a colon after it.
Skip1:

    Next i

    Call normal

End Sub

'-------------------------------

Public Sub speedup()

    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
End Sub

'-------------------------------

Public Sub normal()

    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub