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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2014, 07:28   #11
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Я так понимаю количество строк будет влиять на скорость макросов?
Ничего страшного
Тогда проще так:
Код:
Sub обновка()
    Dim wb As Workbook, ws As Worksheet, x As Range, i As Integer, a()
    Application.ScreenUpdating = False
    Set ws = ActiveSheet: a = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\Централизованный.xlsx")
    For i = 1 To UBound(a, 1)
        Set x = [A:A].Find(what:=a(i, 1), LookAt:=xlWhole)
        If x Is Nothing Then ws.Rows(i + 1).Copy Cells(Rows.Count, 1).End(xlUp).Offset(1) _
        Else ws.Rows(i + 1).Copy Rows(x.Row)
    Next
    wb.Close True
End Sub
Пример во вложении.
Вложения
Тип файла: rar Юзер_2.rar (14.3 Кб, 8 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 14.07.2014 в 07:33.
SAS888 вне форума Ответить с цитированием
Старый 14.07.2014, 07:38   #12
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Тогда проще так:
Код:
Sub обновка()
    Dim wb As Workbook, ws As Worksheet, x As Range, i As Integer, a()
    Application.ScreenUpdating = False
    Set ws = ActiveSheet: a = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\Централизованный.xlsx")
    For i = 1 To UBound(a, 1)
        Set x = [A:A].Find(what:=a(i, 1), LookAt:=xlWhole)
        If x Is Nothing Then ws.Rows(i + 1).Copy Cells(Rows.Count, 1).End(xlUp).Offset(1) _
        Else ws.Rows(i + 1).Copy Rows(x.Row)
    Next
    wb.Close True
End Sub
Пример во вложении.
Подозрительно маленький код.
Но он работает. Потестю еще.
Как сохранить и закрыть Централизованный если все .true?
Ну чтобы он не всплавал в окошке.

Последний раз редактировалось Евгений Таб; 14.07.2014 в 07:39. Причина: апавпвпвапавп
Евгений Таб вне форума Ответить с цитированием
Старый 14.07.2014, 07:41   #13
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы успели прочитать мое сообщение раньше, чем я его исправил.
Нужно использовать "wb.Close True".
В моем предыдущем сообщении и во вложении это реализовано.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 14.07.2014, 07:56   #14
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Все ок, только ошибка
Вложения
Тип файла: zip Desktop.zip (43.8 Кб, 9 просмотров)
Евгений Таб вне форума Ответить с цитированием
Старый 14.07.2014, 19:37   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Дело в том, что макрос формирует массив из значений столбца "A" файла "Юзер", начиная со 2-ой строки, заканчивая последней заполненной ячейкой столбца. Затем организуется цикл по элементам массива. Если интересующий нас диапазон состоит из одной единственной ячейки, то при попытке сформировать массив будет ошибка.
Чтобы избежать возможной в этом случае ошибки, достаточно строку
Код:
a = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
заменить на
Код:
a = Range("A2:B" & Cells(Rows.Count, 1).End(xlUp).Row).Value
Теперь, если заполнена всего одна строка, массив будет формироваться из 2-х ячеек столбцов "A" и "B", т. е. без ошибки.
Пример во вложении.
Еще можно в начале кода проверять, заполнена ли ячейка "A2" (либо другими возможными способами), т. е. есть ли вообще заполненные нужными данными строки. И, если таблица пуста, то ничего не делать (выход из процедуры).
Вложения
Тип файла: rar Юзер_3.rar (15.8 Кб, 11 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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