Доброе утро! Требуется определить последний лист и записать его видом Sheets(«Лист#последний»).Select. Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500. Если со строчками все понятно как определить, то как с листами? Спасибо |
|
{quote}{login=cbr}{date=17.10.2011 11:35}{thema=Оперирование с «последним листом». Как его найти?}{post}Доброе утро! Требуется определить последний лист и записать его видом Sheets(«Лист#последний»).Select. Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500. Если со строчками все понятно как определить, то как с листами? Спасибо :){/post}{/quote}ъ |
|
Таким образом он берет лист с названием «Финальный», а не Лист»100500″. |
|
{quote}{login=cbr}{date=17.10.2011 11:47}{thema=}{post}Таким образом он берет лист с названием «Финальный», а не Лист»100500″.{/post}{/quote} |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Тут еще вопрос, что считать последним листом. Крайний левый, последний созданный, содержащий в названии бОльшую цифру и т.д. Я сам — дурнее всякого примера! … |
Вот смотрите. В принципе теоретически как я понял должен подходить следующий код: Но. Листа всего ТРИ. но новый «последний» имеет название Лист23. А мы выбираем как я понимаю Sheets(«Лист3»).Select. Поэтому и спрашиваю последний Лист, а не посчитать их. Может правильнее будет выразиться самое большое значение из всех «Лист»‘ов. |
|
KukLP, правильно выразился. Содержащий бОльшую цифру. |
|
nerv Пользователь Сообщений: 3071 |
Не морочьте людям голову: зайдите в VBA проект и в Project Explorer’е посмотрите какой лист у вас последний на самом деле. Это msgbox Sheets(sheets.Count).name и есть он (если в книге нет листов-диаграмм) |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Public Function ExtractNumber#(s As String) Public Sub DelLastsheet() Я сам — дурнее всякого примера! … |
nerv, последний я и так вижу. мне не надо их считать. KukLP, нифига себе. Сильно. |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Но это все равно не выход. При следующем запуске и создании листа номерация не продолжится, если был удален не последний лист. Пронумерует первым свободным номером. Я сам — дурнее всякого примера! … |
Кстати, если последний лист скрыт, метод Sheets(Sheets.Count).Select вызовет ошибку. Найти последний нескрытый лист можно так: Sub LastVisibleSheet() |
|
Может просто.. |
|
Hugo Пользователь Сообщений: 23253 |
Так если эти листы генерятся макросом, так может просто писать их имена в публичную переменную. Так там всегда будет имя последнего листа — и доступно в любой момент. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
{quote}{login=Hugo}{date=17.10.2011 01:01}{thema=}{post}Так если эти листы генерятся макросом, так может просто писать их имена в публичную переменную. Так там всегда будет имя последнего листа — и доступно в любой момент.{/post}{/quote}См. мой пост от 17.10.2011, 12:20. Можно в свойствах книги сохранять имя последнего. Я сам — дурнее всякого примера! … |
nerv Пользователь Сообщений: 3071 |
{quote}{login=cbr}{date=17.10.2011 12:19}{thema=}{post}nerv, последний я и так вижу. мне не надо их считать.{/post}{/quote} >>Название темы: Оперирование с «последним листом». Как его найти? Стоят три кубика на столе, как определить какой из них первый, а какой последний? Тот, кот. по середине, явно «второй». Если считать справа-налево то одно, а если слева-на право, то другое. >>Дело в том, что по результату работы макроса, может получиться последний лист12 или лист100500. 22644 |
Так я говорю, что макрос обрабатывает файл. на основании этого файла он создает листы, листов может создать 1, может 101. Предлагаете анализировать этот файл, сколько он листов создаст и уже исходя из этого уже работать с высчитанным последним листом? не очень просто это. Модифицировал макрос, теперь у нас есть один единственный лист с названием «Лист%какое-то число», других листов больше нет. так не работает |
|
Hugo Пользователь Сообщений: 23253 |
Один единственный лист? |
Видимо моё изъяснение понятно только мне имеем три листа с названиями: больше листов нет. в данном наборе меняется только ## почти в рандоме. Надо сделать Sheets(«Лист##»).Select/Activate/Delete не важно. вот как описать ## я не знаю |
|
Hugo Пользователь Сообщений: 23253 |
Если Вы точно не знаете, каким по счёту кладёт свой лист макрос (хотя это можно в макросе прописать — класть в конец, или в начало, или перед последним листом), то например перебираем все листы книги, и в названии которого есть «Лист» — тот и нужен. |
egonomist Пользователь Сообщений: 409 |
Public Sub www() #35383# |
спасибо, коллега! Можно его с запасом на трехзнак переделать? Когда мы удаляем найденный лист, макрос запрашивает разрешение на удаление, как можно принудительно разрешить удаление? |
|
nerv Пользователь Сообщений: 3071 |
>>не очень просто это. >>Может правильнее будет выразиться самое большое значение из всех «Лист»‘ов. |
{quote}{post} {quote}{post} перед строкой удаления |
|
egonomist Пользователь Сообщений: 409 |
э — не получилось правильно оформить сообщение |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#26 17.10.2011 18:16:18 {quote}{login=cbr}{date=17.10.2011 01:59}{thema=}{post}имеем три листа с названиями: |
у меня есть лист под названием «Конец», который нужно переместить, чтобы быть последним из всех доступных листов. Мне нужно сделать это с помощью VBA.
у меня есть процедура сортировки, которая работает, мне просто нужен синтаксис для перемещения. Вот что у меня есть:
Private Sub CommandButton263_Click()
Dim i As Integer
Dim j As Integer
For i = 1 To Sheets.Count
For j = 1 To Sheets.Count - 1
If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
Sheets(j).Move After:=Sheets(j + 1)
End If
Next j
Next i
Sheets("Navigation").Select
Sheets("Navigation").Move Before:=Sheets(1)
Sheets("Navigation (2)").Select
Sheets("Navigation (2)").Move Before:=Sheets(2)
Sheets("EstimateTemplate").Select
Sheets("EstimateTemplate").Move Before:=Sheets(3)
Sheets("Formulas").Select
Sheets("Formulas").Move Before:=Sheets(4)
Sheets("End").Move After:=Sheets(EOF) 'what can i use instead of EOF?
Sheets("Navigation (2)").Select
End Sub
в частности, глядя на строку Sheets("End").Move After:=Sheets(EOF)
—что я могу использовать, чтобы получить последний лист?
источник
I currently have 2 worksheets in my excel file.
The first sheet is known as the Summary page, which displays an summary result of the second sheet.
The second sheet is known as the raw data. An example would be a column named Fruits.
Apple
Apple
Apple
Banana
Banana
Pear
In the first sheet, I would have a formula that counts the number of time the respective fruits appear and the result will be displayed in different cells.
=COUNTIF(Fruits!A2:A7,"Apple")
=COUNTIF(Fruits!A2:A7,"Banana")
What I wanna do is, is it possible for me to program the formula such that everytime I add a new sheet of raw data (3rd sheet), the statistics on the first sheet is able to reference to the latest sheet to get the information.
(Assuming that the positioning of the data and all are the same as the second sheet.)
What I have done so far is to come out with a function GETLASTWSNAME()
which is able to always retrieve the name of the last worksheet. but it seems kinda impossible for me to nest the function within the countif formula itself.
=COUNTIF((GETLASTWSNAME())!A2:A7,"Apple)
The above formula is how i want my formula to work, but sadly excel does not allow me to do that.
Any comments would be appreciated. Thanks!
Я бы сначала переименовал ваше свойство VBA CodeName, чтобы оно имело смысл. Вместо «Sheet1» или чего бы то ни было, сделайте их значимыми модификаторами
Прямо сейчас, если кто-то изменит имя листа, ваш VBA сломается.
Если ваш лист вместо этого имеет CodeName, вы можете сделать очень хорошие вещи, такие как:
EndSheet.Move after:=Worksheets(Worksheets.Count)
Это означает, что даже если кто-то переименует этот лист, скажем «сломать ваш макрос!»это не … сломает твой макрос.
Кроме того, что касается выбора, вы можете сделать это, чтобы сделать ваш код более надежным, быстрым и надежным:
NavigationSheet.Move Before:=Sheets(1)
NavigationTwoSheet.Move Before:=Sheets(2)
EstimateTemplateSheet.Move Before:=Sheets(3)
FormulasSheet.Move Before:=Sheets(4)
EndSheet.Move After:=Sheets(EOF)
NavigationTwoSheet.Select
(это предполагает, что вы переименовали все ваши коды CodeName в VBE)
0 / 0 / 1 Регистрация: 11.10.2010 Сообщений: 363 |
|
1 |
|
28.05.2012, 13:49. Показов 10541. Ответов 10
Как определить последнию строку в первой страницы листа
0 |
22 / 5 / 1 Регистрация: 05.09.2010 Сообщений: 370 |
|
28.05.2012, 14:05 |
2 |
0 |
1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
|
28.05.2012, 14:34 |
3 |
он, кажется, спрашивает про колец страницы, а не конец данных.
0 |
VladConn 5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
||||
28.05.2012, 16:34 |
4 |
|||
vladconn
0 |
Штурмaн 0 / 0 / 0 Регистрация: 27.04.2009 Сообщений: 265 |
||||
28.05.2012, 18:51 |
5 |
|||
Вот хоть убейте меня, но все эти встроенные и невстроенные функции, рано или поздно выдают какой нибудь глюк. Лично я на протяжении многих лет пользуюсь простым способом.
i-1 это и есть последняя строка
0 |
VladConn 5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
||||
28.05.2012, 19:42 |
6 |
|||
Штурмaн, Tak delat’ ne nado. Eto naprimer lucshe:
:0))
0 |
5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
|
28.05.2012, 22:01 |
7 |
A vprochem…
0 |
0 / 0 / 0 Регистрация: 27.04.2009 Сообщений: 265 |
|
28.05.2012, 22:47 |
8 |
[bold] VladConn[/bold]
0 |
5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
|
29.05.2012, 03:14 |
9 |
Штурман, Принимается. Но то наверно не глюк, так у них задумано. vladconn
0 |
Johny Walker 1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
||||
29.05.2012, 10:41 |
10 |
|||
Для Штурмана: имхо так еще надежнее:
потому что значение «» отличается от Empty (это разные значения)
0 |
Сумрак |
|
30.05.2012, 19:51 |
11 |
хех.. я к стати, тоже давно остановился на варианте Штурмана… и быстро и надежно… Правда проверяю на Empty. Но пока проблем не было. |