Vba excel ссылка на активный лист

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

#1

23.04.2015 11:04:51

Доброго времени суток!
Я не разбираюсь в кодах VBA, но принципы их работы понимаю.
Ребята, проблема следующая:
есть файл, в котором есть сводная таблица, мне необходимо прописать макрос который будет выдавать детали по каждой строчки на новом листе.
после чего его нужно будет отредактировать под формат листа для печати. и распечатать.
собственно с этим проблемы нет, это я могу сделать путем записи последовательных действий. проблема возникает в следующем, после записи и сохранения макроса, при попытке его запустить выдает ошибку. т.к. в коде VBA он ссылается на конкретное имя листа, а при выдаче деталей на отдельный лист создается лист с новым именем, не указанным в коде. что можно прописать в коде чтобы макрос работал с только что созданным листом. при выдаче  деталей новый лист становится активным.
Вот код который у меня получился:

Скрытый текст

Прошу прощения за возможно, размытый вопрос. постарался максимально подробно описать проблему.

На панели над полем для сообщения куча кнопок форматирования. Пользуйтесь[МОДЕРАТОР]

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

Добрый день!
нет вариантов?
ведь как-то это же можно сделать… не понятно только как…

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

#3

24.04.2015 11:48:47

Немного не понял смысла вопроса относительно Вашего кода, который просто форматирует данные на листе. Что касается того, как обратиться к последнему созданному листу, попробуйте делать это не по имени, а по индексу (далее .Select или то, что нужно)

Код
Sheets(Sheets().Count)

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

ну так вы и работаете с активным в чем проблема?

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

А зачем скобочки внутри? )

 

МВТ

Пользователь

Сообщений: 1198
Регистрация: 01.02.2015

Юрий М, по привычке :)

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

#7

26.04.2015 19:13:31

Доброго времени суток, Друзья!

Из того что вы мне посоветовали, ничего не подошло. Копался по форуму, тож не нашел нужного. Увидел у коллег похожий макрос, адаптировал под себя и вот что у меня получилось:

