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

Обновлено: 20.11.2024

В строке меню выберите Инструменты > Параметры. Разверните узел «Текстовый редактор», а затем выберите используемый язык или «Все языки», чтобы включить нумерацию строк на всех языках. Установите флажок Номера строк.

Как использовать оператор GOTO в Excel VBA?

[Ссылка]: это не что иное, как указанная ссылка на ячейку. Если ссылка не указана по умолчанию, она приведет вас к последнему использовавшемуся диапазону ячеек. [Прокрутка]: это логическое утверждение ИСТИНА или ЛОЖЬ. Если значение TRUE, окно будет прокручиваться, если значение FALSE, окно не будет прокручиваться.

Как написать макрос VBA?

VBA — макросы Excel. Шаг 1. Сначала включите меню «Разработчик» в Excel 20XX. Шаг 2 — Перейдите на вкладку «Настроить ленту» и установите флажок «Разработчик». Шаг 3. В строке меню появится лента «Разработчик». Шаг 4. Нажмите кнопку «Visual Basic», чтобы открыть редактор VBA. Шаг 5. Начните писать сценарий, добавив кнопку.

Какое использование макросов VBA в Excel?

Что такое макросы VBA в Excel? Макросы VBA используют приложение Visual Basic в Excel для создания пользовательских функций и ускорения ручных задач за счет создания автоматизированных процессов. Кроме того, VBA можно использовать для доступа к интерфейсу прикладного программирования Windows (API).

Как вы используете переменные в уравнении VBA?

Код VBA для использования переменной в ячейке FormulaSub copytct()Dim i как целое число, r как целое число, x как целое число, c как целое число, форма как строка. + 3.r = 1.For i = x To (x + 108) Step 1.form = ""=[Sheet1.xls]Sheet1! Р" & р & "C1″"

Как написать диапазон в VBA?

Существуют различные способы обозначения ячеек и диапазонов с помощью комбинации знаков препинания. Общий синтаксис ссылки на ячейки и диапазоны — Range(Cell1, [Cell2]). Затем значения присваиваются с помощью свойства Value (. Value) или с помощью символа =.

Как сослаться на значение ячейки в Excel VBA?

Если объект Excel VBA Range, на который вы хотите сослаться, представляет собой одну ячейку, используйте простой синтаксис «Range(«Cell»)». Например, если вы хотите сделать ссылку на одну ячейку, такую ​​как A1, введите «Диапазон («A1»)».

Пожалуйста, помогите: как включить номера строк в редакторе кода Excel VBA? Я использую версию Excel 2013.

Он уже есть на ленте под справкой. Когда вы перемещаете курсор в редакторе, он показывает номер строки, в которой вы находитесь.

2 ответа 2

Вот мой код для добавления номеров строк в VBE IDE. Это улучшение решения, представленного здесь Excel MVP mikerickson. Я работал над этим, потому что в некоторых редких случаях, которые я уже встречал, VBE не может войти в режим отладки, например, когда у вас в коде есть метод .ReplaceLine. Действительно, вы не можете войти в режим отладки после его выполнения, поэтому Erl может быть полезен для отладки (вместо Debug.Print). Я добавил несколько функций, таких как:

  • возможность добавлять номера строк в виде меток: 10: Dim foo как bar или отдельные числа, отделенные от кода табуляцией: 10 Dim foo как bar
  • возможность добавлять номера строк к операторам конца процедуры и сопоставлять отступ строк объявления процедуры со строкой оператора завершения после нумерации. Или нет.
  • возможность добавления номеров строк к пустым строкам или нет
  • [WIP] возможность добавлять номера строк к определенной процедуре в модуле
  • [WIP] сопоставить все отступы строк кода с номерами строк, чтобы они соответствовали отступу последней строки с отступом. Если последняя строка имеет значение 200: End Sub , отступ строки 30: With ActiveSheet будет изменен на 30: ActiveSheet
  • [WIP] добавление команды VBE IDE для прямого вызова текущего модуля/процедуры в качестве параметра

