Страницы: 1
RSS
Ошибка "метод pastespecial из класса range завершен неверно"
 
Коллеги, добрый день! Нужна ваша помощь. Макрос выдает ошибку (метод pastespecial из класса range завершен неверно) по выделенной строке ниже.
При этом, макрос отлично работает, если вставка осуществляется в другой лист книги (отличный от листа, на котором копируются ячейки). Мне нужно, чтобы накопление информации и ее ввод осуществлялись на одном листе (в верхней строке ввод (B4:P4), в нижних (начиная с 6 строки) сохранение информации.
Код
Sub 1()
    Sheets("База данных").Select
    Range("B4:P4").Select
    Selection.Copy
    Sheets("База данных").Select
    Range("B6:P1000" & Cells(Rows.Count, 1).End(xlUp).Row).Select
    Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End Sub
 
1. Смените отображаемое имя. Это делается через настройки профиля.
2. Коды оформляйте тегами(кнопочка <...>)
Код
Sheets("База данных").Range("B4:P4").Copy
Sheets("База данных").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues
хотя и в Вашем коде я не заметил ничего, что могло бы вызвать ошибку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Большое спасибо Вам! Работает макрос!
 
А какой диапазон выделяется этой строчкой

Код
Range("B6:P1000" & Cells(Rows.Count, 1).End(xlUp).Row).Select
 
 
Имя сменил. А вот с кодом не совсем понятно, что нужно сделать. Можно пояснить для особо "одаренных"?)
 
Цитата
Артур пишет:
Можно пояснить для особо "одаренных"?)
ищите кнопку <..> и используйте её для форматирования вашего кода.
 
Понял. Следующие сообщения обязуюсь оформлять правильно!)
 
Цитата
Kuzmich пишет:  А какой диапазон выделяется этой строчкой
Range(  "B6:P1000" & Cells(Rows.Count, 1).  End  (xlUp).Row).  Select
Это диапазон, куда планировалось сохранение информации, заносимой со строки ввода.
 
Надо писать

Код
Range("B6:P" & Cells(Rows.Count, 1).End(xlUp).Row).Select
 
на вашей строке будет ошибка, я это имел в виду
 
Дабы не плодить темы, с той же ошибкой- сюда же:
Пытаюсь перенести из одной книги в другую, но выдает ошибку: "метод pastespecial из класса range завершен неверно"
Кто чем может, помогите)

Код
Sub Export_inFile() 

Application.ScreenUpdating = False 

Application.DisplayAlerts = False 

Application.AskToUpdateLinks = False

Dim mess
mess = MsgBox("Âû õîòèòå âûãðóçèòü äàííûå â îáùèé îò÷åò?", vbYesNo, "Ýêñïîðò èíôîðìàöèè") 

If mess = vbYes Then

    Range("Таблица1").Select
    Selection.SpecialCells(xlCellTypeVisible).Select 
    Selection.Copy
    
Workbooks.Open Filename:="\\local\Shared\Îòäåë äîñòàâêè\Ëîãèñòèêà\Îáùèé îïåðàòèâíûé îò÷åò.xlsb" ' îòêðûâàåì ôàéë îò÷åòà
       x1 = Range("A" & Rows.Count).End(xlUp).Row + 1 
       Range("A" & x1).Select 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False   вот тут говорит, что завершено неверно
            Range("A6:A1000000").Select 
           Selection.NumberFormat = "m/d/yyyy" 
                Application.ScreenUpdating = True
                Application.DisplayAlerts = True 
                Application.AskToUpdateLinks = True
                ActiveWorkbook.Save
                ActiveWorkbook.Close
       Else
       End If
       
      

End Sub
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Насколько знаю, Специальная вставка не умеет работать с несвязанными диапазонами. А у Вас явно именно такой диапазон попадает в буфер, судя по этой строке:
Код
Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy

т.е. Вы копируете диапазон, часть строк которого скрыта. И он получается "рваный". Попробуйте хотя бы руками(без VBA) вставить только значения после копирования такого диапазона. Получите ошибку...
Изменено: The_Prist - 22.03.2017 12:49:54
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Спасибо, это очень ценное замечание.
Попробовал изменить условие и все равно ошибка.

