Всем привет. Имеется книга, много вкладок, данные берутся из стороннего приложения (Ынтырнет Ыксплорер), вставляются на лист "RT". Макросом берём нужные данные, вставляем в другие таблицы на вкладке "Ввод данных", умножаем, округляем. Это я решил, пусть коряво и колхозно, но сделал сам и оно работает. Проблема в том, что макрос при каждой вставке, перезаписывает ВСЕ ячейки. Нужно, чтобы он НЕ ПЕРЕЗАПИСЫВАЛ уже имеющиеся данные, а вставлял только в пустые ячейки. Вот с этим затык. Подскажите пожалуйста. Если у когонить появится желание оптимизировать мои кракозябры - буду благодарен. Файлик приложил.
Всем привет. Имеется книга, много вкладок, данные берутся из стороннего приложения (Ынтырнет Ыксплорер), вставляются на лист "RT". Макросом берём нужные данные, вставляем в другие таблицы на вкладке "Ввод данных", умножаем, округляем. Это я решил, пусть коряво и колхозно, но сделал сам и оно работает. Проблема в том, что макрос при каждой вставке, перезаписывает ВСЕ ячейки. Нужно, чтобы он НЕ ПЕРЕЗАПИСЫВАЛ уже имеющиеся данные, а вставлял только в пустые ячейки. Вот с этим затык. Подскажите пожалуйста. Если у когонить появится желание оптимизировать мои кракозябры - буду благодарен. Файлик приложил.xDriver
Запись идёт построчно, с течением времени. Одномоментно записывается одна строка по всему документу. Да, получается, что нужно дописывать строку (в обычном режиме), очень редко, но бывают случаи, когда нужно или диапазон записать (первые три-четыре строки например) или удалив значения из пары-тройки ячеек, вставить в них данные, которые уже есть на листе "RT". Или как вариант, могут сразу заполнить один-два столбца и дописывать в свободные. Потому и "пустые ячейки", так ИМХО, более точно можно обозвать суть проблемы.
Запись идёт построчно, с течением времени. Одномоментно записывается одна строка по всему документу. Да, получается, что нужно дописывать строку (в обычном режиме), очень редко, но бывают случаи, когда нужно или диапазон записать (первые три-четыре строки например) или удалив значения из пары-тройки ячеек, вставить в них данные, которые уже есть на листе "RT". Или как вариант, могут сразу заполнить один-два столбца и дописывать в свободные. Потому и "пустые ячейки", так ИМХО, более точно можно обозвать суть проблемы.xDriver
Изумительно! Огромное спасибо! Очень надеюсь, что у меня хватит ресурсов, чтобы интегрировать это в "боевой" файлик Спасибо! И плюсик Вам в репу пы.сы. Скажите пожалуйста, Cells(i, j + 14), что делает тут 14? Я остальное понял, а с 14 забуксовал. Если на "RT" есть пустые строки, то на "ввод данных" конечные ячейки заполняются нулями и макрос перестаёт работать. И округление. Не обратил внимание раньше. Но средствами Excel, 2.5 округляет до 3, а макрос до 2..
Изумительно! Огромное спасибо! Очень надеюсь, что у меня хватит ресурсов, чтобы интегрировать это в "боевой" файлик Спасибо! И плюсик Вам в репу пы.сы. Скажите пожалуйста, Cells(i, j + 14), что делает тут 14? Я остальное понял, а с 14 забуксовал. Если на "RT" есть пустые строки, то на "ввод данных" конечные ячейки заполняются нулями и макрос перестаёт работать. И округление. Не обратил внимание раньше. Но средствами Excel, 2.5 округляет до 3, а макрос до 2..xDriver
Если есть пустые строки на листе "RT", то при заполнении макросом строк на листе "ввод данных", он их заполняет нулями. После этого, когда на листе "RT", данные появляются, то в "ввод данных" они не копируются, макрос не перезаписывает не пустые ячейки (что и требовалось доказать, макрос работает отлично). Рекордером получил "SkipBlanks:=True", можно это прикрутить в макрос?
Если есть пустые строки на листе "RT", то при заполнении макросом строк на листе "ввод данных", он их заполняет нулями. После этого, когда на листе "RT", данные появляются, то в "ввод данных" они не копируются, макрос не перезаписывает не пустые ячейки (что и требовалось доказать, макрос работает отлично). Рекордером получил "SkipBlanks:=True", можно это прикрутить в макрос?xDriver
Сообщение отредактировал xDriver - Понедельник, 01.06.2020, 07:06
Костыли наше всё )) Если не получается не получать нули, их можно ... удалить [vba]
Код
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "" Then .Cells(i, j) = Round(Worksheets("RT2").Cells(i, j + 14) * 100, 0) Next j Next i End With
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "0" Then .Cells(i, j).ClearContents Next j Next i End With
[/vba] Осталось победить округление, чтобы 2,5 было равно 3, а не 2
Костыли наше всё )) Если не получается не получать нули, их можно ... удалить [vba]
Код
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "" Then .Cells(i, j) = Round(Worksheets("RT2").Cells(i, j + 14) * 100, 0) Next j Next i End With
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "0" Then .Cells(i, j).ClearContents Next j Next i End With
[/vba] Осталось победить округление, чтобы 2,5 было равно 3, а не 2xDriver
Сообщение отредактировал xDriver - Понедельник, 01.06.2020, 08:50
Можно просто добавить проверку на пустые ячейки в исходнике [vba]
Код
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "" And Worksheets("RT2").Cells(i, j + 14) <> "" Then .Cells(i, j) = Round(Worksheets("RT2").Cells(i, j + 14) * 100, 0) Next j Next i End With
[/vba]
Можно просто добавить проверку на пустые ячейки в исходнике [vba]
Код
With Worksheets("ввод данных") For i = 2 To 13 For j = 2 To 5 If .Cells(i, j) = "" And Worksheets("RT2").Cells(i, j + 14) <> "" Then .Cells(i, j) = Round(Worksheets("RT2").Cells(i, j + 14) * 100, 0) Next j Next i End With