2016-10-05 9 views
0

Я прочитал другие сообщения, но я все еще неаккуратно по конкретному приложению, я тоже пытаюсь применить это.VBA Macro для копирования данных

Проблема:

Я пытаюсь скопировать данные из файла первенствовать, который закрыт в книге я нахожусь в данный момент я хотел бы быть в состоянии найти файл и затем сделай макрос. отдых.

Решения Покушение:

Я получаю сообщение об ошибке в целевой книге, которая говорит «приложение или объект определяется ошибка.» Это очень рудиментарно, но ниже - то, что у меня есть до сих пор. Цель - это книга, которую я открываю, и y является текущей, или должна быть как минимум!

Option Explicit 
Sub getfilename() 

Dim myFilePath As String 
Dim target As Workbook, y As Workbook 

myFilePath = Application.GetOpenFilename() 

'copying 
Set target = Workbooks.Open(myFilePath) 

target.Sheets("Sheet1").Range("R9C2:R20C2").Copy 

'pasting 
Set y = ActiveWorkbook 

y.Sheets("Adjustment").Cells("R57C4").PasteSpecial 

'close 
target.Close 

End Sub 

Это только начало этого проекта. Мне действительно нужно хранить данные и немного манипулировать им, прежде чем вставлять их, но я пытался понять, смогу ли я понять это в первую очередь. Любая помощь приветствуется!

+0

Есть ли конкретная причина, по которой вы используете нотацию R1C1 для получения диапазона? Потому что это источник вашей проблемы и решение будет зависеть от того, почему вы используете эту нотацию. – Werrf

+0

No parti как правило, всегда использовали R1C1 – ct4242

+1

Используйте 'y.Sheets (« Adjustment »). Ячейки (57, 4) .PasteSpecial'. – Jeeped

ответ

4

Объект RANGE ожидает обозначение A1, а не обозначение R1C1. В КЛЕТКИ объект может использовать номер строки и номер столбца (если вы не нужны R..C .. структура есть, либо.

Sub getfilename() 

Dim myFilePath As String 
Dim target As Workbook, y As Workbook 

myFilePath = Application.GetOpenFilename() 

Set y = ActiveWorkbook 

'copying 
Set target = Workbooks.Open(myFilePath) 

'Here we're using the A1 notation 
target.Sheets("Sheet1").Range("B2","B9").Copy 

'Here we're using the Row & Column numbers notation 
y.Sheets("Adjustment").Cells(57, 4).PasteSpecial 

'close 
target.Close 

End Sub 

Кроме того, вы на самом деле не нужно использовать Copy и PasteSpecial методы для дублирования значений. Это не слишком большая сделка в небольшом макрокоманде, подобном этому, но в более крупном процессе вы можете более эффективно дублировать значения напрямую, используя что-то вроде: target.Range («A1», A10 "). Value = source.Range (" A1 "," A10 "). Значение

+0

Это отлично работает, спасибо! – ct4242

+0

Еще одна веская причина не использовать Copy/PasteSpecial - это тот факт, что он проходит через буфер обмена, и если пользователь делает что-либо, пока макрос работает в фоновом режиме, а пользователь также копирует/вставляет что-то, результаты могут быть катастрофическими , +1 за рекомендацию против его использования! – YowE3K

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