VBA Excel. Рабочий лист (обращение, переименование, скрытие)
Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.
Обращение к рабочим листам
Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.
Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.
Обращение к рабочему листу в коде VBA Excel:
Количество листов в рабочей книге 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 могут присваиваться следующие значения:
Нельзя установить свойство visible класса worksheet что делать
Обсуждаем вопросы только по Excel VBA (программирование макросов, скриптов, пользовательских функций и т.п.). Приветствуются ссылки на ресурсы и справочную литературу по теме.
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа «Напишите мне такой-то макрос, я VBA не знаю и знать не хочу» не приветствуются. Древняя мудрость: «Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его.»(R)
Предыдущие ветки топика: Часть 1
Добавление в главное меню своего пункта, ассоциированного с макросом Создание ярлыка на рабочем столе Снятие защиты листа при забытом пароле Смена раскладки клавиатуры Скролл формы колесом прокрутки мыши Оптимизация кода по быстродействию использованием массивов Найти «чужое» окно и нажать в нем кнопку ( вписать текст в текстовое поле ) Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно Как программно подключить дополнительные библиотеки (например, «Microsoft Scripting Runtime» или «Microsoft ActiveX Data Objects 2.8 Library) через References
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Спасибо за ответ. Применил эту команду в такой конструкции:
Private Sub CommandButton1_Click() ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=»», SubAddress:=»Лист4!R1C1″, TextToDisplay:=»Лист4″ End Sub
При нажатии на кнопку, на листе появляется ссылка на лист 4 и только при нажатии на эту ссылку происходит переход на лист 4.
Я бы хотел, чтобы: 1. переход на другой лист происходил непосредственно при нажатии на кнопку; 2. и адрес листа задавался бы не его порядковым номером в книге (SubAddress:=»Лист4!R1C1″), а именем листа.
Буду признателен за помощь
Всего записей: 5 | Зарегистр. 09-12-2008 | Отправлено:14:05 09-12-2008
ITradar
| A | B | C | D 1 |Планы расходов. |Бюджет:|7385 |руб 2 |Приорите|Необходимо |Цена |Остаток 3 | 1 |Набор резцов|2000 |=D1-C3=5385 4 | 2 |Фоторамки |600 |=D3-C4=4785 5 | 3 |Привод DVD |900 |=D4-C5=3885 6 | 4 |HDD 300Гб |2500 |=D5-C6=1385
Sub SelectedUP() ‘ ‘ SelectedUP Макрос ‘ Макрос записан 18.10.2008 (Radmir) ‘ ‘ Сочетание клавиш: Ctrl+u ‘ Dim UpRow As Integer
Ошибка: Run-time error ‘424’ object required
Когда у меня был код по проще, у меня смена местами получалась, но результаты формул Остатков не менялись, так как менялись сами формулы, как бы привязываясь к строкам.
Sub SelectedUP() ‘ ‘ SelectedUP Макрос ‘ Макрос записан 18.10.2008 (Radmir) ‘ ‘ Сочетание клавиш: Ctrl+u ‘ Dim UpRow As Integer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору добрый день нужна ваша помощь. есть такая задача : имееться: имя пациента, дата прибытия, дата отбытия и палата. нужно на соседнем sheet’e заполнить своеобразный каллендарь, который выгледит вот так : 201 202 203 204 205 206 207 208 209 210 301 302 303 2008.12.01 x 2008.12.02 x 2008.12.03 x x 2008.12.04 x x x 2008.12.05 x x 2008.12.06 x x 2008.12.07 x 2008.12.08 x 2008.12.09 x x 2008.12.10 x 2008.12.11 т.е. палата 201 занята с первого декабря по 4ое палата 207 с 4 по 9ое 302 с 3ого по 6ое и с 9 и до 10ого как это реализовать в виде макроса? я как бы могу найти строку с датой отбытия и прибытия пациента, могу найти столбез с палатой, но вот как в писать в эту своебразную матрицу креситики(или как либо по другому отметить) в занятые палаты.
Всего записей: 38 | Зарегистр. 17-03-2008 | Отправлено:16:22 09-12-2008
miha7411
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Alex209 На листе поместить кнопку и назначить ей макрос. Вот как-то так.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TURNSKIN85 Находишь сроку с датой и столбец с палатой Обозначим n-номер строки с датой, m-номер столбца с палатой cells(n,m)=»x»
Всего записей: 49 | Зарегистр. 15-10-2008 | Отправлено:06:47 10-12-2008
Всего записей: 95 | Зарегистр. 16-07-2007 | Отправлено:18:13 10-12-2008
Mont1
Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TURNSKIN85 Я незнаю как работает оператор Find, предлагаю другой способ
Dim FoundCell As Range For Each FoundCell In Range(«A1:A63») If FoundCell.Value = «09.12.2008» Then m = FoundCell.Column ‘Номер столбца n = FoundCell.Row’ Номер строки End If Next
Всего записей: 49 | Зарегистр. 15-10-2008 | Отправлено:03:41 11-12-2008
ITradar
Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Спасибо ОГРОМНОЕ за уделенное внимание. Всё отлично получилось! Привожу полностью завершенное решение, надеюсь табличка с этими макросами будет полезна при планировании покупок, расходов, или просто для планирования решения задач по степени их важности!
Sub SelectedUP() ‘ ‘ SelectedUP Макрос ‘ Макрос записан 18.10.2008 (Radmir) ‘ ‘ Сочетание клавиш: Ctrl+Shift+J ‘
Dim UpRow As Integer
Sub SelectedDown() ‘ ‘ SelectedDown Макрос ‘ Макрос записан 10.12.2008 (Radmir) ‘ ‘ Сочетание клавиш: Ctrl+Shift+M ‘
Нельзя установить свойство visible класса worksheet что делать
Помню тут уже была подобная тема но я что-то ее пока не сумел найти.
Желательно что бы страницы соответствующие данному паролю были доступны для редактирования и просмотра другие не доступны для редактирования и просмотра.
Помню тут уже была подобная тема но я что-то ее пока не сумел найти.
Желательно что бы страницы соответствующие данному паролю были доступны для редактирования и просмотра другие не доступны для редактирования и просмотра.
Помню тут уже была подобная тема но я что-то ее пока не сумел найти.
Желательно что бы страницы соответствующие данному паролю были доступны для редактирования и просмотра другие не доступны для редактирования и просмотра.
koyaanisqatsi
Дата: Пятница, 15.04.2016, 10:08 | Сообщение № 2
Хороший пример только видны все страницы. Хотелось бы чтоб под каждым паролем были доступны свои страницы.
Хороший пример только видны все страницы. Хотелось бы чтоб под каждым паролем были доступны свои страницы. koyaanisqatsi
Pelena
Дата: Пятница, 15.04.2016, 10:16 | Сообщение № 4
koyaanisqatsi
Дата: Пятница, 15.04.2016, 10:20 | Сообщение № 6
_Boroda_
Дата: Пятница, 15.04.2016, 10:31 | Сообщение № 7
koyaanisqatsi
Дата: Пятница, 15.04.2016, 10:38 | Сообщение № 8
koyaanisqatsi
Дата: Пятница, 15.04.2016, 11:09 | Сообщение № 9
_Boroda_, На листе «доп» изобразил права доступа, помогите пожалуйста в соответствии с этим правилами раздать доступ.
_Boroda_, На листе «доп» изобразил права доступа, помогите пожалуйста в соответствии с этим правилами раздать доступ.
Сообщение _Boroda_, На листе «доп» изобразил права доступа, помогите пожалуйста в соответствии с этим правилами раздать доступ.
SLAVICK
Дата: Пятница, 15.04.2016, 11:34 | Сообщение № 10
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> «B2» Then Exit Sub On Error Resume Next p_ = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:B999], 2, False) shs = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:c999], 3, False) On Error GoTo 0 If Range(«B2») <> p_ Then MsgBox «Неверный пароль»: Exit Sub sk_ = ThisWorkbook.Sheets.Count sa_ = ActiveSheet.Name
If Len(shs) = 0 Then For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = xlSheetVisible Next Else For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = IIf(InStr(1, shs, ThisWorkbook.Sheets(i).Name, vbTextCompare) = 0, xlSheetVeryHidden, xlSheetVisible) Next End If End Sub
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> «B2» Then Exit Sub On Error Resume Next p_ = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:B999], 2, False) shs = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:c999], 3, False) On Error GoTo 0 If Range(«B2») <> p_ Then MsgBox «Неверный пароль»: Exit Sub sk_ = ThisWorkbook.Sheets.Count sa_ = ActiveSheet.Name
If Len(shs) = 0 Then For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = xlSheetVisible Next Else For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = IIf(InStr(1, shs, ThisWorkbook.Sheets(i).Name, vbTextCompare) = 0, xlSheetVeryHidden, xlSheetVisible) Next End If End Sub
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> «B2» Then Exit Sub On Error Resume Next p_ = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:B999], 2, False) shs = WorksheetFunction.VLookup(Range(«B1»), Лист4.[A2:c999], 3, False) On Error GoTo 0 If Range(«B2») <> p_ Then MsgBox «Неверный пароль»: Exit Sub sk_ = ThisWorkbook.Sheets.Count sa_ = ActiveSheet.Name
If Len(shs) = 0 Then For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = xlSheetVisible Next Else For i = 2 To ThisWorkbook.Sheets.Count Sheets(i).Visible = IIf(InStr(1, shs, ThisWorkbook.Sheets(i).Name, vbTextCompare) = 0, xlSheetVeryHidden, xlSheetVisible) Next End If End Sub
koyaanisqatsi
Дата: Пятница, 15.04.2016, 11:42 | Сообщение № 11
koyaanisqatsi
Дата: Среда, 18.05.2016, 14:00 | Сообщение № 12
SLAVICK, Здравствуй. Что-то я поломал. И не знаю куда искать где смотреть. При выборе пользователя и ввода пароля 444 Макрос выдает ошибку дебаг или ЕНД предлагает поискать проблему в этой строке.
Что привело к поломке не знаю. Добавлял страницы удалял ненужные. Добавлял в список отображаемых еще страниц. Но уже в сломанном файле делал многое чтобы понять в чем причина и список страниц корректировал убавлял его до одной. Пока ничего не помогло.
Ошибка: Нельзя установить свойство Visible класса Workshieet
Причем если сначала зайти под админом а потом зайти под пользователем то ошибку не выдает.
К сожалению файл уже вырос до 200кб.
Кажется я понял что проблема в двух кодах из основания книги. 1 код для скрытия листов 2 код ля календаря
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_Open()
If ActiveSheet.Name = «Лист5» Then Application.OnKey «^v», «»: Application.OnKey «^V», «» Application.OnKey «^x», «»: Application.OnKey «^X», «» End If
2-ой код (пытался что-то зарепортить чтобы хоть как-то подружить эти два кода.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ‘Option Explicit ‘Private WithEvents Appl As Application ‘ объявляем объект Application для того, чтобы можно было отлавливать события других книг
‘ Sub Reload_Appl(): Set Appl = Application: End Sub ‘ «патч» (у меня почему-то иногда теряется определение Appl)
SLAVICK, Здравствуй. Что-то я поломал. И не знаю куда искать где смотреть. При выборе пользователя и ввода пароля 444 Макрос выдает ошибку дебаг или ЕНД предлагает поискать проблему в этой строке.
Что привело к поломке не знаю. Добавлял страницы удалял ненужные. Добавлял в список отображаемых еще страниц. Но уже в сломанном файле делал многое чтобы понять в чем причина и список страниц корректировал убавлял его до одной. Пока ничего не помогло.
Ошибка: Нельзя установить свойство Visible класса Workshieet
Причем если сначала зайти под админом а потом зайти под пользователем то ошибку не выдает.
К сожалению файл уже вырос до 200кб.
Кажется я понял что проблема в двух кодах из основания книги. 1 код для скрытия листов 2 код ля календаря
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_Open()
If ActiveSheet.Name = «Лист5» Then Application.OnKey «^v», «»: Application.OnKey «^V», «» Application.OnKey «^x», «»: Application.OnKey «^X», «» End If
2-ой код (пытался что-то зарепортить чтобы хоть как-то подружить эти два кода.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ‘Option Explicit ‘Private WithEvents Appl As Application ‘ объявляем объект Application для того, чтобы можно было отлавливать события других книг
‘ Sub Reload_Appl(): Set Appl = Application: End Sub ‘ «патч» (у меня почему-то иногда теряется определение Appl)
Сообщение SLAVICK, Здравствуй. Что-то я поломал. И не знаю куда искать где смотреть. При выборе пользователя и ввода пароля 444 Макрос выдает ошибку дебаг или ЕНД предлагает поискать проблему в этой строке.
Что привело к поломке не знаю. Добавлял страницы удалял ненужные. Добавлял в список отображаемых еще страниц. Но уже в сломанном файле делал многое чтобы понять в чем причина и список страниц корректировал убавлял его до одной. Пока ничего не помогло.
Ошибка: Нельзя установить свойство Visible класса Workshieet
Причем если сначала зайти под админом а потом зайти под пользователем то ошибку не выдает.
К сожалению файл уже вырос до 200кб.
Кажется я понял что проблема в двух кодах из основания книги. 1 код для скрытия листов 2 код ля календаря
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_Open()
If ActiveSheet.Name = «Лист5» Then Application.OnKey «^v», «»: Application.OnKey «^V», «» Application.OnKey «^x», «»: Application.OnKey «^X», «» End If
2-ой код (пытался что-то зарепортить чтобы хоть как-то подружить эти два кода.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ‘Option Explicit ‘Private WithEvents Appl As Application ‘ объявляем объект Application для того, чтобы можно было отлавливать события других книг
‘ Sub Reload_Appl(): Set Appl = Application: End Sub ‘ «патч» (у меня почему-то иногда теряется определение Appl)