VBA:更改单元格中的特定文本并将其循环到所有工作表

时间:2018-01-09 12:27:56

标签: excel vba excel-vba excel-formula

新手在这里。尝试编写以下内容,但无论我放置某些行或我改变了什么,它都会不断出现错误。

请帮帮忙?谢谢!

Sub WorksheetLoop()

Dim WS_Count As Integer
Dim I As Integer
Dim varFound As Variant, varSearch As Variant
Dim strAddress As String, intPos As Integer

WS_Count = ActiveWorkbook.Worksheets.Count

For I = 1 To WS_Count
varSearch = "CUS_ECO_SEC_CD"
Set varFound = Cells.Find(varSearch, LookIn:=xlValues, LookAt:=xlPart)

If Not varFound Is Nothing Then
strAddress = varFound.Address
Do

With varFound
Do
intPos = InStr(intPos + 1, .Value, varSearch, vbTextCompare)
If intPos Then

.Characters(Start:=intPos, Length:=Len(varSearch)).Font.ColorIndex = 4
End If

Loop Until intPos = 0
End With

Next I

End Sub

2 个答案:

答案 0 :(得分:2)

这样做。

Sub WorksheetLoop()

    Dim WS_Count As Integer
    Dim I As Integer
    Dim varFound As Range, varSearch As Variant
    Dim strAddress As String, intPos As Integer
    Dim Ws As Worksheet

    'WS_Count = ActiveWorkbook.Worksheets.Count

    For Each Ws In Worksheets
        With Ws
            varSearch = "CUS_ECO_SEC_CD"
            Set varFound = .Cells.Find(varSearch, LookIn:=xlValues, LookAt:=xlPart)

            If Not varFound Is Nothing Then
                strAddress = varFound.Address
                    Do
                        intPos = InStr(varFound.Value, varSearch)
                        If intPos Then
                            varFound.Characters(Start:=intPos, Length:=Len(varSearch)).Font.ColorIndex = 4
                        End If
                        Set varFound = .Cells.FindNext(varFound)
                    Loop Until strAddress = varFound.Address
            End If
        End With
    Next Ws
End Sub

答案 1 :(得分:0)

好的,这离你正在做的事情更近了一步:

Sub WorksheetLoop()

    Dim WS_Count As Integer
    Dim I As Integer
    Dim varFound As Variant, varSearch As Variant
    Dim strAddress As String, intPos As Integer

    WS_Count = ActiveWorkbook.Worksheets.Count

    For I = 1 To WS_Count
        varSearch = "CUS_ECO_SEC_CD"
        Set varFound = Cells.Find(varSearch, LookIn:=xlValues, LookAt:=xlPart)

        If Not varFound Is Nothing Then
            strAddress = varFound.Address
            With varFound
                Do
                    intPos = InStr(intPos + 1, .Value, varSearch, vbTextCompare)
                    If intPos Then
                    .Characters(Start:=intPos, Length:=Len(varSearch)).Font.ColorIndex = 4
                    End If
                Loop Until intPos = 0
            End With
        End If
    Next I
End Sub

请注意,如果您正确缩进代码VBA有很多帮助。在您的情况下,我删除了一个Do,并添加了End If以使其正常工作。

自动添加代码的最简单方法是添加SmartIndent或在线执行此操作 - http://www.vbindent.com/

编辑 - 这样的内容可让您循环播放工作表:

Sub WorksheetLoop()

    Dim WS_Count As Integer 'consider using Long instead of Integer somewhere in the future
    Dim I As Integer
    Dim varFound As Variant, varSearch As Variant
    Dim strAddress As String, intPos As Integer
    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        varSearch = "CUS_ECO_SEC_CD"
        Set varFound = ws.Cells.Find(varSearch, LookIn:=xlValues, LookAt:=xlPart)
        If Not varFound Is Nothing Then
            strAddress = varFound.Address
            With varFound
                Do
                    intPos = InStr(intPos + 1, .Value, varSearch, vbTextCompare)
                    If intPos Then
                    .Characters(Start:=intPos, Length:=Len(varSearch)).Font.ColorIndex = 4
                    End If
                Loop Until intPos = 0
            End With
        End If
    Next ws

End Sub
相关问题