A_nAs_tAsi_A 0 / 0 / 0 Регистрация: 21.08.2020 Сообщений: 49 |
||||
1 |
||||
21.08.2020, 10:33. Показов 3767. Ответов 3 Метки нет (Все метки)
Добрый день!
Но так ищет только до первой пустой ячейке в столбце.
0 |
КостяФедореев Часто онлайн 792 / 530 / 238 Регистрация: 09.01.2017 Сообщений: 1,820 |
||||
21.08.2020, 10:35 |
2 |
|||
Сообщение было отмечено A_nAs_tAsi_A как решение РешениеA_nAs_tAsi_A,
1 |
Narimanych 2632 / 1637 / 745 Регистрация: 23.03.2015 Сообщений: 5,143 |
||||
21.08.2020, 10:46 |
3 |
|||
A_nAs_tAsi_A,
лучше….
1 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
25.08.2020, 09:25 |
4 |
Но так ищет только до первой пустой ячейке в столбце. — вот вообще не так.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
25.08.2020, 09:25 |
4 |
I am trying to add an Excel sheet named «Temp» at the end of all existing sheets, but this code is not working:
Private Sub CreateSheet()
Dim ws As Worksheet
ws.Name = "Tempo"
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub
Can you please let me know why?
ZygD
21k39 gold badges77 silver badges98 bronze badges
asked Dec 20, 2013 at 6:33
1
Try this:
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Tempo"
End Sub
Or use a With
clause to avoid repeatedly calling out your object
Private Sub CreateSheet()
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Tempo"
End With
End Sub
Above can be further simplified if you don’t need to call out on the same worksheet in the rest of the code.
Sub CreateSheet()
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
End With
End Sub
answered Dec 20, 2013 at 6:39
L42L42
19.3k11 gold badges43 silver badges68 bronze badges
5
Kindly use this one liner:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
answered Jan 3, 2016 at 5:27
AmarAmar
4294 silver badges6 bronze badges
2
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"
(when you add a worksheet, anyway it’ll be the active sheet)
answered Sep 14, 2015 at 7:56
SaptarshiSaptarshi
1252 silver badges3 bronze badges
Try this:
Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
On Error GoTo the_dark
Dim wsSheet As Worksheet
Dim bFoundWS As Boolean
bFoundWS = False
If inNamePrefix <> "" Then
Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
End If
If inBeforeOrAfter = iAfter Then
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
Else
Worksheets.Add(After:=wsSheet).Name = inName
End If
Else
If wsSheet Is Nothing Or bFoundWS = False Then
Worksheets.Add(Before:=Worksheets(1)).Name = inName
Else
Worksheets.Add(Before:=wsSheet).Name = inName
End If
End If
Set addSheet = findWS(inWB, inName, bFoundWS) ' just to confirm it exists and gets it handle
the_light:
Exit Function
the_dark:
MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
Err.Clear
GoTo the_light
End Function
JF it
2,4033 gold badges20 silver badges30 bronze badges
answered Oct 7, 2014 at 12:44
Mr FMr F
511 silver badge1 bronze badge
Try to use:
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"
If you want to check whether a sheet with the same name already exists, you can create a function:
Function funcCreateList(argCreateList)
For Each Worksheet In ThisWorkbook.Worksheets
If argCreateList = Worksheet.Name Then
Exit Function ' if found - exit function
End If
Next Worksheet
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function
When the function is created, you can call it from your main Sub, e.g.:
Sub main
funcCreateList "MySheet"
Exit Sub
answered Mar 23, 2016 at 10:14
Try switching the order of your code. You must create the worksheet first in order to name it.
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Tempo"
End Sub
thanks,
answered Nov 15, 2016 at 19:04
DeveloperDeveloper
7417 silver badges12 bronze badges
This will give you the option to:
- Overwrite or Preserve a tab that has the same name.
- Place the sheet at End of all tabs or Next to the current tab.
- Select your New sheet or the Active one.
Call CreateWorksheet("New", False, False, False)
Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
activeSheetNumber = Sheets(ActiveSheet.Name).Index
If (Evaluate("ISREF('" & sheetName & "'!A1)")) Then 'Does sheet exist?
If (preserveOldSheet) Then
MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
Exit Sub
End If
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
End If
If (isLastSheet) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName 'Place sheet at the end.
Else 'Place sheet after the active sheet.
Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
End If
If (selectActiveSheet) Then
Sheets(activeSheetNumber).Activate
End If
End Sub
answered Oct 17, 2017 at 22:19
mobermemoberme
6597 silver badges13 bronze badges
This is a quick and simple add of a named tab to the current worksheet:
Sheets.Add.Name = "Tempo"
answered Oct 22, 2015 at 19:04
JanJan
4113 silver badges9 bronze badges
Свойство End объекта Range применяется для поиска первых и последних заполненных ячеек в VBA Excel — аналог сочетания клавиш Ctrl+стрелка.
Свойство End
объекта Range
возвращает объект Range
, представляющий ячейку в конце или начале заполненной значениями области исходного диапазона по строке или столбцу в зависимости от указанного направления. Является в VBA Excel программным аналогом сочетания клавиш — Ctrl+стрелка (вверх, вниз, вправо, влево).
Возвращаемая свойством Range.End
ячейка в зависимости от расположения и содержания исходной:
Исходная ячейка | Возвращаемая ячейка |
---|---|
Исходная ячейка пустая | Первая заполненная ячейка или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении. |
Исходная ячейка не пустая и не крайняя внутри исходного заполненного диапазона в указанном направлении | Последняя заполненная ячейка исходного заполненного диапазона в указанном направлении |
Исходная ячейка не пустая, но в указанном направлении является крайней внутри исходного заполненного диапазона | Первая заполненная ячейка следующего заполненного диапазона или, если в указанном направлении заполненных ячеек нет, последняя ячейка строки или столбца в заданном направлении. |
Синтаксис
Expression.End (Direction) |
Expression
— выражение (переменная), представляющее объект Range
.
Параметры
Параметр | Описание |
---|---|
Direction | Константа из коллекции XlDirection , задающая направление перемещения. Обязательный параметр. |
Константы XlDirection
:
Константа | Значение | Направление |
---|---|---|
xlDown | -4121 | Вниз |
xlToLeft | -4159 | Влево |
xlToRight | -4161 | Вправо |
xlUp | -4162 | Вверх |
Примеры
Скриншот области рабочего листа для визуализации примеров применения свойства Range.End
:
Примеры возвращаемых ячеек свойством End
объекта Range("C10")
с разными значениями параметра Direction:
Выражение с Range.End | Возвращенная ячейка |
---|---|
Set myRange = Range("C10").End(xlDown) |
Range("C16") |
Set myRange = Range("C10").End(xlToLeft) |
Range("A10") |
Set myRange = Range("C10").End(xlToRight) |
Range("E10") |
Set myRange = Range("C10").End(xlUp) |
Range("C4") |
Пример возвращения заполненной значениями части столбца:
Sub Primer() Dim myRange As Range Set myRange = Range(Range(«C10»), Range(«C10»).End(xlDown)) MsgBox myRange.Address ‘Результат: $C$10:$C$16 End Sub |
Доброе утро! Требуется определить последний лист и записать его видом 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}имеем три листа с названиями: |
Выбрать первую пустую ячейку после таблицы |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |