Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
19.04.2024, 06:51:08

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Вставка данных в следующую пустую строку
Страниц: [1]   Вниз
Печать
Автор Тема: Вставка данных в следующую пустую строку  (Прочитано 15831 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« : 28.10.2015, 16:42:43 »

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

Код: (vb)
Выбираем область
    Rows("1:150").Select
    
' Копируем
    Selection.Copy
    
' Открываем книгу отдела
    Workbooks.Open Filename:="\\srv\Obmen\_ФОРМЫ\АРХИВ\" & Range("C5").Value & ".xlsx"
    
' Снимаем защиту
    ActiveSheet.Unprotect Password:="*******"
' Вставляем скопированное в первую пустую строку
    Dim emptyRow As Long
    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
    Cells(emptyRow, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


Стопорится на строке Selection.PasteSpecial
Никак не могу понять. почему не срастается.

Please HELP

PS Только начал осваивать ВБА, не пинайте
« Последнее редактирование: 28.10.2015, 16:47:15 от bpn1973 » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 28.10.2015, 17:18:06 »

1. Текст ошибки значительно упрощает процесс её выявления
2. Убедитесь, что на результирующем листе достаточно строк для вставки(т.е. от первой пустой до последней ячейки листа более 150 строк)
3. Убедитесь, что буфер обмена не очистился после открытия новой книги.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #2 : 28.10.2015, 18:06:46 »

1. Текста ошибки нет. В VBA редакторе выскакивало окно - стоп или дебаг. Я нажимал дебаг и строка с pastespecial выделялась желтым цветом.
2. Смысл макроса - после генерации расчета цены продажи (в одном документе может быть до 150 товаров), расчет отправляется на печать (копирование расчета на новый лист, удаление лишних строк, печать), параллельно вносится в архивный файл (ради чего рассматриваемый кусок и делаю). Учитывая максимальное число строк в листе - 1 млн. проблемы с нехваткой строк не должно быть. По моим прикидкам один отдел накропает в пределах 200-300 тыс. строк... в год. Данные одного отдела экспортируются в отдельную книгу. Т.е. все 9 отделов имеют свои отдельные книги.
3. В макросе насколько я понимаю нет команд, которые бы чистили буфер... Или снятие защиты с листа и введение пароля очищает буфер?

« Последнее редактирование: 28.10.2015, 18:10:29 от bpn1973 » Записан
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #3 : 28.10.2015, 18:14:45 »

Еще забыл сказать.

Код то работает, то нет. Условия при которых работает, при которых нет - не понятны. Отключение строки ввода пароля - не является ключевым.

Возможно буфер все таки чиститься... но вот в какой момент?
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #4 : 28.10.2015, 18:34:16 »

Текста ошибки нет
И почему мне кажется, что меня обманывают? Если выскочило окно - значит там что-то да написано, кроме кнопок. Вот этот текст и нужен.
Ошибка так же может быть, если после первой вставки выделен уже другой фрагмент. Поэтому имеет смысл попробовать так:
Код: (vb)
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #5 : 29.10.2015, 10:18:21 »

Вы правы) Но я не намеренно обманывал)
Не обратил внимание, что таки есть описание ошибки.

В общем пишет Run time Error 1004
Метод PasteSpecial из класса Range завершен неверно

Ссылки на файлы с примерами (не нашел как по другому выложить файлы).
https://cloud.mail.ru/public/BBTH/eFockXqVx основной файл
https://cloud.mail.ru/public/dg6V/Rg1bnTdxw файл для архива
https://cloud.mail.ru/public/8wxf/RhNgo28pr файл для архива
https://cloud.mail.ru/public/CiNV/3yHgF9Dan файл для архива
« Последнее редактирование: 29.10.2015, 14:08:33 от The_Prist » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #6 : 29.10.2015, 11:18:49 »

не нашел как по другому выложить файлы
Нажимаете Ответить и в расширенной форме ответа есть возможность приложить файлы, общим размером не более 150Кб.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #7 : 29.10.2015, 11:25:33 »

Спасибо)
Файлы прилагаю.

эту же тему поднял тут http://planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=71058&TITLE_SEO=71058-vybor-sleduyushchey-pustoy-stroki-i-vstavka-dannykh-v-nee&MID=595482&result=edit#message595482
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #8 : 29.10.2015, 12:19:21 »

Ну вот смотрите. Как только Вы открыли файл - буфер очистился. Сделайте так:
Код: (vb)
Sub Пример()
    Dim wsAct As Worksheet
    Set wsAct = ActiveSheet
    
    Workbooks.Open Filename:="c:\" & Range("a3").Value & ".xlsx"
    ActiveSheet.Unprotect Password:="1111"
    Dim emptyRow As Long
    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
    
    wsAct.Rows("10:18").Copy
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Cells(emptyRow, 1).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub


P.S. Если файлов несколько, то имеет смысл их сначала заархивировать, а потом одним файлом этот архив выложить.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #9 : 29.10.2015, 13:18:01 »

Огромное спасибо!
Код ясный и простой! Даже я его понял)

Спасибо за уделенное Вами время моей проблеме.
« Последнее редактирование: 29.10.2015, 13:19:45 от bpn1973 » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #10 : 29.10.2015, 13:20:03 »

Кстати, почитайте про определение последней заполненной ячейки: Как определить последнюю ячейку на листе через VBA?
т.к. Ваш текущий способ выдаст неверный результат, если в диапазоне будут пропуски в виде пустых ячеек.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
bpn1973
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 7


Просмотр профиля
« Ответ #11 : 29.10.2015, 13:29:12 »

Я читал и знаю эту проблему.
У меня не будет пустых строк. После вставки блока инфы все пустые строки удаляются
Код: (vb)
Selection.AutoFilter
     ActiveSheet.Range("$B:$B").AutoFilter Field:=1, Criteria1:="="
Cells.Delete

Далее файл сохраняется и закрывается.
« Последнее редактирование: 29.10.2015, 14:35:41 от vikttur » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru