Ошибка PasteSpecial

Программирование на Visual Basic for Applications
Andrey_K
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 12.10.2006 (Чт) 12:25

Ошибка PasteSpecial

Сообщение Andrey_K » 12.10.2006 (Чт) 12:39

Приветствую.
Столкнулся с проблемой. Надо скопировать некий диапазон с одного листа и вставить в новую книгу. Но при соблюдении всего (т.е. ширина столбцов, строк, формата ячеек, и соответственно данных)
Решение задачи "в лоб" не проходит, т.е. запускаю в екселе создать макрос, проделываю все операции с помощью специальной вставки, закрываю макрос. Проверяю его работу и сталкиваюсь с ошибкой "1004 метод PasteSpecial из класса Range завершен неверно"
Как такое может быть, ексел не может выполнить то что сам записал и сделал 10 секунд назад.

Кусочек кода привожу:
Sub makro3()
Range("A678:R679").Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

Подскажите в чем ошибка? (офис2000)

ЗЫ Копирование всего листа и удаление ненужного очень долго и "геморойно".

SoulDevil
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 22.09.2006 (Пт) 10:50

Re: Ошибка PasteSpecial

Сообщение SoulDevil » 12.10.2006 (Чт) 14:16

Andrey_K писал(а):Sub makro3()
Range("A678:R679").Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

Я бы делал так...

Sub makro3()
Range("A678:R679").Copy
Workbooks.Add
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths
Selection.PasteSpecial Paste:=xlPasteFormats
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End Sub

Поменять высоту строк через вставку нельзя или я не знаю как... :oops: Я бы их "прочитал", сохранил в массив и назначил отдельно.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.10.2006 (Чт) 14:22

[A11:C15].Value = [A1:C5].Value
Lasciate ogni speranza, voi ch'entrate.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 12.10.2006 (Чт) 14:32

Это известный баг ( http://support.microsoft.com/default.as ... -ca;231090 ), который похоже жив и поныне в XL2003.
Попробуй так:

Код: Выделить всё
Sub Test1()
    Range("A678:R679").Copy
    Workbooks.Add
    With ActiveSheet.Range("A1")
        .PasteSpecial Paste:=8
        .PasteSpecial Paste:=xlValues
    End With
    Application.CutCopyMode = False
End Sub
или так:

Код: Выделить всё
Sub Test2()
    Dim rng As Range
    Set rng = Range("A678:R679")
    rng.Copy
    Workbooks.Add
    With ActiveSheet.Range("A1").Resize(rng.Rows.Count, rng.Columns.Count)
        .PasteSpecial Paste:=8
        .PasteSpecial Paste:=xlValues
    End With
    Application.CutCopyMode = False
End Sub
Привет,
KL

Andrey_K
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 12.10.2006 (Чт) 12:25

Сообщение Andrey_K » 12.10.2006 (Чт) 15:33

KL писал(а):Это известный баг ( http://support.microsoft.com/default.as ... -ca;231090 ), который похоже жив и поныне в XL2003.
Попробуй так:

Код: Выделить всё
Sub Test1()
    Range("A678:R679").Copy
    Workbooks.Add
    With ActiveSheet.Range("A1")
        .PasteSpecial Paste:=8
        .PasteSpecial Paste:=xlValues
    End With
    Application.CutCopyMode = False
End Sub
или так:

Код: Выделить всё
Sub Test2()
    Dim rng As Range
    Set rng = Range("A678:R679")
    rng.Copy
    Workbooks.Add
    With ActiveSheet.Range("A1").Resize(rng.Rows.Count, rng.Columns.Count)
        .PasteSpecial Paste:=8
        .PasteSpecial Paste:=xlValues
    End With
    Application.CutCopyMode = False
End Sub


О-о! Вот так работает, осталось победить высоту строк!
Есть предложения?!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 12.10.2006 (Чт) 15:57

Код: Выделить всё
Sub Test2()
    Dim rng As Range
    Set rng = Range("A678:R679")
    rng.Copy
    Workbooks.Add
    With ActiveSheet.Range("A1").Resize(rng.Rows.Count, rng.Columns.Count)
        .PasteSpecial Paste:=8
        .PasteSpecial Paste:=xlValues
        For i = 1 To rng.Rows.Count
            .Rows(i).RowHeight = rng.Rows(i).RowHeight
        Next i
    End With
    Application.CutCopyMode = False
End Sub
Привет,
KL

Andrey_K
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 12.10.2006 (Чт) 12:25

Сообщение Andrey_K » 12.10.2006 (Чт) 16:12

Kl - ну блин, волшебник. Я стока времени на это потратил, а все просто оказалось....
Пасибка!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 102

    TopList