2013-08-22 3 views
1

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

Sub Test1() 

    Dim wb As Workbook, x As String, y As String, wb1 As Workbook 

    For Each wb In Application.Workbooks 
    If wb.Name <> ThisWorkbook.Name Then x = wb.Name 
    Next wb 

    Workbooks(x).Activate 

    Sheets("Sheet1").Range("A:E").Copy 

    ActiveWindow.WindowState = xlMinimized 

    Sheets("Sheet1").Range("A1").Select 
    Selection.PasteSpecial Paste:=xlPasteAll 
    Sheets("Sheet1").Range("A1").Select 

    Workbooks(x).Activate 
    ActiveWindow.WindowState = xlNormal 
    Sheets("Sheet1").Range("F:F").Copy 
    ActiveWindow.WindowState = xlMinimized 
    Sheets("Sheet1").Range("G:G").Select 
    Selection.PasteSpecial Paste:=xlPasteAll 
    Workbooks(x).Activate 
    ActiveWindow.WindowState = xlNormal 

    End Sub 

ответ

0

я получил некоторое представление от JMax и нашел способ, который заключается в следующем:

Sub test() 
Dim wb As Workbook, wb2 As Workbook 
Dim ws As Worksheet 
Dim vFile As Variant 

'Set source workbook 
Set wb = ActiveWorkbook 
'Open the target workbook 
vFile = Application.GetOpenFilename("Excel-files,*.xls", _ 
    1, "Select One File To Open", , False) 
'if the user didn't select a file, exit sub 
If TypeName(vFile) = "Boolean" Then Exit Sub 
Workbooks.Open vFile 
'Set targetworkbook 
Set wb2 = ActiveWorkbook 

'For instance, copy data from a range in the first workbook to another range in the other workbook 
wb2.Worksheets("Sheet1").Range("A:B").Copy 
wb.Worksheets("Sheet1").Activate 
wb.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteAll 
End Sub 
0

Некоторые один на один: - Использование

Sub Test1() 
Application.Screenupdating = False 
'yourcode 
Application.Screenupdating = True 
End Sub 

в своем коде, чтобы выполнить его быстрее

для копирования вставить короткий Verion, который может быть использован в

Sheets("Sheet1").Range("F:F").Copy Sheets("Sheet1").Range("G:G") 

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

вы можете удалить "ActiveWindow.WindowState = xlMinimized"

EDIT: - в соответствии с добавленными комментариями

dim wb1 as workbook 
dim wb2 as workbook 
set wb1 = ("Filename.xlsx") 
set wb2 = ("filename.xlsx") 

wb1.sheetname.range("A1").copy wb2.sheetname.range("A1") 

вы можете дополнительно decalre ваш SheetName а

dim ws as worksheet 
set ws = worksheets("Sheetname") 

Редактировать как на второй комментарий (добавить переменную в недавно открытую книгу)

Dim path as variant 
dim wsb as workbook 

path = \\C:your path ' not the sheet name 
Set wsb = Workbooks.Open(filename:=myfolder & "\" & "filename".xlsm") 
'your codes 
+0

спасибо, но то, что я пытаюсь сделать, это сделать копию между тетрадями, что причина, почему я использовать эти поперечные активации книг. Другими словами, мой код состоит в том, чтобы активировать первую книгу, которая будет копировать, а затем вставлять данные в другую книгу. – user1204868

+1

Копирование вставки в другую книгу также работает с выше, вам нужно объявить свои книги как Dim wb1 как Workbook1.xls, dim wb2 как workbook2.xls, а затем wb1.sheetname.range(). Скопируйте wb2.sheetname.range() .... это тоже должно работать ... – Vasim

+0

, но проблема у меня есть нет фиксированного имени для книги, поскольку Я делаю еженедельный файл excel .. спасибо за ваш вклад! :) – user1204868

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