Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2015, 15:50   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию замена значений в формулах

Добрый день. Хочу сделать замену текста "1503" на "1506" в формулах с помощью VBA.
У меня такой код:
Код:
Cells.Replace What:="1503", Replacement:="1506", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Но! VBA заменяет "1503" не только в формулах, которые начинаются с "=", а и в тексте:
1. "[Д201503+Д201504]"
2. "Обороти за звіт. період за Кт 651500 : (Обороти за звіт. період за Кт 661 - ((Обороти за звіт. період за Кт 651503 : 8,41 х 100)"

Ребята, помогите, пожалуйста, подправить код,чтобы замена происходила только в формулах (кроме текста)
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 16:00   #2
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Вы указываете все ячейки Cells.
Вам нужно указать диапазон Range, в котором провести замену
27102014 вне форума Ответить с цитированием
Старый 18.05.2015, 16:20   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

LookIn:= xlFormulas
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 16:24   #4
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Игорь, вот так нужно поменять код, чтобы замена произошла только в формулах?
Код:
Cells.Replace What:="1503", Replacement:="1506", LookIn:= xlFormulas, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
27102014 вне форума Ответить с цитированием
Старый 18.05.2015, 16:40   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

только если в ячейке написано Д1503 - это тоже будет заменено хоть и нет знака равно (константа в ячейке - находится в поле ФОРМУЛА)

а вот если в ячейке написано = "Д" & 1500+3
и в итого видим тоже самое Д1503 - но вот это - останется.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 18.05.2015 в 16:46.
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 16:50   #6
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Выдает ошибку:
Compile error:
Named argument not found

У меня ексель 2003
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 16:58   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Jaroslav,
используйте вместо Replace Find, а потом самостоятельно решайте что делать с каждым найденым
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 17:18   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и вообще, если строго:
поиск может различать где искать значение в поле значение или в поле формула (можно еще искать в примечаниях)

а замена в результатах вычисления формулы - не допустима. т.е. если в формуле =1+2, то найти 3 как значение - можно, а заменить 3 на 5 - не возможно, команда замена проигнорирует 3, которая является результатом вычисления формулы.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.05.2015, 17:26   #9
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Игорь, прописал:
Код:
With Worksheets(1).Range("A1:GJ1100")
    Set c = .Find("1503", LookIn:=xlFormulas)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Replace What:="1503", Replacement:="1506", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
метод Find делает то же самое, что и код:
Код:
Cells.Replace What:="1503", Replacement:="1506", LookIn:= xlFormulas, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
то есть проводит замену не только в формулах, но и в значениях.
Jaroslav вне форума Ответить с цитированием
Старый 18.05.2015, 17:28   #10
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

То есть вариантов решения моего вопроса нет?
Jaroslav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена значений kickout Microsoft Office Excel 2 23.04.2014 16:33
Замена значений Corban_Dallas Microsoft Office Excel 1 03.04.2013 09:08
замена значений в ListView TotKtoNado БД в Delphi 2 25.08.2011 18:54
замена значений DeDoK JavaScript, Ajax 5 24.05.2011 02:16
Вставка и замена в формулах в MS Word Mixasik Общие вопросы Delphi 1 22.03.2010 09:45