Excel vba как узнать номер листа

Как узнать текущий номер листа книги?

Если у вас в книге несколько листов, есть ли у вас какие-нибудь хорошие идеи, чтобы получить текущий номер листа, кроме того, чтобы пересчитывать их по одному? В этой статье я расскажу о простом трюке, с помощью которого вы сможете вернуть номер активного рабочего листа по мере необходимости.

Получить текущий номер рабочего листа книги с кодом VBA


стрелка синий правый пузырь Получить текущий номер рабочего листа книги с кодом VBA

С помощью следующего простого кода VBA вы можете быстро получить номер активного рабочего листа по своему усмотрению, сделайте следующее:

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

2. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.

3. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.

Код VBA: получить текущий номер листа

Sub GetActiveSheetIndex()
MsgBox ActiveSheet.Index
End Sub

4, Затем нажмите F5 ключ для запуска этого кода, и вы получите порядковый номер текущего рабочего листа во всплывающем окне сообщения, как показано на следующем снимке экрана:

документ-получить-текущий-лист-номер-1


Статьи по теме:

Как быстро вставить названия листов в ячейки в Excel?

Как посчитать количество листов в рабочей тетради?


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (3)


Оценок пока нет. Оцените первым!

Содержание

  1. Как определить номер листа excel vba
  2. VBA в Excel Объект Excel.Worksheet и программная работа с листами Excel средствами VBA
  3. 10.5 Коллекция Sheets и объект Worksheet, их свойства и методы
  4. VBA Excel. Рабочий лист (обращение, переименование, скрытие)
  5. Обращение к рабочим листам
  6. Переименование листов
  7. Скрытие и отображение листов

Как определить номер листа excel vba

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

RayShade » 26.03.2003 (Ср) 15:51

For i = 1 To Worksheets.Count

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

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

Calvin » 26.03.2003 (Ср) 15:58

sonata » 26.03.2003 (Ср) 16:08

RayShade » 26.03.2003 (Ср) 16:30

sonata » 27.03.2003 (Чт) 11:20

corgi » 27.03.2003 (Чт) 11:28

RayShade » 27.03.2003 (Чт) 11:29

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

For i = 1 To Worksheets.Count

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

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

Calvin » 27.03.2003 (Чт) 11:29

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 и я дополнили в довольно полной мере

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

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 » 27.03.2003 (Чт) 17:09

RayShade » 27.03.2003 (Чт) 17:15

Vitaly1 » 27.03.2003 (Чт) 18:11

sonata » 27.03.2003 (Чт) 18:19

sonata » 27.03.2003 (Чт) 18:24

Vitaly1 » 27.03.2003 (Чт) 18:37

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

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

RayShade » 28.03.2003 (Пт) 10:27

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

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

Vitaly1 » 28.03.2003 (Пт) 13:06

RayShade » 28.03.2003 (Пт) 13:10

Источник

VBA в Excel Объект Excel.Worksheet и программная работа с листами Excel средствами VBA

10.5 Коллекция Sheets и объект Worksheet, их свойства и методы

Объект Excel.Worksheet, программное создание, обнаружение, удаление листа Excel средствами VBA, свойства, методы и события объекта Excel.Worksheet

В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.

Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.

Процесс создания выглядит очень просто:

Dim oExcel As New Excel.Application ‘Запускаем Excel

oExcel.Visible = True ‘Делаем его видимым

Dim oWbk As Excel.Workbook

Set oWbk = oExcel.Workbooks.Add () ‘Создаем новую книгу

Dim oSheet As Excel.Worksheet

Set oSheet = oWbk.Worksheets.Add() ‘ Создаем новый лист

oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»

Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.

Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем «Лист1» и переименовываем его в «Новый лист»:

Dim oExcel As New Excel.Application ‘Запускаем Excel

oExcel.Visible = True ‘Делаем его видимым

Dim oWbk As Excel.Workbook

Set oWbk = oExcel.Workbooks.Add() ‘Создаем новую книгу

Dim oSheet As Excel.Worksheet

Set oSheet = oWbk.Worksheets.Item(«Лист 1») ‘ Находим Лист1

oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»

Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются «Sheet1», «Sheet2» и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.

У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.

У объекта Worksheet — множество важных свойств и методов:

  • Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
  • EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
  • EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
  • Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
  • PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл ->Параметры страницы.
  • свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
  • QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
  • Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
  • Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
  • UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
  • Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).

Некоторые важные методы объекта Worksheet:

  • методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
  • метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
  • метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
  • SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — «водяной знак», иначе на его фоне будет трудно читать текст в ячейках).
  • ShowAllData() — показать все скрытые и отфильтрованные данные на листе.

Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.

У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.

Источник

VBA Excel. Рабочий лист (обращение, переименование, скрытие)

Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.