Код
Range("Таблица1").Select 'âûäåëÿåì òàáëèöó
   Selection.Copy
   Workbooks.Open Filename:="\\.local\Shared\Îòäåë äîñòàâêè\Ëîãèñòèêà\Îáùèé îïåðàòèâíûé îò÷åò.xlsb" ' îòêðûâàåì ôàéë îò÷åòà
       x1 = Range("A" & Rows.Count).End(xlUp).Row + 1 ' îïðåäåëÿåì ïîñëåäíþþ çàïîëíåííóþ ñòðîêó â îò÷åòå
       Range("A" & x1).Select
       Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
По голому коду сказать нечего. Сам код рабочий - причина в файлах. Может объединенные ячейки, может лист защищен, может еще чего...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Спасибо. Буду искать
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Доброй ночи, магистрам VBA!)   Моя предыстория  тут
У меня есть фиксированная таблица(см. пример) защищенные ячейки я удалил из примера, а оставил все ячейки, которые пользователи могут заполнять(незащищенные ячейки), других ячеек для заполнения не появиться.
Мне необходимо при открытии файла копировать все незащищенные ячейки с расчетного листа на резервный (для удобства я решил, что ячейки должны иметь те же адрес) - получается рваный диапазон, да еще и объединенные ячейки есть.
А перед закрытием файла необходимо обратно копировать из резерва в расчетный лист и удалить значения в резервном листе.
Копирование нужно в фоне (не на активных листах)

Поиском оч много тем нашел и перечитал по поводу рваного копирования и для себя решил применить наиболее простой и понятный (некоторые коды еще слишком сложны мне для понимания как их адаптировать под свои нужды):
Код
Public Sub Workbook_Open()

Application.ScreenUpdating = False

Dim a As Range
Dim aa As Range
Set a = Worksheets("1. Расчет расходов").Range("D13:D70")
Set aa = Worksheets("Резерв").Range("D13")
a.Copy
aa.PasteSpecial Paste:=xlPasteValues

Dim b As Range
Dim bb As Range
Set b = Worksheets("1. Расчет расходов").Range("D8")
Set bb = Worksheets("Резерв").Range("D8")
b.Copy
bb.PasteSpecial Paste:=xlPasteValues

Dim c As Range
Dim cc As Range
Set c = Worksheets("1. Расчет расходов").Range("F13:I70")
Set cc = Worksheets("Резерв").Range("F13")
c.Copy
cc.PasteSpecial Paste:=xlPasteValues

Dim d As Range
Dim dd As Range
Set d = Worksheets("1. Расчет расходов").Range("AA13:AA70")
Set dd = Worksheets("Резерв").Range("AA13")
d.Copy
dd.PasteSpecial Paste:=xlPasteValues

Dim e As Range
Dim ee As Range
Set e = Worksheets("1. Расчет расходов").Range("D76:D94")
Set ee = Worksheets("Резерв").Range("D76")
e.Copy
ee.PasteSpecial Paste:=xlPasteValues

Dim f As Range
Dim ff As Range
Set f = Worksheets("1. Расчет расходов").Range("F76:L94")
Set ff = Worksheets("Резерв").Range("F76")
f.Copy
ff.PasteSpecial Paste:=xlPasteValues

Dim g As Range
Dim gg As Range
Set g = Worksheets("1. Расчет расходов").Range("M76:Z94")
Set gg = Worksheets("Резерв").Range("M76")
g.Copy
gg.PasteSpecial Paste:=xlPasteValues

Dim h As Range
Dim hh As Range
Set h = Worksheets("1. Расчет расходов").Range("AA76:AA94")
Set hh = Worksheets("Резерв").Range("AA76")
h.Copy
hh.PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
Application.ScreenUpdating = True

End Sub


Public Sub Workbook_BeforeClose(Cancel As Boolean)
 
Application.ScreenUpdating = False

aa.Copy << выдает ошибку run-time error '424'
a.PasteSpecial Paste:=xlPasteValues

bb.Copy
b.PasteSpecial Paste:=xlPasteValues

и т.д. 

Application.CutCopyMode = False

aa.ClearContents << не очищает диапазон, выдает ошибку
или 
bb.Clear << не очищает диапазон, выдает ошибку


и т.д. 

Application.ScreenUpdating = True

End Sub
копирование в резерв работает на ура!) а вторая часть кода на возврат и последующее удаление не работает! :cry:
еще код слишком много места занимает (конечно, гораздо компактнее, чем получилось макрорекордером), но можно ли как-то упростить код?
для мох целей это оптимальное решение?
Или всё же есть метод копирования всех незащищенных ячеек сразу?
 
