Найти и заменить VBA вложенными If - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь написать код, который заменяет текст в формуле в диапазоне ячеек на основе значения в ссылочной ячейке.Я разработал ниже, но все еще работает ошибка.Любой совет очень ценится!

Sub FindRepRegion()
    If Active.Sheet.Range("J1") = "School" Then
        Dim Findtext As String
        Dim Replacetext As String
        Findtext = "'Sheet1'!$B:$B"
        Replacetext = "'Sheet1'!$AW:$AW"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    ElseIf Active.Sheet.Range("J1") = "Grant" Then
        Findtext = "'Sheet1'!$AX:$AX"
        Replacetext = "'Sheet1'!$AW:$AW"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    ElseIf Active.Sheet.Range("J1") = "Community School" Then
        Findtext = "'Sheet1'!$AY:$AY"
        Replacetext = "'Sheet1'!$AW:$AW"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    Else
    End If
End Sub

1 Ответ

0 голосов
/ 04 февраля 2019

@ Pᴇʜ, по сути, ответил на ваш вопрос, но вот очищенный код:

Option Explicit
Sub FindRepRegion()

    Dim Findtext As String
    Dim Replacetext As String

    Replacetext = "'Sheet1'!$AW:$AW"

    If ActiveSheet.Range("J1") = "School" Then
        Findtext = "'Sheet1'!$B:$B"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    ElseIf ActiveSheet.Range("J1") = "Grant" Then
        Findtext = "'Sheet1'!$AX:$AX"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    ElseIf ActiveSheet.Range("J1") = "Community School" Then
        Findtext = "'Sheet1'!$AY:$AY"
        ActiveSheet.Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False
    End If

End Sub

Но, поскольку все ваши условия проверяются на одном и том же диапазоне, могу ли я предложить Select Case?Также добавлен оператор With.

Option Explicit
Sub FindRepRegion()

    Dim Findtext As String
    Dim Replacetext As String

    Replacetext = "'Sheet1'!$AW:$AW"

    With ActiveSheet

        Select Case .Range("J1")
            Case "School"
                Findtext = "'Sheet1'!$B:$B"
            Case "Grant"
                Findtext = "'Sheet1'!$AX:$AX"
            Case "Community School"
                Findtext = "'Sheet1'!$AY:$AY"
        End Select

        .Range("E3:G35").Replace what:=Findtext, replacement:=Replacetext, lookat:=xlPart, MatchCase:=False

    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...