Nano Hash - криптовалюты, майнинг, программирование

VBA: изменение определенного текста в ячейке и его зацикливание на всех листах

Новичок здесь. Пробовал кодировать следующее, но он продолжает выдавать ошибки независимо от того, где я помещаю определенные строки или что я меняю.

Пожалуйста помоги? Спасибо!!

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
09.01.2018

  • Не могли бы вы хотя бы опубликовать сообщения об ошибках? 09.01.2018
  • А где вы берете ошибки? 09.01.2018
  • Ошибка компиляции Ошибка: Далее без For 09.01.2018
  • Ваше Следующее Я находится внутри ЕСЛИ, которую вы не закрыли. 09.01.2018
  • Привет, Пьер. Пробовал, но не получилось. Поместите «Конец, если» после «Конец с», и он покажет «Ошибка компиляции: конец, если без блока, если». Спасибо! 09.01.2018
  • Кстати, если вы выработаете привычку делать отступы в своем коде, вы сразу же заметите подобные вещи. Мне нравится этот сайт. Если после того, как вы сделаете отступ, ваша строка End Sub не достигнет того же уровня отступа, что и ваша Sub ...(), вы поймете, что чего-то не хватает. 09.01.2018

Ответы:


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
09.01.2018
  • @CGG, удачи! 09.01.2018

  • 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
    
    09.01.2018
  • Спасибо Витята! К сожалению, это меняет цвет только первого экземпляра листа 2, а не всей книги. 09.01.2018
  • @CGG - это потому, что вы не просматриваете все рабочие листы. Посмотрите это и попробуйте добавить в свой код. stackoverflow.com/questions/25953916/ Убедитесь, что вы всегда открываете и закрываете условия и циклы правильно. 09.01.2018
  • Я пробовал это, но это повторяется только в первом экземпляре листа 1. Так что в основном изменяется только первый раз, когда он отображается на листах 1 и 2. Я пытаюсь сделать это каждый раз, когда он появляется на листе для всех листов в книге. Спасибо! 09.01.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..