2015-05-06 7 views
0

У меня есть небольшая проблема. Я пытаюсь решить проблему копирования из одной книги в другую. Две строки, которые выполняют операции копирования, но я хочу скопировать значения только. Как бы то ни было, он копирует данные, но сохраняет формат ячейки из исходной книги. Вы заметите, что я прокомментировал конец строк, когда используется, забрасывает ошибку времени выполнения 1004 («Невозможно получить свойство PasteSpecial класса диапазона»). Я посмотрел на подобные проблемы с поиском google, но не могу найти тот, который подходит для меня. Я хочу решить этот вопрос, чтобы я мог продолжить свой проект.Копирование из одной книги в другую - только значения вставки

TIA.

Вот отрывок из моего кода:

Private Sub CommandButton77_Click() 
'Individual Induction forms - Trainee #1 

Dim wbPrint As Workbook, TrIdx As Integer 
Application.ScreenUpdating = False 
Set wbPrint = Workbooks.Open("c:\temp\Drivers Induction Checklist.xlsx", ReadOnly:=True) 
With wbPrint.Sheets("Induction Depot") 
    TrIdx = 66 'Index for Trainee #1 
    If ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) <> "" Then 
    'Depot Induction Sheet 
    ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Copy Destination:=.Cells(3, 2) '.PasteSpecial(Paste:=xlPasteValues) 'Trainee Name (Top) 
    ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Copy Destination:=.Cells(60, 3) '.PasteSpecial(Paste:=xlPasteValues) 'Trainee Name (Bottom) 
    .PrintOut 
    End If 
     'Next 
     wbPrint.Close SaveChanges:=False 
End With 
End Sub 

ответ

0

Я бы, наверное, упростить вещи немного и сделать на отдельных линиях:

клеток (TrIdx, 4) .Copy

клетки (3, 2) .PasteSpecial Paste: = xlPasteValues ​​

, кажется, работает для меня, и привычка копировать по форматированию

0

Альтернативой будет скорее, чем вставка, просто установите значения напрямую.

If ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) <> "" Then 
    'Depot Induction Sheet 
    ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Copy Destination:=.Cells(3, 2) '.PasteSpecial(Paste:=xlPasteValues) 'Trainee Name (Top) 
    ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Copy Destination:=.Cells(60, 3) '.PasteSpecial(Paste:=xlPasteValues) 'Trainee Name (Bottom) 
    .PrintOut 
    End If 

мог бы стать:

If ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) <> "" Then 
    'Depot Induction Sheet 
    .Cells(3, 2) = ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) 
    .Cells(60, 3) = ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) 
    .PrintOut 
    End If 
+0

Это в значительной степени выполнило это для меня. Спасибо за это - как я сказал JNevill (выше), мне нужна была новая перспектива для решения этого незначительного тупика. Спасибо большое :) – busdriver12

0

Вместо удара в буфере обмена, чтобы сделать это, вы можете просто установить значение ячейки (ваш диапазон пасты) до значения другой ячейки (ваш диапазон копирования):

Private Sub CommandButton77_Click() 
'Individual Induction forms - Trainee #1 

Dim wbPrint As Workbook, TrIdx As Integer 
Application.ScreenUpdating = False 
Set wbPrint = Workbooks.Open("c:\temp\Drivers Induction Checklist.xlsx", ReadOnly:=True) 
With wbPrint.Sheets("Induction Depot") 
    TrIdx = 66 'Index for Trainee #1 
    If ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4) <> "" Then 
    'Depot Induction Sheet 
    .Cells(3, 2).Value = ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Value 'Trainee Name (Top) 
    .Cells(60, 3).Value = ThisWorkbook.Sheets("Stats").Cells(TrIdx, 4).Value 'Trainee Name (Bottom) 
    .PrintOut 
    End If   
    wbPrint.Close SaveChanges:=False 
End With 

Application.ScreenUpdating = True 'Don't forget to turn this back on :o 
End Sub 
+0

Спасибо за предложение! Это сделало трюк для меня. Кажется, самый простой подход был лучшим в моем случае. Очевидно, я не мог видеть дерево для дерева и было хорошо видеть это под другим углом. – busdriver12

Смежные вопросы