2014-10-29 3 views
0

Начинающий вопрос здесь. Вот код, я работал наСкопируйте несколько столбцов и вставьте в другую книгу в другом порядке.

Private Sub Copy() 

    Dim wb1 As Workbook 
    Dim wb2 As Workbook 

    Set wb1 = ThisWorkbook 
(wb2 defined somewhere here) 
With wb1.Sheets(1) 
.Columns("A").Copy Destination = wb2.Sheets(2).Range("A1") 
.Columns("B").Copy Destination = wb2.Sheets(2).Range("C1") 
.Columns("C").Copy Destination = wb2.Sheets(2).Range("R1") 
.... 

End With 

End Sub 

мне было интересно, если есть более короткий путь написания этого? Благодарю.

EDIT: Кажется, что этот код не работает. Это потому, что я не могу использовать метод копирования между двумя разными книгами?

+0

можно копировать между разными тетрадями, вы можете попытаться изменить 'wb2.Sheets (2) .Range («A1»)' в 'wb2.Sheets (2) .Columns ("А")'. сообщите мне, если это сработает, тогда я могу помочь вам сделать этот код короче. –

+0

@GoosvandenBekerom Да, вы правы. Он работал, когда я изменил его на .columns. Итак, как бы я сократил этот код? – CloudyConjuration

+0

вы могли бы сделать его функцией. позвольте мне выразить это как ответ –

ответ

1

Вы могли бы сделать функцию/к югу, так что вы не должны копировать полную линию для каждой строки, и вы должны изменить wb2.Sheets(2).Range("A1") к wb2.Sheets(2).Columns("A")

Функция/суб может выглядеть примерно так:

sub CopyColumn (Og_col as String, New_col as string) 
    Dim wb1 As Workbook 
    Dim wb2 As Workbook 

    Set wb1 = ThisWorkbook 
    'set wb2 = some other workbook 

    wb1.Sheets(1).Columns(Og_col).Copy Destination = wb2.Sheets(2).Columns(New_col) 

End Sub 

И затем в исходном коде вы изменяете:

.Columns("A").Copy Destination = wb2.Sheets(2).Range("A1") 
.Columns("B").Copy Destination = wb2.Sheets(2).Range("C1") 
.Columns("C").Copy Destination = wb2.Sheets(2).Range("R1") 
.... 

To:

Call CopyColumn("A", "A") 
Call CopyColumn("B", "C") 
Call CopyColumn("C", "R") 
.... 

Если у вас есть много столбцов, это должно быть лучше, код

+0

Hey Goos Я попытался создать sub, как и вы, но VBA продолжал возвращать ошибку Runtime 424. Мне было интересно, если я вызываю sub в главном юге, мои ранее объявленные имена/переменные переносятся ? Я сделал отладочную печать в моей под-sub, и она, похоже, не переносится. Как я могу это исправить? – CloudyConjuration

+0

на какой строке вы получаете эту ошибку? –

+0

wb1.Sheets (1) .Columns (Og_col) .Copy Destination = wb2.Sheets (2) .Columns (New_col) После того, как я определил книги (а именно wb1 и wb2), похоже, что сбой работает нормально. Однако мне немного неудобно, что я должен определить книгу вне суб, которая содержит основной поток. Есть ли в любом случае для называемых subs на неотъемлемую информацию из основного суб? – CloudyConjuration

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