2013-04-04 6 views
1

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

I have 3 sheets: 
1. Print      (formulas point to TV - Input) 
2. Print - Input 
3. Print - plan    (formulas point to TV - Input) 

I need to copy them so that all formulas point to their new respective sheets. 

1. Print (2)     (formulas point to Print - Input (2)) 
2. Print - Input (2) 
3. Print - plan (2)   (formulas point to Print - Input (2)) 

Это делается легко вручную с помощью Ctrl. + перетаскивание листов в новое место. Однако как это сделать в VBA?

Редактировать: Название «Печать» задано временем выполнения. Таким образом, это может быть телевидение или радио. Он выставляется из строки.

Любая помощь приветствуется!

ответ

2

Попробуйте что-то вроде этого:

Sheets(Array("Print", "Print - input", "Print - plan")).Copy After:=Sheets(Sheets.Count) 

Edited- со ссылками индексных

Sheets(Array(1, 2, 3)).Copy After:=Sheets(Sheets.Count) 

С различными ссылками:

Dim sht1 as String, sht2 as String, sht3 As String 
sht1 = "Print" 
sht2 = "Print - input" 
sht3 = "Print - plan" 
Sheets(Array(sht1, sht2, sht3)).Copy After:=Sheets(Sheets.Count) 

с динамическим массивом (здесь 3 элемента статическую, но может быть и любой динамический):

Dim arrSHT as Variant 
arrSHT = array("Print", "Print - input", "Print - Plan") 
Sheets(arrSHT).Copy After:=Sheets(Sheets.Count) 
+0

Спасибо, это работает! Однако это часть большей функции, а имена листов задаются динамически. Есть ли способ передать переменную динамического массива или что-то еще? –

+0

Я добавил несколько дополнительных вариантов ответа ... –

+0

Спасибо! Вариант 3 - это именно то, что мне нужно :) –

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