【问题标题】:VBA: Changing specific text in a cell and looping it to all worksheetsVBA:更改单元格中的特定文本并将其循环到所有工作表
【发布时间】:2018-01-09 21:03:19
【问题描述】:

这里是新手。尝试编写以下代码,但无论我将某些行放在哪里或更改了什么,它都会不断出现错误。

请帮忙?谢谢!!

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

【问题讨论】:

  • 你能至少发布错误信息吗?
  • 你在哪里得到错误?
  • 错误是编译错误: Next without For
  • 您的“Next I”在您未关闭的 IF 中。
  • 顺便说一句,如果你养成了缩进代码的习惯,你会马上注意到这样的事情。我喜欢this site。如果在您缩进 End Sub 行后,它的缩进级别与 Sub ...() 的缩进级别不同,您就会知道缺少某些东西

标签: vba excel excel-formula


【解决方案1】:

这样做。

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

【讨论】:

  • @CGG,祝你好运!
【解决方案2】:

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

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

【讨论】:

  • 感谢 Vityata!不幸的是,它只改变了 Sheet 2 的第一个实例的颜色,而不是整个工作簿。
  • @CGG - 这是因为您没有遍历所有工作表。请参阅此内容并尝试将其添加到您的代码中。 stackoverflow.com/questions/25953916/… 确保您始终正确地打开和关闭条件和循环。
  • 我试过了,但它只在表 1 的第一个实例上重复。所以基本上只有第一次显示在表 1 和表 2 中才会改变。每次它出现在工作簿中所有工作表的工作表中时,我都会尝试这样做。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多