RoMuLX, это еще модеры Вашего никнейма не видели. Правила:
Цитата
п3.2. Использовать в сообщениях, подписях, именах и логинах на форумах нецензурную лексику, текст с пЕреМеНнЫм регистром или бессмысленным набором символов.
И то что Вы вторглись в чужую тему со своим вопросом им тоже вряд ли понравится.
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
RoMuLX , это еще модеры Вашего никнейма не видели.
Вообще-то модераторы уже видели мой никнейм и даже помогали без всяких замечаний, за что им низкий поклон.
Это вы бы могли и сами заметить,если б внимательнее прочли мой пост.
Вообще воспринимайте мой никнейм как торговую марку с утвержденным фиксированным регистром уже более 15 лет (нигде проблем не было).

Вы свой-то никнейм видели?!) Это ж бессмысленным набором символов))

Цитата
kuklp написал:
И то что Вы вторглись в чужую тему со своим вопросом им тоже вряд ли понравится.
И не вторгся, а продолжил ту же тему. Я наступал на те же грабли, что и описаны выше.
Обсуждения в данной теме уже 22 Мар 2017 15:58:53 было закончено, соответственно мой пост не вносит путаницу.
Если заметили, уже однажды до меня (22 Мар 2017 12:28:10) тема так же поднималась и ничего, никого не заблокировали за "нарушение".

И вы, наверно, плохо сами прочитали правила форума:
Цитата
3. Запрещено:
3.7. Создавать темы с вопросами, ответы на которые даны в Приемах или прошлых темах форума.

4. Не рекомендуется:
4.5. Самовольное модерирование. Т.е. когда некий участник форума, не являющийся модератором данного форума, делает замечания другим участникам.
Не вижу у вас надписи "модератор"- поэтому либо не флудите\оффтопте, либо помогите.

Я нашел поиском последнюю открытую и продолжил, т.к. в моем случае есть нюансы.
И я не пишу как халявщик, я полностью все оформил в соответствии с правилами - описал и дал пример, и даже свой код не до конца правильный выложил.
И проблему рваного копирования ячеек мной была решена немного по-другому, но не до конца (только в одну сторону).
Изменено: RoMuLX - 18.06.2017 16:29:37
 
Я согласен с Вашим замечанием о п4.5
:)
Пусть модеры этим занимаются.
Но Вам же решение нужно - одного потенциального помощника уже у Вас нет.
Я сам - дурнее всякого примера! ...
 
RoMuLX, Вы не правы:
Я на самом деле не обратил внимания на Ваш ник - его следует поменять
RoMuLX написал:
Цитата
Вообще воспринимайте мой никнейм как торговую марку с утвержденным фиксированным регистром уже более 15 лет (нигде проблем не было).
Никто не запрещает Вам продолжать пользоваться этим ником на других ресурсах, а здесь владелец сайта установил такие вот Правила - так что давайте будем их придерживаться.
Цитата
RoMuLX написал:
еперь понятно откуда у Вас, Уважаемый, 14к постов набито
Ошибаетесь! Сергей помог не одной сотне людей и готовыми решениями, и дельными советами. Я бы на Вашем месте извинился за это высказывание.
Цитата
RoMuLX написал:
не вторгся, а продолжил ту же тему
Тема похожая, но только похожая. Следовало бы создать свою.
По поводу самовольного модерирования: почитайте в "Курилке" соответствующую тему: не возбраняется помочь модераторам в подобных случаях. Сергей фактически мне помог, а не Вам сделал замечание.
Цитата
RoMuLX написал:
Не вижу у вас надписи "модератор"- поэтому либо не флудите\оффтопте, либо помогите.
А вот это уже совсем плохо: не следует Вам указывать, кому и что делать.  
 
Не, Юр - RoMuLX отчасти таки прав. Как минимум треть моих постов это флуд и оффтоп :) Иначе не было бы у меня столько друзей в этом форуме. Давно же мы здесь, разве не так? Вопрос не в том. Если он таки устранит нарушения и создаст СВОЮ тему - у него будет шанс получить помощь от форумчан(я-то воздержусь).
Изменено: kuklp - 18.06.2017 15:27:00
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх