Haken Пользователь Сообщений: 495 |
Что-то от жары голова не варит… |
Попробуйте записать макрорекордером выделение нужных Вам листов. Удерживая нажатой Ctrl. Проанализируйте код. Пример: |
|
Haken Пользователь Сообщений: 495 |
Ну вот в том-то и дело, что рекодер выделяет по именам. И в другой книге макрос не будет работать, поскольку там названия листов другие и количество. Я думал, как бы это сделать через индексы какие-нибудь. Работает команда Sheets(1).Select — для выделения одного листа или Sheets(Array(1, 2, 3)).Select — для выделения трёх *четко установленных листов* |
1. Если обратите внимание, то увидите, что у листов в VBE два имени. Первое — присвоенное самой программой, второе — присвоенное Вами. А чтобы копировать только нужные (с … по …) нужно сначала их посчитать (макросом). |
|
{quote}{login=Юрий М}{date=17.08.2008 05:21}{thema=}{post}1. Если обратите внимание, то увидите, что у листов в VBE два имени. Первое — присвоенное самой программой, второе — присвоенное Вами. А чтобы копировать только нужные (с … по …) нужно сначала их посчитать (макросом).{/post}{/quote} |
|
Я делал так: |
|
Haken Пользователь Сообщений: 495 |
{quote}{login=Юрий М}{date=17.08.2008 05:40}{thema=}{post}Я делал так: |
Sheets(Array(1, 2, 3)).Select |
|
Вот такая идея: For i = 1 To k |
|
Haken Пользователь Сообщений: 495 |
{quote}{login=Лузер™}{date=18.08.2008 08:27}{thema=}{post}Вот такая идея: For i = 1 To k Спасибо! То что надо! |
RED Пользователь Сообщений: 9 |
Не могу понять, почему у меня не работает этот макрос, Dim dlt() End Sub |
RED Пользователь Сообщений: 9 |
Извиняюсь, вот так: |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Че так заморочено… Я сам — дурнее всякого примера! … |
RED Пользователь Сообщений: 9 |
{quote}{login=KukLP}{date=05.11.2011 04:46}{thema=}{post}Че так заморочено… |
Hugo Пользователь Сообщений: 23252 |
Можно так Ваш код подправить, но конечно замороченно… Sub test1() Ещё DisplayAlerts вероятно нужно отключить. |
RED Пользователь Сообщений: 9 |
Hugo. Ну это тоже самое, проблем с тем чтобы набрать номера страниц в массив у меня нет, проблема именно в том, что worksheets не хочет переваривать в себе этот dlt выдаёт ошибку out of range. |
nerv Пользователь Сообщений: 3071 |
Worksheets(dlt(0)).Delete |
Hugo Пользователь Сообщений: 23252 |
Похоже, что мою редакцию Вы не проверили… |
RED Пользователь Сообщений: 9 |
#19 05.11.2011 23:13:56 Всё, разобрался, всем спасибо. |
Выделить несколько листов при заданном условии |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Apkaxa 0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
||||
1 |
||||
Как выделить несколько листов?24.05.2011, 12:17. Показов 11188. Ответов 11 Метки нет (Все метки)
Понимаю, что ламерский вопрос, но тем не менее: Нужные ячейки я выделяю командой
Подскажите, плиз, подобный код, но только для листов.
0 |
Apkaxa 0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
||||
24.05.2011, 15:38 [ТС] |
2 |
|||
Извиняюсь. Не закончил код.
Хочу как-нибудь также выделить диапазон листов.
0 |
Терминатор |
||||
24.05.2011, 15:45 |
3 |
|||
Лист1, Лист2, и т.д. это имена Листов. |
Терминатор |
||||
24.05.2011, 16:01 |
4 |
|||
Если понадобится увидеть все названия Листов, в том числе тех,
Item(1). Это я так написал, если Книг открыто много можно указать |
0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
|
25.05.2011, 07:24 [ТС] |
5 |
to Terminator Sheets(Array(‘Лист1’, ‘Лист2’, ‘Лист3’)).Select
0 |
22 / 5 / 1 Регистрация: 05.09.2010 Сообщений: 370 |
|
26.05.2011, 06:57 |
6 |
Apkaxa
0 |
0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
|
26.05.2011, 08:18 [ТС] |
7 |
Блин. Неужели в VBA нет простого способа выделить все листы книги: с первого по последний? Что-нибудь типа Sheets Array(1 to i).Select
0 |
1 / 1 / 0 Регистрация: 19.05.2011 Сообщений: 80 |
|
26.05.2011, 13:21 |
8 |
Чтобы выделить все листы книги, надо выполнить инструкцию
0 |
0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
|
27.05.2011, 05:35 [ТС] |
9 |
Спасибо, gleb.
0 |
Терминатор |
|
27.05.2011, 11:13 |
10 |
Apkaxa, ну ты даёшь! Диапазон с Листами. |
0 / 0 / 0 Регистрация: 15.03.2011 Сообщений: 23 |
|
28.05.2011, 12:51 [ТС] |
11 |
to terminator Есть несколько листов с большими таблицами, в которые уже забиты разные данные.
0 |
Comanche |
||||
28.05.2011, 13:44 |
12 |
|||
Ничего не группируя, даёшь юзеру ввести данные на первом листе. Потом пишешь ‘Sheets.FillAcrossSheets Worksheets(1).Range(‘A1:C5′)’. Если всё же надо скрыть группу листов, то делаешь так:
Terminator прав: для программного формирования ГРУППЫ листов — не обойтись без МАССИВОВ (и если конструкция Array не подходит в силу ‘изменчивости’ начинки массива, то приходится использовать обычные массивы и в итоге мы сразу попадаем на использование перебора в цикле). |
1 выберите метод
1.1 Метод Range.Select (Выбрать объект.)
- Метод Select, применяемый к объектам Shape и ShapeRange.
- Выберите указанный объект.
- грамматика
- Expression.Select (Заменить), выражение является обязательным. Это выражение возвращает предыдущий объект.
- Выражение — это переменная, представляющая объект Range.
- Заменить тип варианта, необязательно.При добавлении графики, если он имеет значение True, выбранный контент будет заменен; если он равен False, новая графика будет добавлена к выбранному контенту.Метод Select применяется ко всем остальным объектам в списке «Применить к».
- Возвращаемое значение: вариант
- Примечание. Чтобы выделить ячейку или диапазон ячеек, используйте метод Select. Чтобы сделать одну ячейку активной ячейкой, используйте метод Activate.
1 Как выбрать сразу несколько листов
1.0 Ручное управление Excel, выберите несколько таблиц
- Выберите несколько листов: удерживайте ctrl + несколько листов
- Активировать рабочий лист: активировать только один лист за раз, чтобы стать активным, всегда есть только одна активная книга и активный лист
1.1 Код 1: выберите несколько фиксированных листов одновременно (никакие скрытые листы не сообщат об ошибке)
- Можем ли мы использовать фиксированный размер массива? Нет, просто вероятность ошибки относительно мала
Sub test_select2()
Dim arr1()
ReDim arr1(1 To 3)
For i = 1 To 3
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
1.2 Код 2: Все выбранные листы, если среди них есть скрытые листы, будет легко ошибиться
- Если в книге есть скрытая книга, и она не является скрытой, с этим кодом будет сообщено об ошибке: метод выбора листов недействителен
- Должно быть так, что скрытый лист нельзя выбрать.
- Поэтому, если вы столкнулись с этой проблемой, сначала проверьте: скрыты ли какие-то листы, но их необходимо выбрать в коде.
Sub test_select2()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
1.3 Для выбора нескольких листов можно использовать несколько методов
способ 1
Sub test_select3()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
End Sub
Способ 2
Sub test_select4()
Worksheets.Select
End Sub
Способ 3
- Если вы не выберете false, в конце будет выбран только один лист.
- select ture Значение по умолчанию — ture, что означает замену содержимого
Sub test_select5()
Dim i As Object
For Each i In Worksheets
i.Select False'Если вы не добавляете параметр select false, каждый раз выбирается только 1 лист
Next
End Sub
2 Выбор обычно относится только к содержимому листа, обычно это диапазон
2.1 selection
- Атрибут Application.Selection
- Возвращает объект, выбранный в активном окне для объекта Application.
- грамматика
- Выражение. Выбор
- Выражение Переменная, представляющая объект Application.
- Тип возвращаемого объекта зависит от текущего выделения (например, если ячейка выбрана, это свойство вернет объект Range). Если ничего не выбрано, свойство Selection вернет Nothing.
- Без использования идентификаторов объектов использование этого свойства эквивалентно использованию Application.Selection.
2.2 Кажется, что выбор — это то, что вы выбираете, но что на самом деле измеряется? Чтобы
- Само выделение является атрибутом, а его родительский объект: приложение, окна
- Теоретически его возвращаемое значение — это объект, и какой бы объект ни был выбран, он возвращает, какой объект — но фактическое измерение не является ————- может потребоваться проверка
- Метод создания атрибута выбора: select, конечно, пользователь также может использовать мышь, клавиатуру и другие операции для создания
Измеренный рабочий лист. Выберите, но выбор все еще находится в диапазоне
Sub t1()
Worksheets("sheet4").Select
MsgBox "The selection object type is " & TypeName(Selection)
End Sub
2.2 Как правило, выбор — это только диапазон на листе
- select
- select может выбрать диапазон wb sh и так далее
- Фактическое содержание выделения не является естественным = XX .select
- выбор относится конкретно к диапазону на листе
Тестовый код
Sub test_select3()
Dim arr1()
ReDim arr1(1 To Worksheets.Count)
For i = 1 To Worksheets.Count
arr1(i) = Worksheets(i).Name
Next
Worksheets(arr1).Select
'Несмотря на то, что выбрано несколько листов, выбор не относится к содержимому выбранного листа
'Следующее сообщит об ошибке
'Dim j As Worksheet
'For Each j In Selection
' Debug.Print j.Name
'Next
'Кажется, что выделение относится конкретно к области выделения на листе, которая относится конкретно к диапазону
Selection.Font.Color = vbRed
Selection.Font.Bold = True
Selection.Interior.ColorIndex = 6
End Sub
2.3 выбор может также быть другим содержанием в листе
Sub test117()
MsgBox "The selection object type is " & TypeName(Selection)
End Sub
Selection.Copy
Selection.ClearContents
Один, объект Range
Объект Range представляет собой непрерывную область на странице. С помощью объекта Range вы можете получить или изменить любую область на странице.
Во-вторых, объект Selection
Каждое окно браузера и каждая страница в каждом окне имеет объект выбора, который представляет область, выбранную мышью пользователя на странице.
Получите объект Selection с помощью оператора:
var selection = document.getselection();
Формулировка задачи:
Понимаю, что ламерский вопрос, но тем не менее:
Нужные ячейки я выделяю командой
Подскажите, плиз, подобный код, но только для листов.
Код к задаче: «Как выделить несколько листов?»
textual
Sub HideAllExceptFirst Dim arr As Variant, i As Long ReDim arr(1 To Worksheets.Count - 1) For i = 2 To Worksheets.Count arr(i - 1) = Worksheets(i).Name Next Sheets(arr).Visible = False End Sub
Полезно ли:
5 голосов , оценка 3.600 из 5