2015-05-25 3 views
0

Я пытаюсь имен рабочих листов на основе списка имен в Sheets («Run»). Range («F4») к последней строке с данными. Код, который у меня ниже, работает, когда я нахожу один рабочий лист.именование в цикле VBA

Sub list_Days() 


Dim sName As String 
Dim i As Integer 
i = ActiveWorkbook.Worksheets.Count 

sName = Sheets("Run").Range("F4") 

Worksheets("Security Distribution").Copy After:=Worksheets(i) 
ActiveSheet.Name = sName 

End Sub 

Мой вопрос: Может кто-то помочь мне с эффективного цикла который преодолеет мою проблему.

+0

Был уже существующий '' Rows.Count' не Роу .Count' с решением в [этот ответ] (http://stackoverflow.com/questions/30426074/name-worksheets-based-on-a-list-of-names/30426261#30426261), который вы заметили, что вы решили. Я отредактировал ответ, чтобы отразить 'Rows.Count'. – Jeeped

+0

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

+0

Вышеприведенное будет работать в первый раз, но вы должны переопределить * i * во второй раз, так как он больше не равен количеству рабочих листов. Каждый раз, когда вы добавляете другой рабочий лист и называете его, * i * должен быть поднят на * 1 * или переназначен с помощью 'i = ActiveWorkbook.Worksheets.Count'. – Jeeped

ответ

0

Это должно быть простой for x = y to z цикл с шагом в целевом диапазоне (предполагая, что остальная часть кода работает, как ожидалось) -

Sub list_Days() 

Dim sName As Range 
Dim i As Integer 
Dim j As Integer 
i = ActiveWorkbook.Worksheets.Count 
j = 0 
sName = Sheets("Run").Range("F4") 


For x = 1 To i 
Set sName = sName.Offset(j, 0) 
Worksheets("Security Distribution").Copy After:=Worksheets(x) 
ActiveSheet.Name = sName.Value 
j = j + 1 
Next 

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