Вы можете совершать звонки следующим образом:

И в качестве напоминания, вот некоторые правила компиляции о номерах строк:

  • не допускается перед оператором объявления подпрограммы/функции
  • запрещено вне процесса
  • не допускается в строке, следующей за символом продолжения строки "_" (подчеркивание)
  • не разрешается иметь более одной метки/номера строки на строку кода ~~> Существующие метки, отличные от номеров строк, должны быть проверены, в противном случае возникнет ошибка компиляции при попытке указать номер строки.
  • не разрешено использовать символы, которые уже имеют специальное значение VBA ~~> Допустимые символы: [aZ], 8, é, è, ô, ù, €, £, § и даже только ":" !
  • компилятор удалит любой пробел перед меткой ~~> Таким образом, если есть метка, первый символ строки является первым символом метки, это не может быть пробел.
  • добавление номера строки двоеточием приведет к вставке пробела между ":" и первым следующим символом, если его нет
  • при добавлении номера строки с помощью табуляции/пробела должен быть хотя бы один пробел между последней цифрой и первым следующим символом, компилятор не добавит его, как это делается для метки с двоеточием-разделителем
  • метод .ReplaceLine переопределит правила компиляции, не отображая никаких ошибок компиляции, как это происходит в режиме разработки при выборе новой строки или при повторном запуске компиляции вручную
  • компилятор «быстрее, чем среда/система VBA»: например, сразу после того, как номер строки с двоеточием и без пробела был вставлен с помощью .ReplaceLine, если для получения новой строки вызывается свойство .Lines, пробел (между двоеточием и первым символом строки) уже добавлен в эту строку !
  • невозможно войти в режим отладки после вызова .ReplaceLine (изнутри или за пределами редактируемого модуля), пока код не запустится и выполнение не будет сброшено.

Что бы это ни стоило, другой Microsoft Excel MVP категорически не согласен с использованием Erl и номеров строк в VBA. В этом списке точек отсутствует несколько предостережений: 1) Erl имеет целочисленное разрешение, но длинные номера строк вполне допустимы, что делает Erl неработающим по определению (какая строка равна -12345?), и 2) Erl возвращает последнюю строку. номер, который был обнаружен, что означает, что вам нужны номера строк везде и код, который выглядит как взрыв Commodore-64 из прошлого, чтобы использовать его.

Если у вас есть пронумерованная строка, которая выполняется успешно, за которой следует ненумерованная строка, выдающая ошибку, Erl вернет номер строки, которая была успешно выполнена. Таким образом, чтобы Erl «работал», вам нужно, чтобы каждая логическая строка имела номер строки, который читается как 1980 ;-)

ах, хорошо, вы правы, это не очень хороший обходной путь, я все равно никогда не использовал его нигде, ни на Commodore-64 ;)

Краткий ответ для Excel 2016, еще не пробовал в 2013.