Обращение к рабочим листам

Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.

Обращение к рабочему листу в коде VBA Excel:

  • УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
  • N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
  • Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

Количество листов в рабочей книге Excel определяется так:

Переименование листов

В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

expression.Name

где expression — переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

Допустим, у нас есть лист с уникальным именем (Name) — Лист1, индексом — 1 и именем Name — МойЛист, которое необходимо заменить на имя — Реестр.

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression — переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False — лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden — лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True — лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Источник

ГЛАВНАЯ

ТРЕНИНГИ

   Быстрый старт
   Расширенный Excel
   Мастер Формул
   Прогнозирование
   Визуализация
   Макросы на VBA

КНИГИ

   Готовые решения
   Мастер Формул
   Скульптор данных

ВИДЕОУРОКИ

ПРИЕМЫ

   Бизнес-анализ
   Выпадающие списки
   Даты и время
   Диаграммы
   Диапазоны
   Дубликаты
   Защита данных
   Интернет, email
   Книги, листы
   Макросы
   Сводные таблицы
   Текст
   Форматирование
   Функции
   Всякое
PLEX

   Коротко
   Подробно
   Версии
   Вопрос-Ответ
   Скачать
   Купить

ПРОЕКТЫ

ОНЛАЙН-КУРСЫ

ФОРУМ

   Excel
   Работа
   PLEX

© Николай Павлов, Planetaexcel, 2006-2022
info@planetaexcel.ru


Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

Техническая поддержка сайта

ООО «Планета Эксел»

ИНН 7735603520


ОГРН 1147746834949
        ИП Павлов Николай Владимирович
        ИНН 633015842586
        ОГРНИП 310633031600071 

попробую…

у листа рабочей книги (объекты worksheet, chart) есть свойства index, name, codename
index — текущий номер листа по порядку (включая скрытые), может меняться пользователем при изменении порядка и количества листов;
name — то, что отбражается на ярлычке, может меняться пользователем (конечно. если книга не защищена);
codename — «внутреннее» имя листа, «обычному» пользователю невидимое и недоступное, поэтому не может меняться пользователем.
кроме того, codename является свойством read-only и через VBA также не может быть изменено.

*)
в VBE в окне проекта в списке объектов сначала указаны кодовые имена листов, а затем, в скобках, «обычные» имена.

«обычные» и «необычные» («кодовые») имена могут совпадать, могут — нет.
но в пределах каждого из множеств имён имя должно быть уникальным (без учета регистра символов)

изменить codename можно через интерфейс VBE — ЛКМ по имени листа в списке объектов — F4 — свойство (Name) — именно которое со скобками.

доступ к отдельному листу возможен:
— по индексу
— по «обычному» имени
и для того, и для другого, используется свойство item коллекций sheets, worksheets, charts объекта workbook:
sheets.item(2)
charts.item(«диаграмма 5»)

и т.п.

т.к. свойство item является «умолчальным», то допустимы и конструкции
sheets(2)
charts(«диаграмма 5»)

прямого доступа по «кодовому» имени листа через коллекцию — нет.
но, зная codename листа на этапе разработки проекта (макроса). можно прямо это имя написать в качестве идентификатора листа:
лист1.[a1] — обращение к ячейке A1 листа с

кодовым именем

«лист1» («Лист1» и т.п.)

если же нужно получить лист по кодовому имени, но на этапе разработки оно было неизвестно, то примерно так:

Visual Basic
1
2
3
4
5
6
7
function getSheetByCodename(sCodeName as string, optional wb as workbook=nothing) as sheet
  if wb is nothing then set wb=activeworkbook
  for each sh in wb.sheets
    if sh.codename=sCodeName then set getSheetByCodename=sh: exit function
  next
  set getSheetByCodename=nothing
end function

зачем оно всё надо — надеюсь, понятно?

_________________________

*) однако, может: Как узнать Item листа в книге Excel

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

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

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

Необходимо узнать настоящие номера, листов….

в 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
  • Сайт
  • ICQ

Сообщение 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
  • ICQ

Сообщение 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
  • Сайт
  • ICQ

Сообщение 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
Откуда: Россия, Москва
  • ICQ

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

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


RayShade
Scarmarked
Scarmarked
Аватара пользователя

 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg
  • Сайт
  • ICQ

Сообщение 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
  • ICQ

Сообщение 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
  • Сайт
  • ICQ

Сообщение 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
  • Сайт
  • ICQ

Сообщение 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
  • Сайт
  • ICQ

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

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



Вернуться в VBA

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

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

Понравилась статья? Поделить с друзьями:
  • Excel vba как удалить форму
  • Excel vba как удалить строку целиком
  • Excel vba как удалить строки по условию
  • Excel vba как удалить связи
  • Excel vba как удалить книгу