Код
Sub MiseEnPage()
' FicheRupture Macro
' Macro enregistrée le 05/06/2009 par DDF0472153
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 10
        .PrintTitleRows = "$1:$1"
        .CenterFooter = "Page &P de &N"
    End With
    Rows("1:1").Select
    Selection.Style = "Tableau rupture"
    Range("A2:O1000").Select
    Selection.Font.Bold = True
    With Selection.Font
        .Name = "Arial"
        .Size = 16
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Columns("E:E").ColumnWidth = 4.14
    Columns("F:F").ColumnWidth = 4.57
    Columns("G:G").ColumnWidth = 4.14
    Columns("H:H").ColumnWidth = 6.86
    Columns("I:I").ColumnWidth = 6.14
    Columns("J:J").ColumnWidth = 14.86
    Columns("K:K").ColumnWidth = 4.14
    Columns("M:M").ColumnWidth = 10.86
    Columns("N:N").ColumnWidth = 32.57
    Columns("O:O").ColumnWidth = 45.86
    Range("G1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = True
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Rows("1:1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = True
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Cells.Select
    Selection.Columns.AutoFit
End Sub

На этом сайте я многое узнал благодаря Вам!
Спасибо Всем за участие!!!

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

#8

26.04.2015 20:33:48

Ребят, теперь нужно, чтобы в промежутке между 60 и 61 строчках производилась сортировка в столбце «B». Никак не могу сообразить как это сделать…
я сделал так:

Код
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B2:O10")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Этот код вставил в строчку между 60 и 61, но сортировки по столбцу не происходит…
Подскажите где ошибка?

Спасибо!

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 

Первые две строчки не нужны.
В 7 строке задается диапазон сортировки B2:010. Это правильный диапазон?

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

Да, диапазон правильный, там буква О, а не ноль. Но он может меняться в зависимости от кол-ва столбцов. т.е. сортировка распространяется на все строки. Может можно обойтись без него? или может задать его шире?

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#11

27.04.2015 15:01:17

попробуйте так

Код
ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B1").CurrentRegion
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

либо, если столбец А почему-то не должен сортироваться (??? наверное все-таки должен, выгрузка же с первого столбца идет), то

Код
ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B1").CurrentRegion.Offset(0, 1).Resize(, Range("B1").CurrentRegion.Columns.Count - 1)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

F1 творит чудеса

 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

Максим, Вы просто Гений!
В «А» все значения одинаковые.
Все работает!
Круто спасибо!

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

 
 

ivan31888

Пользователь

Сообщений: 207
Регистрация: 25.03.2015

#14

27.04.2015 16:17:02

Я с этим файлом мучился уже пару месяцев как. а тут: Хоп, и вопрос решен!

<#0>
Бессмысленно осмысливать смысл неосмысленными мыслями.

Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.

Обращение к рабочим листам

Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.

Обращение к рабочему листу в коде VBA Excel:

‘По уникальному имени

УникИмяЛиста

‘По индексу

Worksheets(N)

‘По имени листа на ярлычке

Worksheets(«Имя листа»)

  • УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
  • N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
  • Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

Количество листов в рабочей книге Excel определяется так:

‘В активной книге

Worksheets.Count

‘В любой открытой книге,

‘например, в «Книга1.xlsm»

Workbooks(«Книга1.xlsm»).Worksheets.Count

Переименование листов

В 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 — МойЛист, которое необходимо заменить на имя — Реестр.

Лист1.Name = «Реестр»

Worksheets(1).Name = «Реестр»

Worksheets(«МойЛист»).Name = «Реестр»

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression — переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False — лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden — лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True — лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Примеры:

Лист1.Visible = xlSheetHidden

Лист2.Visible = 1

Worksheets(Worksheets.Count).Visible = xlVeryHidden

Worksheets(«МойЛист»).Visible = True

Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.

Return to VBA Code Examples

In this Article

  • ActiveSheet
    • Activate Worksheet (Setting the ActiveSheet)
    • ActiveSheet Name
  • Selected Sheets vs ActiveSheet
  • Select Worksheet
    • Select Worksheet by Tab Name
    • Select Worksheet by Index Number
    • Select Worksheet With VBA Code Name
    • Select Current Worksheet
  • More Activate / Select Sheet Examples
    • Set ActiveSheet to Variable
    • Change ActiveSheet Name
    • With ActiveSheet
    • Loop Through Selected Sheets
    • GoTo Next Sheet
  • VBA Coding Made Easy

This article will discuss the ActiveSheet object in VBA. It will also discuss how to activate, select, and go to Worksheets (& much more). Read our full VBA Worksheets Guide for more information about working with worksheets in VBA.

ActiveSheet

In VBA, ActiveSheet refers to the currently active Worksheet. Only one Sheet may be active at a time.

Activate Worksheet (Setting the ActiveSheet)

To set the ActiveSheet use Worksheet.Activate:

Worksheets("Input").Activate

The Activate Sheet command will actually “go to” the sheet, changing the visible Sheet.

vba activate sheet

The above example uses the Sheet (Tab) name.  Instead you can use the VBA code name for the worksheet:

Sheet1.Activate

vba activesheet

ActiveSheet Name

To get the ActiveSheet Name:

msgbox ActiveSheet.name

Selected Sheets vs ActiveSheet

At any point in time, only one Sheet can be the ActiveSheet. However, multiple Worksheets can be selected at once.

When multiple Worksheets are selected only the “top-most” Worksheet is considered active (the ActiveSheet).

vba selected sheets

Select Worksheet

If you would like to select a worksheet instead of activating it. Use .Select instead.

Select Worksheet by Tab Name

This selects a Worksheet based on it’s Sheet Tab Name

Sheets("Input").Select

vba select sheet

Select Worksheet by Index Number

This selects a Worksheet based on it’s position relative to other tabs

Worksheets(1).Select

vba select sheet index number

Select Worksheet With VBA Code Name

Sheet1.Select

Selecting worksheets by code name can prevent errors caused by worksheet name changes.

Select Current Worksheet

To select the current Worksheet, use the ActiveSheet object:

ActiveSheet.Select

More Activate / Select Sheet Examples

VBA Programming | Code Generator does work for you!

Set ActiveSheet to Variable

This will assign the ActiveSheet to a Worksheet Object Variable.

Dim ws As Worksheet

Set ws = ActiveSheet

Change ActiveSheet Name

This will change the ActiveSheet Name.

ActiveSheet.Name = "NewName"

With ActiveSheet

Using the With Statement allows you to streamline your code when working with objects (such as Sheets or ActiveSheet).

With ActiveSheet
    .Name = "StartFresh"
    .Cells.Clear
    .Range("A1").Value = .Name
End With

Notice how you don’t need to repeat “ActiveSheet” before each line of code. This can be a huge time saver when working with a long list of commands.

Loop Through Selected Sheets

The following macro will Loop through all selected sheets, displaying their names.

Sub GetSelectedSheetsName()
    Dim ws As Worksheet

    For Each ws In ActiveWindow.SelectedSheets
         MsgBox ws.Name
    Next ws

End Sub

GoTo Next Sheet

This code will go to the next Sheet. If the ActiveSheet is the last Sheet, then it will go to the first Sheet in the Workbook.

If ActiveSheet.Index = Worksheets.Count Then
    Worksheets(1).Activate
Else
    ActiveSheet.Next.Activate
End If

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

Select Activate Worksheet

Learn More!

<<Return to VBA Examples

Make a particular worksheet visible using a macro in Excel.

This is called activating a worksheet and is rather easy to do.

Sections:

Activate Worksheet by Name

Activate Worksheet by Index Number

Notes

Activate Worksheet by Name

Let’s navigate to, activate, the worksheet called «Sheet2».

Worksheets("Sheet2").Activate

08008f3433d614b4eb713fdcde4e01eb.jpg

Worksheets(«Shee2») is how we reference the sheet to which we want to navigate.

Sheet2 is the name of the sheet to which we want to navigate. Make sure to surround it with double quotation marks.

Activate is what actually takes the user to that worksheet.

Putting it all together, we get: Worksheets(«Sheet2»).Activate

It’s as simple as that.

Activate Worksheet by Index Number

This time, let’s navigate to the second worksheet using its index number.

All we do is to replace «Sheet2» from the last example with 2.

Worksheets(2).Activate

3e8969b16e6f131afc29445b0f9a02ac.jpg

2 is the index number of the desired worksheet and Activate is what takes us to the desired worksheet.

This example can be confusing if you are not used to using index numbers, but index numbers are really helpful when you have to do something like loop through all of the worksheets in the workbook.

Notes

Basically, just reference the desired worksheet, however you want, and then type .Activate after it.

You should not use the Activate feature to navigate to a worksheet so that you can get data from it or put data into it. This is very bad Macro/VBA design and it will make your life hell later on. To get data from separate worksheets, read this tutorial: Select Data from Separate Worksheets with Macros VBA in Excel.

This feature should be used when you want the user to end up on a specific worksheet.

Make sure to download the sample file attached to this tutorial so that you can see this macro in Excel and work with it.

Similar Content on TeachExcel

Copy and Paste Data using Macro VBA in Excel

Tutorial: How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this,…

Select Data from Separate Worksheets with Macros VBA in Excel

Tutorial: Select data from other worksheets with Macros and VBA without navigating to those workshee…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Login to a Website using a Macro

: Connect and login to a website using a macro in Excel.
This allows you to open a website a…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Guide to Creating Charts with a Macro in Excel

Tutorial: How to add, edit, and position charts in Excel using VBA.
This tutorial covers what to do …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Понравилась статья? Поделить с друзьями:
  • Vba excel срезы строк
  • Vba excel среднее значение
  • Vba excel среднее арифметическое
  • Vba excel сравнить столбец
  • Vba excel сравнить значения ячеек