2016-05-06 2 views
0

новый пользователь VBA здесь ...Как создать таблицу из хранимого листа переменной

Я не знаю, как создать таблицу из переменной, хранящейся в памяти. То, что я пытаюсь сделать, это создать несколько копий существующего листа шаблона из открытой книги, манипулировать ими в памяти (например, изменить диапазон значений, добавить формулы и т. Д.), А затем создать их в открытой книге как фактические листы ,

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

Dim wb As Workbook 
Dim ws As Worksheet 
Dim wsTemplate As Worksheet 
Dim wsCopies(1 To 5) As Worksheet 
Dim x As Long 

Set wb = ThisWorkbook 
Set ws = wb.Sheets("Worksheet Test") 
Set wsCopy = ws 


For x = 1 To 5 
    Set wsCopies(x) = wsTemplate 
'used this line to make sure this actually copied into memory 
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1 
Next x 

Заранее благодарен!

+0

'Установить wsCopies (x) = wsTemplate' Вы не инициализировали' wstemplate'? – findwindow

+0

Извините findwindow, я действительно инициализировал, но я сделал общий код для этого вопроса и сделал это быстро. Спасибо за ответы, ребята. Мне трудно поверить, что нет никакого способа сделать это. Может ли это что-то, с чем мог бы работать модуль класса? Какой смысл держать переменную рабочего листа в памяти, если вы не можете манипулировать ею и выплюнуть ее обратно? –

ответ

0

На самом деле не существует «Рабочего листа в памяти», который существует только в памяти. Вы создаете новый рабочий лист, и он есть в вашей книге. Там также нет отличного способа дублировать лист без малейшего обмана. Что-то вроде:

For x = 1 To 5 
    wsTemplate.copy after:=wsTemplate 
    Set wsCopies(x) = wb.Sheets(wsTemplate.index + 1) 
'used this line to make sure this actually copied into memory 
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1 
Next x 

Это не страшно, но это не совсем то, о чем вы думали. Если вы не находитесь в application.screenupdating = false и все это, вы можете установить wsCopies(x).visible на xlSheetHidden и выполнить дальнейшие манипуляции до тех пор, пока вы не переключитесь на видимые снова.

+0

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

+0

Я считаю, что есть метод worksheets.add, который будет ближе к тому, что вы думаете, но тогда у вас не будет копии ... так что это, вероятно, лучший способ снять то, что вам нужно. – JNevill

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