2013-07-17 11 views
2

Я хочу, чтобы копир копировал один лист несколько раз. Так что я сделал недельное планирование на неделю 1. И теперь я хочу этот лист еще 51 раз. Таким образом, название должно начинаться с 2 и заканчиваться 52. Для того, чтобы сделать эту работу для й к у я сделал следующий код:VBA код excel для копирования листов ошибка

Sub Copier() 
    Dim a As Integer 
    Dim b As Integer 

    a = InputBox("Enter begin number for making copy's") 
    b = InputBox("Enter end number for making copy's") 

    For x = a To b 
     'Loop to make x number copies. 
     ActiveWorkbook.ActiveSheet.Copy _ 
     Before:=ActiveWorkbook.Sheets("x") 
     'The name of every copied sheet is a number. 
    Next 
End Sub 

Когда я выполняю это, он дает ошибку: «Error 9 во время исполняемый. Подстрочный индекс выходит за пределы допустимого диапазона. (Я перевел его, потому что у меня есть Голландский Excel.)

Я не вижу, что не так, потому что этот код копируется с страницы Microsoft. У кого-нибудь есть идея?

ответ

1

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

Редактировать

Используя х в качестве индекса листа:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(x) 

Используя имя листа, чтобы получить его индекс:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets("Sheet1").Index) 

Используя количество листов, к которой индекс:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count) 

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

Пример:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count) 
ActiveSheet.Name = x 
+0

Ripster это не работает. Потому что Sheets (x) ссылается на индекс листа, как сказал Энди Г. Этот индекс должен быть индексом, который я хочу скопировать. Я думал больше о Before: = ActiveWorkbook.Sheets (1) ActiveSheet.Name = "x", но thsi не работает – Glenn

+0

То, что вы пытаетесь выполнить, неясно. Энди Г и я сказал то же самое. Я обновлю свой код, чтобы попытаться объяснить, что я думаю, что вы спрашиваете, но опять же, это мне не совсем понятно. – Ripster

+0

Спасибо, Рипстер и Энди Г. Это сработало :) – Glenn

2
Before:=ActiveWorkbook.Sheets("x") 

это ищет лист с именем "х". Возможно, вы указали Sheets(x), который ссылается на рабочий лист по его номеру Индекса. Однако это не будет указывать листок - у вас еще нет этого кода.

+0

Спасибо, я не понимал, что они означают имя листа, который они хотят скопировать. Вы знаете, как я могу получить индекс листа с его именем ввода? – Glenn

0

То, что я пытаюсь выполнить это было:

Sub Copier() 
    Dim a As Integer 
    Dim b As Integer 
    Dim c As String 

    c = InputBox("Name of Sheet") 
    a = InputBox("Enter begin number for making copy's") 
    b = InputBox("Enter end number for making copy's") 


    For x = a To b 
     'Loop to make x number copies. 
     ActiveWorkbook.ActiveSheet.Copy _ 
     Before:=ActiveWorkbook.Sheets(c) 


    Next 
End Sub 

Единственное, что я сейчас еще хочу, чтобы имя копируемого листа стали х-х.

0

Этот макрос будет копировать лист «1» на листы «2» в любой другой ....

Option Explicit 

Sub MakeExtraWeeks() 
Dim q As Long 
Dim i As Long 

q = InputBox("How Many extra weeks?") 

For i = 2 To q 
    Worksheets("1").Copy After:=Worksheets(Worksheets.Count) 
    Worksheets(Worksheets.Count).Name = CStr(i) 
Next i 
End Sub 

скопировать After:= окончательный лист, так что я точно знаю, где найти лист, так что я могу переименовать его в следующей строке (помните, что количество листов будет увеличено на 1, так что .Name будет переименовать окончательный лист)

2

Заменить Before:=ActiveWorkbook.Sheets("x") с Before:=ActiveWorkbook.Sheets(CStr(x))

Sheets("x") whould см п или лист с именем точно «х»

Sheets(x), если й не строковый типа, whould ищет лист с индексом х

Sheets(CStr(x)), обеспечивает ваши ищут лист с именем х.

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