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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2013, 08:50   #1
ТРИУМФ
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 49
По умолчанию Подправить макрос.

Добрый день, в данный момент я изучаю VBA для Excel по книжки Автора "Срядный А.С. Новейший самоучитель Microsoft Excel 2010" так вот есть листинг .

Код:
Sub Replace_code()
Dim i As Integer
Dim strSeach, strReplace


'Изменение название столбца

Worksheets(1).Cells(2, 1) = Worksheets(2).Cells(2, 3)
For i = 3 To Worksheets(1).UsedRange.Rows.Count + 1

'искомый текст
       
       strSearch = Worksheets(1).Cells(i, 1).Value
       For j = 3 To Worksheets(2).UsedRange.Rows.Count + 1
       
       'поиск соотвествий
       
       If strSeach = Worksheets(2).Cells(j, 1).Value Then
       strReplace = Worksheets(2).Cells(j, 3).Value
        
        'замена данных
        
        Worksheets(1).Columns("A").Replace_
            What:=strSearch, Replacement:=strReplace,_
LookAt:=xlWhole, SearchOrder:=xlByColumns,_
MatchCase:=True
End If
Next j
Next i
End Sub
ругается на ситакс ерор
Код:
What:=strSearch, Replacement:=strReplace,_
LookAt:=xlWhole, SearchOrder:=xlByColumns,_
MatchCase:=True

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



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.08.2013 в 08:55.
ТРИУМФ вне форума Ответить с цитированием
Старый 07.08.2013, 09:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, я бы начал с того, что записал это примерно так:
Код:

    Worksheets(1).Columns("A").Replace _
        What:=strSearch, Replacement:=strReplace, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, _
        MatchCase:=True
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.08.2013, 09:16   #3
ТРИУМФ
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, я бы начал с того, что записал это примерно так:
Код:

    Worksheets(1).Columns("A").Replace _
        What:=strSearch, Replacement:=strReplace, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, _
        MatchCase:=True
После этого он мне удаляет столбец А на листе где как раз должен был заменить цифры на надписи
ТРИУМФ вне форума Ответить с цитированием
Старый 07.08.2013, 09:18   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я бы начал уже с первой строки:

Код:
Dim i As Integer
никак не вяжется с
Код:
For i = 3 To Worksheets(1).UsedRange.Rows.Count + 1
Если бы обьявлялась переменная j - вероятно было бы уже 2 ошибки...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.08.2013, 09:21   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не понятно, зачем там +1? И так уже скорее всего на 3 строки цикл пойдёт ниже данных (кстати тоже узкое место)...
Ну а цикл в цикле перебирать ЯЧЕЙКИ - это уж вообще... Ладно бы массив, если словарь пока не проходили...
Хотя вероятно массивы тоже не проходили
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.08.2013, 09:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Я бы начал уже с первой строки:
Код:
Dim i As Integer
никак не вяжется с
Код:
For i = 3 To Worksheets(1).UsedRange.Rows.Count + 1
Коллега, я правильно Вас понял, что в тип Integer количество строчек может не поместиться, и нужно использовать тип Long ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.08.2013, 09:50   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну конечно.
Если 100% известно, что конкретно у меня именно в этом документе строк никогда не будет много (больше предела Integer) - то можно оставить и так, ошибки не будет.
Но нет смысла - почитайте http://msdn.microsoft.com/en-us/libr...ffice.10).aspx
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.08.2013, 10:04   #8
ТРИУМФ
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 49
По умолчанию

так что в итоге?
ТРИУМФ вне форума Ответить с цитированием
Старый 07.08.2013, 10:26   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В итоге Срядный доверия не вызывает...
А что хотите сделать? Просто изучить макрос или что-то сделать практически?
Во втором случае давайте пример в файле - напишем хороший быстрый макрос.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.08.2013, 10:48   #10
ТРИУМФ
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 49
По умолчанию

Просто изучить, да я ошибся не срядный, а Сурядный
ТРИУМФ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подправить программу. Starget-93 C++ Builder 0 28.12.2012 13:46
c++ подправить grom333 Помощь студентам 4 27.05.2011 21:02
Данные из закрытой книги. Подправить макрос maragva Microsoft Office Excel 0 30.01.2011 14:51
Подправить код werser Помощь студентам 4 14.03.2010 23:26