Макс Пользователь Сообщений: 200 |
Добрый день уважаемые профи VBA, в очередной раз прошу Вашего совета в решении задачи. Есть книга, в нее иногда добавляются новые листы. Скрытых листов в книге нет. Пример файла во вложении. Изменено: Макс — 27.10.2013 09:37:21 |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
#2 27.10.2013 11:44:34 Вариант:
|
||
Hugo Пользователь Сообщений: 23252 |
Я бы делал иначе — сохранил копию книги, в ней удалил эти два листа. http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=52142 |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Игорь, с копией книги действительно проще)) А я уткнулся в задание (выделение группы листов)… Но выделяет )) |
Hugo Пользователь Сообщений: 23252 |
Да, выделяет — но далее с переносом возможны проблемы. |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
|
Макс Пользователь Сообщений: 200 |
#7 27.10.2013 13:16:34 Юрий М, спасибо, проверил код — выделение группы листов работает ка надо, но вот как теперь эту группу перенести в новую пустую книгу, путем создания копий листа (копированием) ?
тоже светлая мысль, но на одном листе у меня есть умная таблица Excel, которая почему-то не копируется в группе. Пишет что «невозможно скопировать или переместить группу листов содержащих таблицу» Прикрепленные файлы
|
||
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Прислушайтесь к совету Игоря — создавайте копию книги, а уже в ней удаляйте ненужные листы. Тогда и копировать группы листов не нужно. |
ikki Пользователь Сообщений: 9709 |
#9 27.10.2013 13:36:07
в некоторых случаях это не одно и то же фрилансер Excel, VBA — контакты в профиле |
||
Макс Пользователь Сообщений: 200 |
#10 27.10.2013 14:30:43 Решил выйти из этой ситуации немного подругому — я знаю какие листы мне точно не нужны и слава богу их количество всегда постоянное и названия тоже, поэтому скрываю два листа TR, Base. Затем делаю копию всех видимых листов и переношу эти копии в новую книгу. Код получился следующим:
Но в любом случае всем большое спасибо за помощь, без Ваших рассуждений я бы не догадался дойти до этого способа. |
||
Мотя Пользователь Сообщений: 3218 |
#11 27.10.2013 19:04:38 Вариант: см. файл. Прикрепленные файлы
|
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 не подходит в силу ‘изменчивости’ начинки массива, то приходится использовать обычные массивы и в итоге мы сразу попадаем на использование перебора в цикле). |
Выделить несколько листов при заданном условии |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Пользователям известно, что в этой программе нет отдельной команды, чтобы в один клик показать все скрытые листы в Excel.
Скрыть сразу несколько листов можно очень быстро:
- Выделить их с зажатой клавишей Ctrl (если листы идут не подряд) или Shift (если скрываемые листы расположены подряд),
- Щелкнуть правой кнопкой мыши на одном из выделенных листов и выбрать команду Скрыть.
Но если вы захотите так же быстро показать скрытые листы в Excel — у вас не получится это сделать стандартным способом.
Отобразить скрытые листы в Excel можно следующим образом: щелкнуть правой кнопкой мыши на ярлычке одного из листов и выбрать команду Показать.
После этого откроется список скрытых листов — но показать скрытые листе таким способом можно только по одному. В этом окне не работают клавиши Ctrl и Shift.
Но что если у вас много скрытых листов? Каждый раз отображать скрытые листы в Excel по одному — муторно. Как обычно, в Excel всегда можно найти обходный путь, а данном случае даже два — с использованием макроса и без использования, для тех, кто макросов боится.
Чтобы показать все скрытые листы в excel с использованием макроса, нужно:
1. Перейти в редактор Visual Basic на вкладке меню Разработчик.
2. Если эта вкладка не видна на ленте, то ее можно отобразить перейдя на вкладку меню Файл — Параметры — Настроить ленту — установить “галку” возле пункта Разработчик.
3. В окне редактора Visual Basic нужно выбрать команду меню Insert — Module
4. В открывшемся окне модуля написать следующий код (можно просто скопировать отсюда).
Sub UnhideAllSheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Visible = xlSheetVisible
Next ws
End Sub
Далее нажать сохранить (дискета) и закрыть редактор Visual Basic.
Теперь этот макрос доступен на вкладке Разработчик — Макросы.
Если нажать на кнопку Выполнить, выделив название макроса, то отобразятся все скрытые листы.
Однако, каждый раз вызывать макрос таким способом не совсем удобно.
Есть крутой лайфхак, как можно добавить этот макрос на панель быстрого доступа. После выполнения всех этапов, описанных в статье по ссылке ниже, данный макрос на панели доступа будет закреплен за определенной кнопкой, нажав на которую, можно отобразить скрытые листы.
Минус этого способа: отображаются сразу все скрытые листы, даже если для работы вам нужны только некоторые.
Плюс этого способа: если в файле добавляются новые скрытые листы, то не нужно делать дополнительных действий, чтобы отобразить скрытые листы — макрос отобразит их все, включая листы, которые были добавлены уже после записи макроса.
Способ 2. Отобразить все скрытые листы — без использования макроса
Есть еще один хитрый способ показать скрытые листы — при помощи представлений.
Инструмент Представления находится на вкладке Вид — блок Режим просмотра книги.
Чтобы добавить представление, которое будет показывать нужные вам скрытые листы в Excel, нужно сначала вручную показать эти листы (сделать не скрытыми).
После того, как вы показали все скрытые листы, в окне представлений нужно нажать кнопку Добавить.
Далее нужно задать представлению любое имя, например “Все листы”.
Теперь скроем листы и попробуем их показать при помощи созданного представления.
Откроем вкладку Вид — Представления — Выберем созданное представление — Применить.
Минус этого способа: если добавить в файл новые скрытые листы — нужно будет перезаписать представление.
Плюс этого способа: можно регулировать, какие именно листы показывать, а какие нет. Возможно создать несколько представлений, чтобы показывать разные наборы скрытых листов в excel.
В этой статье мы узнали, как показать скрытые листы в Excel.
Вам может быть интересно:
I found a similar solution to this question in c# How to Select all the cells in a worksheet in Excel.Range object of c#?
What is the process to do this in VBA?
I select data normally by using «ctrl+shift over arrow, down arrow» to select an entire range of cells. When I run this in a macro it codes out A1:Q398247930, for example. I need it to just be
.SetRange Range("A1:whenever I run out of rows and columns")
I could easily do it myself without a macro, but I’m trying to make the entire process a macro, and this is just a piece of it.
Sub sort()
'sort Macro
Range("B2").Select
ActiveWorkbook.Worksheets("Master").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Master").sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Master").sort
.SetRange Range("A1:whenever I run out of rows and columns")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
edit:
There are other parts where I might want to use the same code but the range is say «C3:End of rows & columns». Is there a way in VBA to get the location of the last cell in the document?
asked Jul 30, 2013 at 18:50
C. TewaltC. Tewalt
2,2612 gold badges29 silver badges47 bronze badges
I believe you want to find the current region of A1 and surrounding cells — not necessarily all cells on the sheet.
If so — simply use…
Range(«A1»).CurrentRegion
answered Jul 30, 2013 at 19:17
ExcelExpertExcelExpert
3522 silver badges4 bronze badges
1
You can simply use cells.select
to select all cells in the worksheet. You can get a valid address by saying Range(Cells.Address)
.
If you want to find the last Used Range
where you have made some formatting change or entered a value into you can call ActiveSheet.UsedRange
and select it from there. Hope that helps.
June7
19.5k8 gold badges24 silver badges33 bronze badges
answered Jul 30, 2013 at 19:11
chanceachancea
5,8083 gold badges28 silver badges39 bronze badges
2
you can use all cells as a object like this :
Dim x as Range
Set x = Worksheets("Sheet name").Cells
X is now a range object that contains the entire worksheet
answered Apr 15, 2015 at 11:47
you have a few options here:
- Using the UsedRange property
- find the last row and column used
- use a mimic of shift down and shift right
I personally use the Used Range and find last row and column method most of the time.
Here’s how you would do it using the UsedRange property:
Sheets("Sheet_Name").UsedRange.Select
This statement will select all used ranges in the worksheet, note that sometimes this doesn’t work very well when you delete columns and rows.
The alternative is to find the very last cell used in the worksheet
Dim rngTemp As Range
Set rngTemp = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not rngTemp Is Nothing Then
Range(Cells(1, 1), rngTemp).Select
End If
What this code is doing:
- Find the last cell containing any value
- select cell(1,1) all the way to the last cell
answered Jul 30, 2013 at 20:32
Derek ChengDerek Cheng
5353 silver badges8 bronze badges
3
Another way to select all cells within a range, as long as the data is contiguous, is to use Range("A1", Range("A1").End(xlDown).End(xlToRight)).Select
.
answered Mar 29, 2019 at 19:38
I would recommend recording a macro, like found in this post;
Excel VBA macro to filter records
But if you are looking to find the end of your data and not the end of the workbook necessary, if there are not empty cells between the beginning and end of your data, I often use something like this;
R = 1
Do While Not IsEmpty(Sheets("Sheet1").Cells(R, 1))
R = R + 1
Loop
Range("A5:A" & R).Select 'This will give you a specific selection
You are left with R = to the number of the row after your data ends. This could be used for the column as well, and then you could use something like Cells(C , R).Select, if you made C the column representation.
answered Jul 30, 2013 at 19:25
MakeCentsMakeCents
7321 gold badge5 silver badges15 bronze badges
2
Sub SelectAllCellsInSheet(SheetName As String)
lastCol = Sheets(SheetName).Range("a1").End(xlToRight).Column
Lastrow = Sheets(SheetName).Cells(1, 1).End(xlDown).Row
Sheets(SheetName).Range("A1", Sheets(SheetName).Cells(Lastrow, lastCol)).Select
End Sub
To use with ActiveSheet:
Call SelectAllCellsInSheet(ActiveSheet.Name)
answered Mar 14, 2017 at 20:57
Yehia AmerYehia Amer
5985 silver badges11 bronze badges
Here is what I used, I know it could use some perfecting, but I think it will help others…
''STYLING''
Dim sheet As Range
' Find Number of rows used
Dim Final As Variant
Final = Range("A1").End(xlDown).Row
' Find Last Column
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set sheet = ActiveWorkbook.ActiveSheet.Range("A" & Final & "", Cells(1, lCol ))
With sheet
.Interior.ColorIndex = 1
End With
answered Mar 16, 2019 at 4:29
I have found that the Worksheet «.UsedRange» method is superior in many instances to solve this problem.
I struggled with a truncation issue that is a normal behaviour of the «.CurrentRegion» method. Using [ Worksheets(«Sheet1»).Range(«A1»).CurrentRegion ] does not yield the results I desired when the worksheet consists of one column with blanks in the rows (and the blanks are wanted). In this case, the «.CurrentRegion» will truncate at the first record. I implemented a work around but recently found an even better one; see code below that allows copying the whole set to another sheet or to identify the actual address (or just rows and columns):
Sub mytest_GetAllUsedCells_in_Worksheet()
Dim myRange
Set myRange = Worksheets("Sheet1").UsedRange
'Alternative code: set myRange = activesheet.UsedRange
'use msgbox or debug.print to show the address range and counts
MsgBox myRange.Address
MsgBox myRange.Columns.Count
MsgBox myRange.Rows.Count
'Copy the Range of data to another sheet
'Note: contains all the cells with that are non-empty
myRange.Copy (Worksheets("Sheet2").Range("A1"))
'Note: transfers all cells starting at "A1" location.
' You can transfer to another area of the 2nd sheet
' by using an alternate starting location like "C5".
End Sub
answered May 2, 2019 at 19:38
Maybe this might work:
Sh.Range(«A1», Sh.Range(«A» & Rows.Count).End(xlUp))
answered Oct 31, 2014 at 18:38
Refering to the very first question, I am looking into the same.
The result I get, recording a macro, is, starting by selecting cell A76:
Sub find_last_row()
Range("A76").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
answered Aug 7, 2015 at 12:40