Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: 0mega от 21.10.2016, 11:30

Название: В цикле листам присвоить имена
Отправлено: 0mega от 21.10.2016, 11:30
всем  доброго времени суток

Есть список фамилий
кол-во фамилий совпадает с кол-вом листов
Надо в каждый лист вставить свою фамилию
фамилии можно привязать к ячейкам и перебрать через "For - Cells(n, 2) "
А как перебрать список Листов ?

Название: Re: Цикл "For-Next" в наименовании Листов
Отправлено: cheshiki1 от 21.10.2016, 11:44
Sub Макрос()
    Application.ScreenUpdating = False
For i = 1 To Sheets.Count
    Sheets(i).Activate ' активация не обязательна просто показал как обратиться к листу.
    ...код
    ...
    ...
Next
Application.ScreenUpdating = True
End Sub

или так

dim Ws as worksheet
for each Ws in Sheets
...
Next Ws
Название: Re: Цикл "For-Next" в наименовании Листов
Отправлено: 0mega от 21.10.2016, 11:50
cheshiki1, здравствуйте
For i = 1 To Sheets.Coun
я правильно понял что здесь машина сама подсчитает кол-во листов в книге ?
Название: Re: Цикл "For-Next" в наименовании Листов
Отправлено: vikttur от 21.10.2016, 12:15
Не посчитает. Вы букву потеряли :)
А найдете - проверьте.
Название: Re: В цикле листам присвоить имена
Отправлено: 0mega от 21.10.2016, 12:48
ругается машина ...
Где здесь ошибка ?
Sub Макрос()

    Application.ScreenUpdating = False
For i = 1 To Sheets.Count
for n = 1 to 4
    Sheets(i).Activate ' активация не обязательна просто показал как обратиться к листу.
cells(8, 6)=cells(n, фio)
Next n
Next i
Application.ScreenUpdating = True
End Sub
Название: Re: В цикле листам присвоить имена
Отправлено: cheshiki1 от 21.10.2016, 13:16
Цитата: 0mega от 21.10.2016, 12:48
cells(8, 6)=cells(n, фio)
что за фio
да и подход не верный. зачем цикл от 1 до 4 ?

как то так
Sub Макрос()
Dim i%, FIO(), n%
Application.ScreenUpdating = False
FIO = Sheets("Служебн").Range("B4:B7").Value
n = 1
For i = 1 To Sheets.Count
  If Sheets(i).Name <> "Служебн" Then Sheets(i).Cells(8, 6) = FIO(n, 1): n = n + 1
Next
Application.ScreenUpdating = True
End Sub
Название: Re: В цикле листам присвоить имена
Отправлено: 0mega от 21.10.2016, 13:51
cheshiki1. Благодарю

а что такое массив с %
и почему текстовый массив не имеет расширения ?
Название: Re: В цикле листам присвоить имена
Отправлено: cheshiki1 от 21.10.2016, 14:11
Цитата: 0mega от 21.10.2016, 13:51
что такое %
это значит что переменная возле которой он стоит имеет тип Интежер (integer)

Цитата: 0mega от 21.10.2016, 13:51
почему текстовый массив не имеет расширения ?
если рядом ничего не написано это не значит что тип не указан. По умолчанию тип Вариант (variant)
Название: Re: В цикле листам присвоить имена
Отправлено: 0mega от 21.10.2016, 14:56
очень ценное познание
Название: Re: В цикле листам присвоить имена
Отправлено: 0mega от 21.10.2016, 17:34
непонятки какие-то ...
Макрос отлично работает.
начинаю затачивать под себя - ему это не нравится ?!
это может быть из-за того что FIO состоит из 50 строк  и каждая строка имеет 70-100 символов ?
Название: Re: В цикле листам присвоить имена
Отправлено: Pelena от 21.10.2016, 18:14
Цитата: 0mega от 21.10.2016, 17:34
FIO состоит из 50 строк
А листов сколько?
Посмотрите, чему в момент ошибки равна n
Название: Re: В цикле листам присвоить имена
Отправлено: 0mega от 23.10.2016, 07:05
Елена. здравствуйте
Цитата: Pelena от 21.10.2016, 18:14
А листов сколько?
с листами все ОК
со списком - ошибся
Спасибо