Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Некорректная работа цикла в цикле
 
Добрый день форумчани!
Помогите пожалуйста разобраться с работой циклов. Бьюсь второй день(.

Суть вопроса: Есть 2 цикла, основной и вспомогательный, внутри основного. Основной пробегает по строкам исходной таблицы забирая составной ключ по которому должны копироваться данные из вспомогательной таблицы (она создается на основе основной на предыдущем "этапе").

Вспомогательный цикл призван проверить наличие ключа во всех строчках вспомогательной таблицы (порядок строк разный в 2 таблицах), и если ключ найден, то копирует основные значения табличной части в основную таблицу, если нет, оставляет поля по новому ключу пустыми (доступными для заполнения). Ключ копируется из внешнего источника ХД через одноименный лист.

Проблема: Когда устанавливаю чек поинт и делаю отладку по шагам, все отрабатывает корректно, но когда запускаю макрос (проблемная часть с 181 строки кода), копирование происходит без выполнения логических условий проверки ключа, тупо подряд строки из временной таблица в основную копируются.

В файле с примером целевой вид после выполнение макроса на листе "Ввод данных_Целевой", то, что получается сейчас при запуске на листе "Ввод данных_Ложный".
Помогите разобраться, почему так отрабатывает макрос при обычном запуске, в то время, как при отладке по шагам, все работает корректно?

Файл с примером https://yadi.sk/i/DWr0986fqn42b
Password - 123
Изменено: AlekseyF - 9 Апр 2016 21:57:25
Копирование диапазона, адрес которого задан с переменной, Копирование диапазона, адрес которого задан с переменной
 
Коллеги, прошу помощи.

Необходимо скопировать циклом по строкам диапазон таблицы из "временного" листа в "постоянный" при выполнении конкретного условия. Диапазон по столбцам разрывают формулы, поэтому возможно придется делать несколько диапазонов на одну строку или может какой-то более удобный вариант, для примера взял первый диапазон с 6 по 8 столбец, в 9 идет первая формула, потом снова диапазон для копирования с 10 столбца по 15 например.

Условие, это совпадение на двух листах конкатенаций из 3 уникальных аналитик, т.е. если они совпали, то копируем указанный диапазон из одного листа в другой. Структура листов идентична по набору столбцов. Макрос при запуске ругается на функцию копирования.


Общий смысл примерно такой: Есть лист, куда прилетают много значений из ХД, эти значения идут в разрезе 3 уникальных полей (Структура_Должность_Сотрудник), далее эти данные копируются на пользовательский лист "Ввод данных", в котором заносят недостающие цифры.

Может возникнуть такая ситуация, когда обновились данные в ХД, например добавился новый сотрудник и встает вопрос как подкачать новые значения не потеряв старые (структура строк ломается), уже внесенные пользователем. Самый простой способ, который я придумал, это скопировать уже заполненные данные во временный лист, затем вставить обновленные данные из ХД и по ключу вернуть ранее заполненный цифры из временного листа обратно. На последнем этапе я пока и завис из-за того, что не знаю как грамотно скопировать диапазон между листами.(Опыт в VBA не большой)

Буду благодарен полезному совету, заранее спасибо!

Ссылка на файл с таблицей.https://yadi.sk/i/HkIM5PkqqjGb3
Код
   Sub Копирование()
    

    
    '##########################################
    '####  КОПИРОВАНИЕ ИЗ ВРЕМЕННОГО ЛИСТА ####
    '##########################################
    
    SheetName_Goal = "Ввод данных"
    SheetName_Goal_tmp = "Ввод данных (2)"
    
    Dim i As Integer
        
    Count_Copy = ActiveWorkbook.Sheets(SheetName_Goal).Cells(Rows.Count, 3).End(xlUp).Row

    
                    For i = 3 To Count_Copy
                        If ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 4) = ActiveWorkbook.Sheets(SheetName_Goal_tmp).Cells(i, 4) Then
                            ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 5) = 1

                             ActiveWorkbook.Sheets(SheetName_Goal_tmp).Range(Cells(i, 6), Cells(i, 8)).Copy
                             ActiveWorkbook.Sheets(SheetName_Goal).Range(Cells(i, 6), Cells(i, 8)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False

                        Else
                            ActiveWorkbook.Sheets(SheetName_Goal).Cells(i, 5) = 0
                        End If
                    Next
                    

    End Sub
Совместный доступ: ошибка загрузки данных макросом из хранилища БД
 
 
Суть проблемы:

На локальном сервере есть файл Excel с возможностью совместного пользования. Одна часть листов файла заполняется пользователями, другая только макросом из хранилища БД. При этом те данные которые заполняются из хранилища являются справочной информацией и пользователь не должен иметь возможность править\ изменять эти листы. Соответственно когда запускается макрос для загрузки данных из ХД появляется ошибка, макрос не может записать информацию в ячейки, которые закрыта для редактирования пользователями в режиме совместного использования.

Задача: Загрузить необходимые данные из хранилища таким образом, чтобы пользователи имели возможность просмотра этой информации без редактирования, при этом важное условие, чтобы книга была в совместном доступе, так как есть листы, в которые рулями тянется информация с листов заполненных макрасом и пользователи вносят в эти листы данные. Чтобы было понятнее, приведу пример: макрасом из ХД формируются справочники (Сотрудник,Подразделение,Должность) на отдельных листах, потом информация правилами внутри книги подтягивается в итоговую сводную таблицу, в которой пользователи вносят данные в режиме совместного доступа. Возможно такое реализовать без сильных потерь в функционале?
Изменено: AlekseyF - 29 Янв 2016 11:51:37
Страницы: 1
Наверх