Excel vba макрос номер строки

Olya1985

32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

1

Макрос для автоматической нумерации строк

07.01.2011, 13:27. Показов 32891. Ответов 15

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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

Visual Basic
1
2
3
4
5
6
7
Private Sub worksheet_change (byval target as range) 
 
For Each oCell In Range([D1], Cells(Rows.Count, "D")).Cells
    If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
 
End Sub



0



Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 17:40

2

А чем же вас этот код не устраивает конкретно?



0



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 17:42

 [ТС]

3

он зависает после нумерации первой строки…



0



Vlanib

Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 18:03

4

Естественно! Исправьте макрос следующим образом:

Visual Basic
1
2
3
4
5
6
7
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range)
Application.EnableEvents = False
For Each oCell In Range([D1], Cells(Rows.Count, "D")).Cells
    If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
Application.EnableEvents = True
End Sub



0



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 18:07

 [ТС]

5

Vlanib,

теперь строки не нумеруются…



0



Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 18:15

6

Скиньте ваш файлик.



0



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 18:24

 [ТС]

7

файлик прилагаю



0



Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 18:30

8

Видимо не приложился…



0



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 18:32

 [ТС]

9

еще раз попробую…



0



Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 18:56

10

Так, Оленька, давайте обстоятельно. В этом вашем посте вы просили перевести формулу на ВБА, что я и сделал дословно. Данная вами формула возвращает в ячейку количество аргументов в столбце «D». Если бы вы изначально правильно сформулировали задачу, то и вопросов было бы меньше.
Внимательно посмотрите где располагается макрос. Если нужно чтобы он работал только для конкретной страницй, то код нужно разместить в модуле листа, в событии его изменения. Макрос нумерует столбец А если в В есть значение.



1



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 19:01

 [ТС]

11

Vlanib,

спасибо! только осталась еще одна проблема.. при удалении строки в столбце B номер все равно остается. при использовании же формулы он исчезает вместе с удаленным текстом. можно ли в макросе сделать также?



0



Vlanib

Частенько бываю

749 / 330 / 42

Регистрация: 20.06.2007

Сообщений: 854

07.01.2011, 19:25

12

Visual Basic
1
2
3
4
5
6
7
8
9
Application.EnableEvents = False
For Each oCell In Range([B1], Cells(ActiveSheet.UsedRange.Rows.Count, "B")).Cells
    If Not IsEmpty(oCell) Then
        iCount = iCount + 1
        oCell.Previous = iCount
    Else: oCell.Previous.Clear
    End If
Next
Application.EnableEvents = True



1



32 / 2 / 0

Регистрация: 31.12.2010

Сообщений: 91

07.01.2011, 20:26

 [ТС]

13

теперь отлично. спасибо!

Добавлено через 13 минут
Vlanib,

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

Добавлено через 16 минут
Vlanib,

прошу мое предыдущее сообщение считать недействительным.

у меня овт еще вопрос. я не совсем понимаю для чего используется Application.EnableEvents = False или True. Не могли бы вы вкратце объяснить?

Добавлено через 6 минут
я что то порядком запуталась… последняя строка и правда не нумеруется……..



0



1904 / 781 / 31

Регистрация: 11.02.2010

Сообщений: 1,567

07.01.2011, 22:41

14

EnableEvents, как следует из перевода, отключает или включает обработку событий приложения (т. е события могут либо игнорироваться, либо при возникновении событий могут вызываться соответствующие обработчики этих событий) http://support.microsoft.com/kb/213720

Не по теме:

Цитата
Сообщение от Olya1985
Посмотреть сообщение

я что то порядком запуталась

ВОЗМОЖНО, выполнение кода было остановлено пользователем между инструкциями Application.EnableEvents = False/True и события перестали обрабатываться вплоть до повторного открытия приложения



0



91 / 1 / 1

Регистрация: 09.01.2013

Сообщений: 2

09.01.2013, 11:15

15

Лучший ответ Сообщение было отмечено как решение

Решение

Уважаемый Vlanib Спасибо — Очень интересное решение , а можно дописать макрос чтоб в » A » счет шел с первой пустой ячейки ( так как обычно бывают шапки в таблицах — получится макрос на все случаи жизни



0



8 / 8 / 0

Регистрация: 22.02.2012

Сообщений: 159

20.02.2021, 14:05

16

Vlanib, а как переписать макрос, чтобы он нумеровал строку не по приницпу «количество столбцов выше+1», а «значение в предыдущей ячейке+1». У меня нумерация строк просто 10001, 10002..



0



Определение номера столбца и номера строки

flash708

Дата: Четверг, 22.01.2015, 22:13 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Есть лист Excel/ Известно что в листе только единицы и нолики.
Есть несколько столбцов и несколько строк, в которых только нолики.
(например, только первый столбец, или только три первых столбца, или и первые семь строк и первые семь столбцов) и т.д. Это только первые строки и первые столбцы.
подскажите как с помощью Vba найти номер первой такой строки и номер первого такого столбца, в котором уже не одни нолики, а хотя бы одна единица.
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
результат строка 5 столбец 4
[moder]Файл кладите.
И Правила форума уже прочитайте. Буду зверствовать скоро.

К сообщению приложен файл:

9052529.xlsm
(15.4 Kb)

Сообщение отредактировал flash708Четверг, 22.01.2015, 22:19

 

Ответить

RAN

Дата: Четверг, 22.01.2015, 22:17 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Записать макрос. (не путать с написать).


Быть или не быть, вот в чем загвоздка!

 

Ответить

Nic70y

Дата: Четверг, 22.01.2015, 22:18 |
Сообщение № 3

Группа: Друзья

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

Замечаний:
0% ±


Excel 2010

это обязательное условие?
остальное при выполнении требования модератора.


ЮMoney 41001841029809

 

Ответить

RAN

Дата: Четверг, 22.01.2015, 22:20 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

И что вы к файлу прицепились? Пустые кончились? :) Что скачать, что создать, разницы никакой.


Быть или не быть, вот в чем загвоздка!

 

Ответить

flash708

Дата: Четверг, 22.01.2015, 22:22 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Файл приложил. там же были и макросы — мои неудачные попытки решить проблему

 

Ответить

RAN

Дата: Четверг, 22.01.2015, 22:25 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

А такой записать не судьба было? <_<
[vba]

Код

Sub Макрос3()
     Range(«A1:H7»).Select
     Selection.Find(What:=»1″, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     Range(«A1:H7»).Select
     Selection.Find(What:=»1″, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
         :=False, SearchFormat:=False).Activate
     Range(«B7»).Select
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

flash708

Дата: Четверг, 22.01.2015, 22:32 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

простите но у вас последняя строка Range(«B7»).Select то есть если поменять в ячейке B7 1 на 0 то будет выделена все равно B7
А как сделать так чтобы было например Cells (x,y).select
где раньше зараннее автоматически определено x & y

 

Ответить

flash708

Дата: Четверг, 22.01.2015, 22:40 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Спасибо, вроде получилось! Добавил строки
n = ActiveCell.Row
m = ActiveCell.Column
MsgBox (n)
MsgBox (m)

 

Ответить

RAN

Дата: Четверг, 22.01.2015, 22:46 |
Сообщение № 9

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

[vba]

Код

Sub Макрос3()
     sRow = Range(«A1:H7″).Find(What:=»1», LookIn:=xlFormulas, LookAt _
         :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
     sCol = Range(«A1:H7″).Find(What:=»1», LookIn:=xlFormulas, LookAt _
         :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
     Cells(sRow, sCol).Select
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

alex77755

Дата: Пятница, 23.01.2015, 01:48 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 362


Репутация:

64

±

Замечаний:
0% ±


Два раза можно не искать
[vba]

Код

Sub QWER()
     Set RN = Cells.Find(1, After:=Cells(Rows.Count, Columns.Count))
     If Not RN Is Nothing Then MsgBox «Строка № » & RN.Row & vbCrLf & _
     «Столбец № » & RN.Column, 64, «»
End Sub

[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru

 

Ответить

Автоматическая нумерация строк в Excel по порядку с помощью VBA

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

ручная нумерация строк

Вот так делается ручная нумерация строк

Но когда возникает необходимость делать эту процедуру часто, или ввиду обилия нескольких разделов и подразделов – ручная нумерация строк в таблице excel превращается в скучную рутинную работу. И гораздо приятнее написать макрос нумерации строк excel и наслаждаться результатом через долю секунды.

нумерация строк используя макрос vba

excel vba автоматическая нумерация строк

Работоспособный макрос нумерации строк в excel по порядку приведен ниже:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Обновить нумерацию
If ActiveCell.Column = 10 And Cells(ActiveCell.Row, ActiveCell.Column).Value = "Обновить нумерацию" And ActiveCell.Row = 2 Then
' ссылка на лист книги в котором обновляем нумерацию
Set pr = Workbooks("planero-s-avtomaticheskoj-numeraciej-strok.xlsm").Worksheets("Проекты")
i = 0 ' для работоспособности цикла
j = 1 ' номер задачи
k = 1 ' номер подзадачи
' проходим вниз по странице до тех пор, пока есть записи в ячейке "B3" или "C3"
Do While pr.Range("B3").Offset(i, 0) > 0 Or pr.Range("D3").Offset(i, 0) > 0
' если ячейка "В3"+i содержит текст
If pr.Range("B3").Offset(i, 0) > 0 Then
' нумеруем ее
pr.Range("A3").Offset(i, 0) = j
' выделяем номер жирным
pr.Range("A3").Offset(i, 0).Font.Bold = True
' увеличиваем переменную j на единицу
j = j + 1
' обнуляем номер подзадачи
k = 1
' если ячейка "B3"+i пустая, следовательно мы имеем дело с подзадачей
Else
' если ячейка "D3"+i содержит текст
If pr.Range("D3").Offset(i, 0) > 0 Then
' нумеруем ее
pr.Range("C3").Offset(i, 0) = k
' увеличиваем номер подзадачи на единицу
k = k + 1
End If
End If
' увеличиваем i на +1 чтобы проверить следующию ячейку (расположенную ниже) на наличие записи
i = i + 1
Loop
' убираем курсор с кнопки
pr.Cells(ActiveCell.Row, ActiveCell.Column - 2).Select
End If
End Sub

Первым делом привязываем запуск макроса при нажатии на кнопку «Обновить нумерацию». Далее запускаем цикл и выполняем его до тех пор, пока ячейка B3 и D3 содержит текст. При этом последовательно перемещаемся к ниже идущим ячейкам от B3 и D3, используя Offset и переменную i: .offset(i, 0). Одновременно с этим, нумеруем задачи (если B3+i содержит текст) и подзадачи (если B3+i не содержит текст, при этом содержит текст D3+i). Ну и напоследок убираем курсор с кнопки «Обновить нумерацию».

Саму экселевсую книгу с макросом автоматической нумерации можно скачать по этой ссылке. На этом все. Остались вопросы – задавайте их в комментариях. С другими кейсами по автоматизации можно ознакомиться здесь.

Комментарии 2

© планеро.ru

Последнее время на работе занималась приведением excel-файлов к виду, при котором пользователь может допустить наименьшее количество ошибок при заполнении. До этого первый и последний раз я сталкивалась с visual basic в школе, причем не применительно к Ms Excel, поэтому потребовалось некоторое время на то, чтобы понять, как делать простые и, и тем более не очень, вещи. Эта статейка может помочь людям, оказавшимся в похожей ситуации, быстрее войти в курс дела. Демо-экселька прилагается.


Основы

Самый первый вопрос, который у меня возник, после того как вкладка «Разработчик» была добавлена (подробнее тут, например) и открыт встроенный vba-редактор, это куда собственно писать код. По умолчанию в книге есть модули страниц, модуль книги и один общий модуль. Существуют также модули формы и классов, но сейчас речь не о них. Все вполне логично: обработку событий на объекты страницы пишем в соответствующий лист страницы, обработку событий для книги — в модуль книги, а общие функции для всех листов — в общий модуль. При этом имеет смысл создать еще модули для отделения функционала по смыслу.

Также сразу возникает вопрос, а как элементарно обратиться к ячейке, найти ее значение и перезаписать его. Очень просто:

‘ в ячейку А1 пишем «add note» + значение ячейки B1
Cells(1,1).Value = «add note » & Cells(1,2).Value

For Each oCell In Range(«A1:A10»).Cells
     ‘обработка 
     oCell.Value = oCell.Row ‘ присвоили номер строки   
Next 

Моим следующим вопросом было каким образом вернуть значение из функции. В vba есть два типа функций: sub и function. Разница в том, что function как раз и умеет возвращать значение, для этого в коде функции надо написать ИмяФункции = возвращаемое_значение:

Public Function insertRow()
    Dim position As Integer
    ‘…
    insertRow = position ‘возвращаемое значение

End Function

После написания нескольких функций во встроенном редакторе, меня нешуточно заинтересовало, как перенести строку кода на следующую физическую строку. Если посреди строки кода нажать enter, кроме ошибки мы ничего не добьемся. Оказывается, надо использовать «_»:

If ActiveSheet.Index = 1 _
   Or ActiveSheet.Index = 4 Then
        ‘ действия
End If

Нарочно и не придумаешь.

Помимо массивов, в VBA следует обратить внимание на коллекции. Работать с ними просто:

Dim сoll As New Collection
сoll.Add («элемент1»)‘добавляем элемент
сoll.Add («элемент2»)‘размер увеличивается динамически
‘ по умолчанию индекс начинается с 1, можно изменить
MsgBox (сoll.Item(1)) элемент1
сoll.Remove (1) ‘ удаляем первый элемент
MsgBox (сoll.Count)‘выводим размер коллекции

Чтобы когда мы творим беспредел с нашим excel-файликом посредством vba, он предательски не корчился и напоказ не дергал строками и столбцами перед пользователем (например, при удалении и скрытии интервалов), можно отключать прорисовку:

Application.ScreenUpdating = False ‘ значение True включает

Автоматическая нумерация строк таблицы

Одной из первых моих мелких подзадач стала нумерация строк таблицы. Можно, конечно, при добавлении строки вставлять номер функцией, но хотелось по возможности чтобы это происходило само собой. Как выяснилось, нумеровать ячейки можно формулой =СТРОКА(ячейка), которая возвращает номер строки ячейки-параметра. Например, формула =СТРОКА(А1), вставленная в произвольную ячейку, выведет 1, строка =СТРОКА(А3) — цифру 3. 

Таким образом, при копировании формулы в следующую строку нумерация таблицы продолжится:

‘проставляем формулу нумерации

Range(«A7»).FormulaR1C1 = Range(«A6»).FormulaR1C1 

Если нужно также копировать формат ячейки, используется метод AutoFill.

Тут может возникнуть одна неприятность. Пусть наша последовательность ячеек с формулами начинается  не с первой строки, а например, с третьей. Тогда в третьей строке будет формула =Строка(А1), во второй — =Строка(А2), в 10 — =Строка(А10) и т.д. Тогда при удалении строки 6 формула в теперешней строке 9 выдаст ошибку «неверная ссылка». 

Это потому, что формула в строке А9 крайне смущена тем, что ссылается на удаленную ячейку. Поэтому если строки в таблице буду удаляться и добавляться, лучше сделать ссылку на ячейки другой страницы (=СТРОКА(Лист2!А1)).

Кнопки вставки и удаления строк

Также неочевидными оказались некоторые нюансы при вставке и удалении строк в таблице по нажатию на соответствующие кнопки (под таблицей будем понимать визуально выделенный  диапазон ячеек, содержащий связанные по смыслу данные). Например, у нас на листе есть две таблицы, у каждой есть кнопка «добавить строку». При добавлении для каждой строки появляется кнопка «удалить».

Само по себе добавление и удаление по имени кнопки сложности не представляет:

Private Sub InsertButton1_Click(position as Integer)
   ‘вставка строки перед строкой с номером position
   Rows(position).Insert
End Sub


Private Sub DeleteButton1_Click()
   Dim position as Integer
   ‘ ищем номер строки кнопки удаления
   position = _            ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row  
   ‘ удаление кнопки
   ActiveSheet.Shapes(Application.Caller).Delete 
   ‘ удаление строки с номером position
   Rows(position).Delete
End Sub

Для нахождения позиции первой строки таблицы будем использовать именованные ячейки.

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

Нам нужен уникальный идентификатор. Чтобы не заниматься генерацией уникальных хэшей, можно, например, использовать имяКнопки_номерСтроки_текущаяДата. 

newButtonId = «delButton» & insertedRowNumber & Now()

Маловероятно, что пользователь создаст за секунду более одной строки (в комплекте с кнопкой ее удаления) с одинаковым начальным номером строки.

Проверка листа на правильное заполнение 

Задача состоит в том, чтобы при сохранении файла проверять содержимое ячеек на всех листах и если какие-то помеченные как обязательные остались незаполненными, выдавать предупреждение пользователю. Для визуального выделения в зависимости от результата проверки содержимого ячеек на соответствие требованиям в excel можно использовать условное форматирование. Казалось бы, все просто: если мы используем условное форматирование и незаполненные ячейки (или неправильно заполненные, которые мы не смогли проверить при вводе с помощью меню «проверка данных») подкрашиваем, например, красным, то при сохранении все что нам нужно сделать — пройтись по всем ячейкам и проверить их цвет.

Но проблема вот в чем — если мы берем colorIndex или color ячейки, нам возвращается исходный цвет, не тот, на который он изменился при помощи условного форматирования.

В голову пришло два слегка костыльных способа решения (и честно говоря, если судить по форумам с обсуждением подобных проблем, кажется, что применительно к Excel по-другому их и не решишь).

Первый способ: в одном столбце, напротив каждой строки таблицы, формулой вычисляется, правильно ли заполнена строка. Тогда, проходясь по этому столбцу, мы можем сказать, в какой строке проблема. А при помощи условного форматирования проблемные ячейки могут подсвечиваться красным. Этого достаточно, если не надо точно знать, в какой ячейке проблема. При необходимости можно дальше обрабатывать эту строку по ячейкам. Способ хорош, если разные строки проверяются на разные условия (даже в рамках одной таблицы).

usedRows = ActiveSheet.UsedRange.Rows.Count
usedCols = ActiveSheet.UsedRange.Columns.Count
‘ переводим последний столбец из цифры в букву
usedColsInNumb = Split(Cells(1, usedCols).Address, «$»)(1)

For Each cell In ActiveSheet.Range(«A1:» & usedColsInNumb & usedRows).Cells

   ‘ если колонка с результатом формулы проверки заполнена

   If Len(cell.Value) > 0 Then 

       ‘ если строка неправильно заполнена

       If cell.Value = «ЛОЖЬ» Then 

            ‘ сохраняем в массив, отражающий правильность 
            ‘ заполнения каждой строки
            notFilled(cell.Row) = True 

       End If

   End If

Next

Второй способ: изначально ячейки, значения которых необходимо проверять, выделять цветом. Далее, проходясь по всем ячейкам, искать выделенные и проверять на соответствие условиям. Тут также при помощи условного форматирования проблемные ячейки могут подсвечиваться красным. Этот способ проще, если все ячейки проверяем на одни и те же условия, иначе надо вводить несколько цветов или как-то иначе метить ячейки. Например, при помощи именованных диапазонов для каждой области с одинаковой проверкой.

For Each cell In Sheets(i).Range(«A2:» & usedColsInNumb & usedRows).Cells

    ‘ проверяем выделенные цветом ячейки на пустоту

    If cell.Interior.Color = Sheets(5).Cells(1, 6).Interior.Color   And Len(cell.Value) = 0 Then

        ‘ обработка незаполненной ячейки

    End If

Next

Тут надо учитывать, что при использовании объединенных ячеек Excel искренне полагает, что содержимое находится в первой из них. Поэтому проверять на пустоту нужно только первую  ячейку из диапазона.

‘ ищем смежные с текущей ячейки в виде интервала, eg «A1:B10»

mergedInterv = Cells(cell.Row, cell.Column).MergeArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)

‘ разбиваем адрес на первую и последнюю из смежных

splitAr = Split(mergedInt, «:»)

‘ если текущая ячейка входит в объединенные

If UBound(splitAr) = 1 Then 

      splitAr2 = Split(cell.Address, «$»)

      ‘ если первая из диапазона смежных равна текущей ячейке

      If splitAr(0) = splitAr2(1) & splitAr2(2) Then

          ‘ обработка незаполненной смежной ячейки

      End If

Else 

    ‘ если текущая ячейка не является смежной

End If

При нахождении последней используемой строки или столбца следует учесть, что если вы каким-то образом успели «поиспользовать» интервал (пусть даже выделили и очистили формат), то он все равно считается использованным. Придется удалить эти строки и столбцы.

Прилагаю демо-эксельку. Тестировалась в русифицированном MS Excel 2007.

Инструмент нумерации строк кода — производит автоматическую нумерацию строк кода

Данный инструмент используется для отслеживания номера строки кода, в которой возникла ошибка, с последующей записью её в LOG – файл. Без нумерации строк кода отследить место возникновения ошибки и ее трассирование не возможно.

Рекомендуется использовать совместно с инструментом – “ЛОГИРОВАНИЕ

Расстановка/удаление нумерации строк кода:

    • автоматическое удаление нумерации строк кода
    • автоматическая нумерация строк кода

Рекомендация
После использования инструмента производите проверку работоспособности вашего кода, инструментом: Debug -> Compile VBAProject. Который расположен на панели управления редактора VBE

Нумерация строк кода

Нумерация строк кода в редакторе кода VBE

Пример использования:

   Public Sub NumberingExample(ByVal url_str As String)
2:     On Error GoTo ErrorHandler
3:     '< - Ваш код процедуры - >
4:     Exit Sub
ErrorHandler:
6:     Select Case Err
7:         Case Else:
8:         Call MsgBox("Произошла ошибкав NumberingExample" & "в строке " & Erl, _
9: vbOKOnly + vbCritical, "Ошибка в NumberingExample")
10: '< - оператор Erl, выводит номер строки с ошибкой без нумерации строк не работает 11: Call WriteErrorLog("NumberingExample") '< - инструмент "ЛОГИРОВАНИЕ" 12: End Select 13: Err.Clear 14:End Sub

Понравилась статья? Поделить с друзьями:
  • Excel vba макрос на открытие книги
  • Excel vba макрос который отключает макрос
  • Excel vba макрос закрыть книгу
  • Excel vba личная книга макросов
  • Excel vba левые символы