Выполнить один раз:

  1. Вставьте большой код из последнего модуля 2 в этот ответ в своей рабочей тетради.
  2. Вставьте код последнего модуля 3 в этот ответ в свою книгу.
  3. Вставьте код последнего модуля 4 в этот ответ в свою книгу.
  4. Затем вставьте строку Global allow_for_line_addition As String, чтобы вы могли автоматически добавлять номера строк выше/в первой строке каждого модуля.
  5. Удалите все пустые строки в конце каждого модуля (чтобы потеря не вводилась после последнего end sub , end function или End Property модуля).
  6. В редакторе VBA, не выполняя код и не находясь в режиме «паузы»: щелкните инструменты>ссылки>отметьте: `Microsoft Visual Basic for Applications Extensibility 5.3"

Выполняйте каждый раз, когда вы изменяете свой код:

  1. *Запустите код для последнего модуля Module3, чтобы удалить номера строк для всех модулей в вашей книге.
  2. *Запустите код для последнего модуля Module4, чтобы добавить номера строк ко всем модулям в вашей книге.

(*потому что иногда вы получаете сообщение об ошибке, если вырезаете строки или перемещаете их (например, помещаете строку 2440: над строкой 2303: ). При удалении и повторном добавлении их нумерация строк снова автоматически становится правильной)

Подробный ответ (включая этапы обучения и попытки) — мне было непросто реализовать ответ hymced, поэтому я задокументировал шаги, необходимые для добавления номеров строк в модуль в редакторе кода VBA (*и удаления их снова ). Я выполнил следующие шаги, чтобы заставить его работать.

  1. Из этой ссылки я узнал, что vbcomponent может быть модулем.
  2. Я скопировал первый полученный код во временный Module2, а второй код, заданный hymced, во временный Module3.

Затем изменил первую строку второго кода во временном Module3 на:

Я получил ошибку в строке:

Итак, я прочитал, что мне пришлось включить библиотеку VBIDE.

Поэтому я остановил код, щелкнул инструменты>ссылки и не смог найти библиотеку VBIDE.

На этом форуме я обнаружил, что VBIDE включается путем добавления ссылки на расширяемую библиотеку VBA:

Щелкните Tools-References в VBE, прокрутите вниз и отметьте запись для Microsoft Visual Basic for Applications Extensibility 5.3.

Поэтому после этого первая ошибка исчезла, и она не выделяла ни одной строки, но выдавала ошибку «Недопустимый вызов процедуры или аргумент».

Поскольку я до сих пор не уверен в vbCompName, я подумал, что ему, возможно, потребуется знать подпрограмму, а не модуль, поэтому я попытался изменить второй код во временном модуле Module3 на:

Это выделило строку:

говорят: нижний индекс вне допустимого диапазона . (Поэтому я также пробовал: Module1.learn и Module1:learn , что дало индекс вне диапазона -error.

Как оказалось,

это правильный способ вызвать замещающую подпрограмму, если подпрограмма, которую вы хотите предоставить с номерами строк, находится в модуле с именем Module1 .Возникает первая ошибка, но она добавляет номера строк в код (за исключением первой строки, содержащей sub . и последней строки, содержащей end sub .Tested в Module1 с именем sub Learn() книги excel 2016 с именем Book1.xlsm . Для полноты обучение состоит из:

Однако на обратном пути, удалив номера строк, он выдал ошибку, потому что запрашивает .lines(0,1) procName в Sub AddLineNumbers.

Поэтому я изменил его, чтобы исключить .lines(0,1), поместив измененный код ниже в окончательный Module2 :

При вызове замены в sublearn() кодом ниже, вставленным во временный модуль3:

Теперь это сработало (как добавление, так и удаление номеров строк, со всеми 4 методами вызова добавления/удаления номеров строк, вставленных во временный модуль2 для одной подпрограммы в модуле (модуль1 в примере). Поэтому я попытался поместите 2 подпрограммы друг за другом в одном модуле. В этом случае код не изменил номера строк добавления для второй подписки.

Поэтому я добавил следующую строку выше Module1 :

Сделка Module1 выглядит следующим образом:

Теперь он добавил номера строк ко всему модулю, но не удалил номера строк из всего модуля, поэтому я также отредактировал код удаления ответа hymced и уже поместил его в длинный код ** финал** Модуль2`.

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

Чтобы добавить номера строк ко всем модулям в книге, сохраните длинный код в окончательном модуле 2, как я его изменил, и замените код временного модуля 3 на окончательный модуль 3:

И добавьте следующий код в окончательный Module4 :

где вы можете заменить "Book1.xlsm" на имя вашей собственной книги или на эту книгу (обратите внимание на отсутствие "") или наоборот.

Этот форум перенесен в раздел вопросов и ответов Майкрософт. Посетите Microsoft Q&A, чтобы публиковать новые вопросы.

Отвечает:

Вопрос

На стандартной панели инструментов в окне редактора VBA Office 2007 есть потенциально полезное окно, в котором указывается номер строки и номер столбца позиции курсора в любом модуле. Однако я не могу найти способ использовать его для перемещения курсора в нужную мне позицию. Есть ли такая функция? Я ничего не могу найти ни на одной из панелей инструментов, но есть ли что-то, что могло бы попасть в ближайшее окно? Я пробовал «GoTo 123» и вариации на эту тему без успеха, хотя окно «Справка» в операторе GoTo указывает, что это должно работать. В сообщении об ошибке говорится, что это «Недействительно в панели «Интерпретация».

В частности, это было бы очень полезно при обсуждении кода по телефону, когда было бы удобно иметь возможность направить своего корреспондента на определенную строку в процедуре, не говоря "это примерно на полпути вниз" или что-то подобное расплывчатое фраза.

Ответы

Нет встроенной функции для перехода к определенному номеру модуля/строки, хотя можно было бы написать утилиту для этого, но, вероятно, это того стоит.

Конечно, есть и другие способы: попросить пользователя активировать правильный модуль и щелкнуть имя процедуры в правом верхнем углу раскрывающегося списка. Если процедура находится в обычном модуле активной книги, обычно вы можете просто ввести имя процедуры в поле «Имя» (слева от панели ввода Excel). Откроется VBE, а также модуль с прокруткой процедуры вверх и курсором в первой строке

*- Для тех, кому еще интересно --*

Все ответы

Нет встроенной функции для перехода к определенному номеру модуля/строки, хотя можно было бы написать утилиту для этого, но, вероятно, это того стоит.

Конечно, есть и другие способы: попросить пользователя активировать правильный модуль и щелкнуть имя процедуры в правом верхнем углу раскрывающегося списка. Если процедура находится в обычном модуле активной книги, обычно вы можете просто ввести имя процедуры в поле «Имя» (слева от панели ввода Excel). Откроется VBE, а также модуль с прокруткой процедуры вверх и курсором в первой строке

Вы можете добавить номера строк с помощью приведенного ниже кода, который действует на активную книгу, а затем вы можете использовать Ctrl F и искать, скажем, 101: (хотя 101: может быть не помечено)

По крайней мере, для телефонных разговоров это будет полезно.

Sub AddLineNumbers()
Dim i As Long, j As Long, lineN As Long
Dim procName As String
Dim startOfProceedure As Long
Dim lengthOfProceedure As Long
Dim lengthOfProceedure As Long
>Затемнить VBComp как VBComponent

Для каждого VBComp в ActiveWorkbook.VBProject.VBComponents
с VBComp.CodeModule
For i = 1 To .CountOfLines
procName = .ProcOfLine(i, vbext_pk_Proc)
If procName <> vbNullString Then
startOfProceedure = .ProcStartLine(procName, vbext_pk_Proc)
If i = startOfProceedure Then
lengthOfProceedure = .ProcCountLines(procName, vbext_pk_Proc)
For j = 2 To lengthOfProceedure - 2
lineN = startOfProceedure + j
.ReplaceLine lineN, CStr(lineN) & ":" & RemoveOneLineNumber(.Lines(lineN, 1))
Следующий j
End If < br />Конец, если
Следующий я
Конец с
Следующий VBComp
Конец суб


Sub RemoveLineNumbers()
Размерьте i As Long
Размерьте VBComp As VBComponent

Для каждого VBComp в ActiveWorkbook.VBProject.VBComponents
С VBComp.CodeModule
Для i = 1 To .CountOfLines
.ReplaceLine i, RemoveOneLineNumber(.Lines(i, 1)) < br />Далее
Конец с
Следующий VBComp
Конец суб

Мы уже обсуждали роль VBA и его полезность в Excel. VBA — это устаревшая программа, которую Microsoft изначально использовала для написания своих программ для операционной системы Windows.

В современном мире очень полезно автоматизировать наши действия в программах Office.

В приведенном ниже примере мы покажем, как использовать VBA для получения номеров строк.

Написание кода, применимого в рабочей тетради

Чтобы ввести код в VBA, нам нужно перейти на вкладку "Разработчик" >> Код >> Visual Basic:

После того, как мы щелкнем по нему, в появившемся всплывающем окне нам нужно найти рабочую книгу, в которой мы будем хранить наш код, а затем щелкнуть правой кнопкой мыши левое окно и затем перейти к Вставить >> Модуль:< /p>

Нам будет представлено чистое окно, в котором мы напишем наш код:

Проще всего выполнить описанные выше действия, нажав комбинацию клавиш ALT и F11.

Получить номер строки с помощью VBA с изменением ячейки

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

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

Для нашего примера мы будем использовать следующую таблицу фильмов Marvel с указанием даты выхода в США, валового дохода от проката и бюджета:

Если мы хотим объявить формулы, которые будут применяться к определенному листу, нам нужно перейти на этот лист в нашем модуле, а затем выбрать один из различных вариантов в раскрывающемся списке справа:

Чтобы получить номер строки в VBA всякий раз, когда мы меняем положение нашего курсора, мы будем вводить следующую формулу:

Первая строка в этой формуле определяет частную часть, означающую, что ее могут вызывать только процедуры, хранящиеся в этом модуле VBA.

Worksheet_SelectionChange означает, что наша формула будет активирована при любом изменении на нашем листе. ByVal объявляет нашу переменную Target как Range.

Стоит отметить, что эти формулы довольно общие.

Если бы мы выбрали TableUpdate из раскрывающегося списка, представленного на рисунке выше, был бы создан следующий шаблон формулы:

В следующей строке мы определяем переменную rownum как целое число, а затем определяем ее как равную строке нашей активной ячейки.

Затем мы представляем окно сообщения, в котором говорится, что пользователь в настоящее время находится в строке, номер которой равен строке, определенной выше.

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

Получить номер строки с помощью VBA с полем ввода

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

Если мы хотим узнать номер строки с помощью VBA на основе определенного поля в нашей таблице (в следующем примере имени нашего фильма), мы можем использовать этот код:

Мы создадим новый модуль для этого кода и сохраним исходное имя (в нашем случае Модуль 1):

Наш код делает следующее:

  1. Объявите две переменные: movie и row,
  2. Установите для нашей переменной movie значение, равное значению в поле ввода (пользователь введет его при выполнении кода).
  3. Мы устанавливаем переменную строки в ячейку, в которой находится фильм.
  4. Создайте функцию ЕСЛИ, которая будет проверять, существует ли фильм в InputBox в нашей таблице. Если нет, то показываем сообщение «Не найдено». Если да, то мы показываем строку активной строки (строка, в которой находится наш фильм).

В настоящее время этот код «скрыт» от нашего пользователя, поэтому наш первый шаг — сделать его видимым на нашей таблице.

Для этого мы перейдем на вкладку «Разработчик» >> «Элементы управления» >> «Вставить» >> «Элементы управления формой». Из этих вариантов мы выберем первый вариант:

Когда мы щелкнем по нему, мы получим знак плюса, который мы можем расширить (перетащить). Как только мы определим его размеры, появится следующее всплывающее окно:

Теперь нам нужно назначить макрос этой кнопке. Для этого нам достаточно нажать на наш макрос (First_Row_Address). Затем мы нажмем OK.

Теперь у нас будет кнопка, для которой мы изменим имя на «Найти строку»:

Теперь всякий раз, когда пользователь нажимает эту кнопку, код будет выполняться. Например, мы нажмем на него, и появится следующее сообщение:

Мы выберем фильм: «Железный человек 3». Мы знаем, что этот фильм находится в строке номер 19, поэтому в сообщении нашего кода должен отображаться этот номер. Как только мы нажмем OK, будет показан этот номер:

Конечно, мы всегда можем изменить наше сообщение, чтобы оно выглядело примерно так: «Строка вашего фильма — это номер…» или что-то в этом роде, как мы сделали в примере выше.

Читайте также: