Номера листов

Программирование на Visual Basic for Applications
sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Номера листов

Сообщение sonata » 26.03.2003 (Ср) 15:11

Необходимо узнать настоящие номера, листов....
в VBA, но как это сделать программно?

Public Sub jop1()

For i = 1 To Worksheets.Count

Sheets("Номера_листов").Activate
Cells(i, 1) = i
Cells(i, 2) = Sheets(i).Name
Next i

End Sub

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.03.2003 (Ср) 15:51

For i = 1 To Worksheets.Count



Sheets("Номера_листов").Activate

Cells(i, 1) = Sheets(i).Index

Cells(i, 2) = Sheets(i).Name

Next i

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 26.03.2003 (Ср) 15:58

Ну вообще в этом примере i - является индексом, а так вообще
ActiveSheet.index
или
Sheets("gfdghfdhgf").index

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 26.03.2003 (Ср) 16:08

Ну а если листов много, и хочется составить в цикле ОТЧЕТ?
Можно ли это сделать?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.03.2003 (Ср) 16:30

Ответ в моем постинге. Выделен специально жирным :lol:

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 27.03.2003 (Чт) 11:20

Не удовлетворена, Ваш код-это то как посмотреть номер на Активном листе, а вот как пробежаться по всем листам, и посмотреть индекс каждого?

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 27.03.2003 (Чт) 11:28

это код как записать данные в активный лист с других :P

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.03.2003 (Чт) 11:29

Ну неужели нельзя немного проявить фантазии и доделать его до нужной кондиции? :x



For i = 1 To Worksheets.Count

Sheets(1).Cells(i, 1) = Sheets(i).Index

Sheets(1).Cells(i, 2) = Sheets(i).Name

Next i

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 27.03.2003 (Чт) 11:29

2 Sonata Ну вообще-то ответ на этот попрос ты сама себе дала еще в самом первом посте
Public Sub jop1()

For i = 1 To Worksheets.Count
Sheets("Номера_листов").Activate
Cells(i, 1) = i
Cells(i, 2) = Sheets(i).Name
Next i
End Sub

здесь можно даже Sheets(i).Index не использовать, так как i в данном случае и является индексом листа.

а во-вторых RayShade и я дополнили в довольно полной мере :wink:

ЗЫ Обрати внимание, что я в первом своем посте указывал индекс не только активного листа....

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 27.03.2003 (Чт) 11:29

For i = 1 To Workbooks.Count
MsgBox Workbooks(i).Name + " индекс:" + CStr(i)
Next i

Действительно, Sonata, оказывается вы в своем вопросе дали ответ

Пардон, для нумеров листов нужно организовать второй цикл

For i = 1 To Workbooks.Count
K=3
cells(i,1).value=Workbooks(i).Name
cells(i,2).value= i
For j = 1 To Workbooks(i).worksheets.count
cells(i,k).value= Workbooks(i).worksheets(j).index
k=k+1
next j
Next i

Можно и одним циклом, но тогда выдадутся идексы листов только активной книги:
k = 1
For i = 1 To Sheets.Count
Cells(1, k).Value = Sheets(i).Index
k = k + 1
Next i

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 27.03.2003 (Чт) 17:09

Не понимаю....
Мне кажется, что я вполне понятно все объяснила, чего мне нужно...
То, что в моей программе -i - это обычный счетчик, а не индекс листа ...
Например У меня есть лист с названием "ВСЕ" у него счетчик -3(по счету 3-й от начала книги), а индекс -15...., так вот, в моей програме выдается 3-ка, а мне нужно, чтобы выдавалось 15....

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.03.2003 (Чт) 17:15

Повторяю еще раз! :evil: Индекс листа - это проперть .Index! Она содержит именно тот индекс, которй тебе нужен! :evil:

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 27.03.2003 (Чт) 18:11

Порядковый номер листа это и есть Index!
Sheets -работает с листами только активной книги. В любой книге первый лист имеет Index =1, второй Index =2 и т.д. !!!!!

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 27.03.2003 (Чт) 18:19

Но тогда как понять следующую ситуацию:
1. Есть лист с именем "ВСЕ"
2. По вышеуказ. программе его index=3(и он 3-й по счету)
Но, когда я делаю Лист15.Activate, то активизируется именно он, и в коде VBA стоит число 15 в скобках .... Как это понять????
Или я совсем уже заучилась?

sonata
Постоялец
Постоялец
 
Сообщения: 321
Зарегистрирован: 31.07.2002 (Ср) 13:18
Откуда: Russia

Сообщение sonata » 27.03.2003 (Чт) 18:24

А, когда пишу
Sheets(3).Select
то выбирается совершенно другой лист, который по счету 8, и индекс у него 8. Но, мне кажется, что сдесь не всегда возможны совпадения...,
ведь листы иногда удаляются, добавляются новые....

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 27.03.2003 (Чт) 18:37

Но, когда я делаю Лист15.Activate, то активизируется именно он, и в коде VBA стоит число 15 в скобках .... Как это понять????
Или я совсем уже заучилась?

Лист15 это не Лист с индексом 15, а лист с именем Лист15, т.к. Лист15 мог пользователь перетащить на другую позицию :mrgreen: , или удалить листы перед Лист15. По умолчанию Excel называет Лист1 первый порядковый лист в книги, но символ 1 в имени листа, это не его индекс! :evil:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 28.03.2003 (Пт) 10:27

У меня нет слов. Остались только буквы и впервые за последний год я плачу как ребенок :cry: !!! Может, ты все таки не дашь мне погибнуть в расцвете сил и почитаешь хелпник? :lol:



Это просто имя листа и все. Значит, в том цикле выводи проперть .Name и получишь имена листов.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 28.03.2003 (Пт) 13:06

RayShade - я надеюсь что вы поняли, что я отвечал на вопрос Sonata. :wink:
Именно я и объяснял что такое имя, и что такое индекс, что это разные свойства одного объекта никак не связанные друг-с-другом. :lol:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 28.03.2003 (Пт) 13:10

Да я, собственно, про вас ничего и не имел в виду, я обращался к Sonata, конечно же :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList