Процедура не определена в excel

VBA is hosted in Excel, but it’s completely distinct: VBA doesn’t know anything about Excel’s worksheet functions. At least, not natively.

So, Substitute isn’t defined anywhere — same for VLookup, and many other worksheet functions. Some VBA functions have the same name (or a similar one) as Excel worksheet functions, and behave differently.

The VBA standard library does have a Strings module that exposes a number of specialized String functions (several of which also exist as worksheet functions, e.g. =LEFT vs Left and Left$).

As Tom correctly specifies, the VBA standard library function that’s equivalent to Excel’s Substitute function, is Replace — a function that’s defined in the VBA.Strings module, which you can explore by pressing F2 to bring up the VBE’s Object Browser:

VBE object browser showing definition for VBA.Strings.Replace

Since these functions are all globally-scoped, you don’t have to fully qualify them; that’s why & how you can legally write Debug.Print Replace(string1, string2). But know that you could always type VBA. and get IntelliSense to list what functions are available — VBA.Strings.Replace works, as does VBA.Replace, or just Replace:

Public Function IPFix(ByVal IP As String) As String
    IPFix = VBA.Strings.Replace(VBA.Strings.Replace(VBA.Strings.Replace("@." & Trim(IP), ".0", "."), ".0", "."), "@.", "")
End Function

Now that’s wordy. The benefit though, is that now if your VBA project defines a Replace function, places that invoke VBA.Strings.Replace or VBA.Replace, will still be invoking that function instead of your VBAProject.Module1.Replace custom function — because an identifier reference in VBA is always resolved by the compiler, starting with the smallest accessible scope: so a custom function can exist in a custom module and «shadow» or «hide» a VBA standard library function (or any other function defined in any other referenced type library).

Lasty, note that for the times you do need to invoke an actual worksheet function, you can do it from the Excel object model — here using a With block to reduce the verbiage:

Public Function IPFix(ByVal IP As String) As String
    With Application.WorksheetFunction
        IPFix = .Substitute(.Substitute(.Substitute("@." & Trim(IP), ".0", "."), ".0", "."), "@.", "")
    End With
End Function

Worksheet functions invoked like this will work exactly like their actual-worksheet counterparts; you can use Index, Match, VLookup, and a lot of other worksheet functions that way, with an early-bound standard VBA member call that will raise a standard VBA runtime error given invalid arguments.

You can also invoke them late-bound, directly against the Application object — in which case invalid arguments won’t raise an error, but return one — just like they do in actual worksheets (e.g. #VALUE!) — if you want to return that worksheet error value, your function needs to return a Variant (implicit like you have, or explicit as follows), because an Error is a VBA data type that can’t be coerced into a String value, so the return assignment would throw a type mismatch error:

Public Function IPFix(ByVal IP As String) As Variant
    With Application
        IPFix = .Substitute(.Substitute(.Substitute("@." & Trim(IP), ".0", "."), ".0", "."), "@.", "")
    End With
End Function

Note that because these calls are late-bound, they are only resolved at run-time, which means you must be very careful with typos; you also don’t get any IntelliSense or «parameter quick-info» to help as you type it.

Skip to content

Почему пользовательская функция не работает: проблемы и решения

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

Вот о каких проблемах мы поговорим:

  • Почему не пересчитывается пользовательская функция?
  • Как создать функцию, которая всегда пересчитывается
  • Почему пользовательской функции нет в списке?
  • Не отображается подсказка

Почему не пересчитывается пользовательская функция?

Excel не пересчитывает автоматически все формулы в рабочей книге или на листе. Если вы изменили какую-то ячейку в таблице, то пересчитываются только формулы, которые на нее ссылаются. Excel знает, что изменить результат могут только ячейки, которые указаны в аргументах формулы. Следовательно, изменения в этих ячейках – единственное, на что Excel обращает внимание при принятии решения о необходимости пересчета.

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

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

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

Чтобы решить эту проблему, вам просто нужно использовать оператор Application.Volatile. Прочтите следующую главу, чтобы получить пошаговые инструкции по его применению.

Как создаются волатильные и не волатильные функции. 

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

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

Для этого вы создали пользовательскую функцию:

Function WorkbookName() As String
WorkbookName = ThisWorkbook.Name
End Function

Вы записали  =WorkbookName() в ячейку и получили там имя файла. Но вот вы решили переименовать файл и сохранили его под другим именем. И вдруг видите, что значение в ячейке не изменилось! Там по-прежнему старое имя файла, которое уже не существует.

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

Для пересчета всех формул в файле вам необходимо использовать комбинацию клавиш CTRL+ALT+F9.

Как решить эту проблему, чтобы лишний раз не нажимать клавиши?

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

Application.Volatile 

То есть, ваш код будет выглядеть так:

Function WorkbookName() As String
Application.Volatile 
WorkbookName = ThisWorkbook.Name
End Function

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

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

Поэтому рекомендую применять волатильность только там, где это действительно необходимо.

Почему пользовательской функции нет в списке?

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

Вы можете видеть такой пример на скриншоте ниже.

Однако, это происходит не всегда. Какие ошибки могут стать причиной того, что вы не видите вашу функцию в списке?

Если у вас Excel 2003-2007, то пользовательская функция никогда не появляется в выпадающем списке. Там вы можете увидеть только стандартные функции.

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

Пользовательская функция должна находиться в стандартном модуле VBA. Что это означает?

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

Но иногда случается, что новый модуль не был создан.

На скриншоте ниже вы видите, что код находится в таких модулях, как ThisWorkbook или Sheet1.

Нельзя размещать настраиваемую функцию в области кода рабочего листа или рабочей книги. Эту ошибку вы и видите на скриншоте ниже.

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

Не отображается подсказка для пользовательской функции

Еще одна проблема заключается в том, что при вводе пользовательской функции не отображается подсказка. Когда мы используем стандартную функцию, то всегда видим всплывающую подсказку для неё и для её аргументов.

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

Для этого я предлагаю дополнительно использовать метод Application.MacroOptions. Он поможет вам показать описание не только функции, но и каждого её аргумента в окне Мастера. Это окно вы видите, когда нажимаете кнопку fx в строке формул.

Давайте попробуем создать такую справку.

Ранее мы с вами рассматривали настраиваемую функцию GetMaxBetween(). Она находит максимальное число в указанном интервале и использует три аргумента: диапазон числовых значений, а также максимальное и минимальное значение для поиска. 

Добавим в нее описание и справочную информацию. Для этого нужно создать и запустить команду Application.MacroOptions.

Для GetMaxBetween вы можете выполнить следующую команду:

Sub RegisterUDF()
Dim strFuncName As String   ' имя функции, которую регистрируем
Dim strDescr As String   'описание для самой функции
Dim strArgs() As String ' описание для аргументов
    'Регистрируем функцию GetMaxBetween 
    ReDim strArgs(1 To 3) ' номер аргумента (от 1 до 3)
    strFuncName = "GetMaxBetween"
    strDescr = "Максимальное значение в указанном диапазоне"
    strArgs(1) = "Диапазон ячеек"
    strArgs(2) = "Нижняя граница интервала"
    strArgs(3) = "Верхняя граница интервала"
    Application.MacroOptions Macro:=strFuncName, _
                             Description:=strDescr, _
                             ArgumentDescriptions:=strArgs, _
                             Category:="Определенные пользователем"
End Sub

или

Sub RegisterUDF()
    Application.MacroOptions Macro:="GetMaxBetween", _
        Description:= "Максимальное значение в указанном диапазоне", _
        Category:= "Определенные пользователем", _
        ArgumentDescriptions:=Array( _
            "Диапазон ячеек", _
            "Нижняя граница интервала", _
            "Верхняя граница интервала")
End Sub

Переменная strFuncName — это имя. strDescr —описание. В переменных strArgs записаны подсказки для каждого аргумента.

Вы спросите, для чего нужен четвертый аргумент  Application.MacroOptions? Этот необязательный аргумент называется Category и указывает на категорию функций Excel, в которую будет помещена наша пользовательская функция GetMaxBetween(). Вы можете присвоить ему имя любой из существующих категорий: Математические, Статистические, Логические и т.д. Можно указать имя новой категории, в которую вы будете помещать созданные вами макросы. Если же не использовать аргумент Category, то она будет автоматически помещена в раздел «Определенные пользователем».

Вставьте код в окно модуля, как показано на скриншоте ниже:

Затем нажмите кнопку “Run”.

Команда выполнит все настройки для использования кнопки fx с вашей функцией GetMaxBetween().

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

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

После этого вызовите Мастер при помощи кнопки fx.

Чтобы открыть Мастер функций, вы также можете использовать комбинацию клавиш CTRL + A.

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

Если вы захотите поменять текст этих подсказок, в коде RegisterUDF() измените значения переменных strDescr  и strArgs. Затем снова выполните команду RegisterUDF().

Если вы захотите отменить все сделанные настройки и очистить описание, выполните этот код:

Sub UnregisterUDF()
    Application.MacroOptions Macro:="GetMaxBetween", _
Description:=Empty, ArgumentDescriptions:= Empty, Category:=Empty
End Sub

Есть еще один способ получить подсказку при вводе пользовательской функции.

Введите название функции и затем нажмете комбинацию CTRL+SHIFT+A :

=GetMaxBetween( + CTRL + Shift + A

Вы увидите список всех аргументов функции:

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

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

Единственным доступным решением в настоящее время является  Excel-DNA IntelliSense extension. Более подробную информацию вы можете найти по этой ссылке.

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

Сумма по цвету и подсчёт по цвету в Excel В этой статье вы узнаете, как посчитать ячейки по цвету и получить сумму по цвету ячеек в Excel. Эти решения работают как для окрашенных вручную, так и с условным форматированием. Если…
Проверка данных с помощью регулярных выражений В этом руководстве показано, как выполнять проверку данных в Excel с помощью регулярных выражений и пользовательской функции RegexMatch. Когда дело доходит до ограничения пользовательского ввода на листах Excel, проверка данных очень полезна. Хотите…
Поиск и замена в Excel с помощью регулярных выражений В этом руководстве показано, как быстро добавить пользовательскую функцию в свои рабочие книги, чтобы вы могли использовать регулярные выражения для замены текстовых строк в Excel. Когда дело доходит до замены…
Как извлечь строку из текста при помощи регулярных выражений В этом руководстве вы узнаете, как использовать регулярные выражения в Excel для поиска и извлечения части текста, соответствующего заданному шаблону. Microsoft Excel предоставляет ряд функций для извлечения текста из ячеек. Эти функции…
4 способа отладки пользовательской функции Как правильно создавать пользовательские функции и где нужно размещать их код, мы подробно рассмотрели ранее в этой статье.  Чтобы решить проблемы при создании пользовательской функции, вам скорее всего придется выполнить…
Как создать пользовательскую функцию? В решении многих задач обычные функции Excel не всегда могут помочь. Если существующих функций недостаточно, Excel позволяет добавить новые настраиваемые пользовательские функции (UDF). Они делают вашу работу легче. Мы расскажем,…

Thread: Solved: Compile error: sub or function not defined

Thread Tools
Display
  • Linear Mode
  • Switch to Hybrid Mode
  • Switch to Threaded Mode

Solved: Compile error: sub or function not defined

Hi,
I have a code that exports sheet to a text file and it works fine on my home pc with excel 2007.
when i run it on my work pc i get the above error, both in excel 2003 and 2007.
i found few posts in google about this issue but so far none of these helped me.
this is the first part of the code where i get the error:

[VBA]Sub DoTheExport()
Dim FileName As Variant
Dim Sep As String
FileName = Application.GetSaveAsFilename(InitialFileName:=vbNullString, FileFilter:=»Text Files (*.txt),*.txt»)
If FileName = False Then
»»»»»»»»»»»»»
‘ user cancelled, get out
»»»»»»»»»»»»»
Exit Sub
End If
Sep = Application.InputBox(«Enter a separator character.», Type:=2)
If Sep = vbNullString Then
»»»»»»»»»»»»»
‘ user cancelled, get out
»»»»»»»»»»»»»
Exit Sub
End If
Debug.Print «FileName: » & FileName, «Separator: » & Sep
ExportToTextFile FName:=CStr(FileName), Sep:=CStr(Sep), _
SelectionOnly:=False, AppendData:=False
End Sub[/VBA]

____________________________________________
Nihil simul inventum est et perfectum

Abusus non tollit usum

Last night I dreamed of a small consolation enjoyed only by the blind: Nobody knows the trouble I’ve not seen!
James Thurber

____________________________________________
Nihil simul inventum est et perfectum

Abusus non tollit usum

Last night I dreamed of a small consolation enjoyed only by the blind: Nobody knows the trouble I’ve not seen!
James Thurber

this is the second part of the code..

thnx for the fast reply.
i did copy it from the cpearson site i just couldnt attach the link.
like i mentioned i run this code on my pc without any issue, only
in the transfer to my work pc something goes wrong.

[VBA]Public Sub ExportToTextFile(FName As String, _
Sep As String, SelectionOnly As Boolean, _
AppendData As Boolean)
Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String
Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile
If SelectionOnly = True Then
With Selection
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
Else
With ActiveSheet.UsedRange
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
End If
If AppendData = True Then
Open FName For Append Access Write As #FNum
Else
Open FName For Output Access Write As #FNum
End If
For RowNdx = StartRow To EndRow
WholeLine = «»
For ColNdx = StartCol To EndCol
If Cells(RowNdx, ColNdx).Value = «» Then
CellValue = Chr(34) & Chr(34)
Else
CellValue = Cells(RowNdx, ColNdx).Value
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) — Len(Sep))
Print #FNum, WholeLine
Next RowNdx
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum
End Sub[/VBA]

____________________________________________
Nihil simul inventum est et perfectum

Abusus non tollit usum

Last night I dreamed of a small consolation enjoyed only by the blind: Nobody knows the trouble I’ve not seen!
James Thurber

Процедуры «Function» и «Sub» в VBA

Встроенные функции VBA

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

Список этих функций можно посмотреть в редакторе VBA:

  • Откройте рабочую книгу Excel и запустите редактор VBA (нажмите для этого Alt+F11), и затем нажмите F2.
  • В выпадающем списке в верхней левой части экрана выберите библиотеку VBA.
  • Появится список встроенных классов и функций VBA. Кликните мышью по имени функции, чтобы внизу окна отобразилось её краткое описание. Нажатие F1 откроет страницу онлайн-справки по этой функции.

Кроме того, полный список встроенных функций VBA с примерами можно найти на сайте Visual Basic Developer Centre.

Пользовательские процедуры «Function» и «Sub» в VBA

В Excel Visual Basic набор команд, выполняющий определённую задачу, помещается в процедуру Function (Функция) или Sub (Подпрограмма). Главное отличие между процедурами Function и Sub состоит в том, что процедура Function возвращает результат, процедура Sub – нет.

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

Аргументы

При помощи аргументов процедурам VBA могут быть переданы различные данные. Список аргументов указывается при объявлении процедуры. К примеру, процедура Sub в VBA добавляет заданное целое число (Integer) в каждую ячейку в выделенном диапазоне. Передать процедуре это число можно при помощи аргумента, вот так:

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

Необязательные аргументы

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

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

В таком случае целочисленный аргумент i по умолчанию будет равен 0.

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

Передача аргументов по значению и по ссылке

Аргументы в VBA могут быть переданы процедуре двумя способами:

  • ByVal – передача аргумента по значению. Это значит, что процедуре передаётся только значение (то есть, копия аргумента), и, следовательно, любые изменения, сделанные с аргументом внутри процедуры, будут потеряны при выходе из неё.
  • ByRef – передача аргумента по ссылке. То есть процедуре передаётся фактический адрес размещения аргумента в памяти. Любые изменения, сделанные с аргументом внутри процедуры, будут сохранены при выходе из процедуры.

При помощи ключевых слов ByVal или ByRef в объявлении процедуры можно задать, каким именно способом аргумент передаётся процедуре. Ниже это показано на примерах:

Помните, что аргументы в VBA по умолчанию передаются по ссылке. Иначе говоря, если не использованы ключевые слова ByVal или ByRef, то аргумент будет передан по ссылке.

Перед тем как продолжить изучение процедур Function и Sub более подробно, будет полезным ещё раз взглянуть на особенности и отличия этих двух типов процедур. Далее приведены краткие обсуждения процедур VBA Function и Sub и показаны простые примеры.

VBA процедура «Function»

Редактор VBA распознаёт процедуру Function, когда встречает группу команд, заключённую между вот такими открывающим и закрывающим операторами:

Как упоминалось ранее, процедура Function в VBA (в отличие от Sub), возвращает значение. Для возвращаемых значений действуют следующие правила:

  • Тип данных возвращаемого значения должен быть объявлен в заголовке процедуры Function.
  • Переменная, которая содержит возвращаемое значение, должна быть названа так же, как и процедура Function. Эту переменную не нужно объявлять отдельно, так как она всегда существует как неотъемлемая часть процедуры Function.

Это отлично проиллюстрировано в следующем примере.

Пример VBA процедуры «Function»: Выполняем математическую операцию с 3 числами

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

Эта очень простая VBA процедура Function иллюстрирует, как данные передаются процедуре через аргументы. Можно увидеть, что тип данных, возвращаемых процедурой, определён как Double (об этом говорят слова As Double после списка аргументов). Также данный пример показывает, как результат процедуры Function сохраняется в переменной с именем, совпадающим с именем процедуры.

Вызов VBA процедуры «Function»

Если рассмотренная выше простая процедура Function вставлена в модуль в редакторе Visual Basic, то она может быть вызвана из других процедур VBA или использована на рабочем листе в книге Excel.

Вызов VBA процедуры «Function» из другой процедуры

Процедуру Function можно вызвать из другой VBA процедуры при помощи простого присваивания этой процедуры переменной. В следующем примере показано обращение к процедуре SumMinus, которая была определена выше.

Вызов VBA процедуры «Function» из рабочего листа

VBA процедуру Function можно вызвать из рабочего листа Excel таким же образом, как любую другую встроенную функцию Excel. Следовательно, созданную в предыдущем примере процедуру FunctionSumMinus можно вызвать, введя в ячейку рабочего листа вот такое выражение:

VBA процедура «Sub»

Редактор VBA понимает, что перед ним процедура Sub, когда встречает группу команд, заключённую между вот такими открывающим и закрывающим операторами:

VBA процедура «Sub»: Пример 1. Выравнивание по центру и изменение размера шрифта в выделенном диапазоне ячеек

Рассмотрим пример простой VBA процедуры Sub, задача которой – изменить форматирование выделенного диапазона ячеек. В ячейках устанавливается выравнивание по центру (и по вертикали, и по горизонтали) и размер шрифта изменяется на заданный пользователем:

Данная процедура Sub выполняет действия, но не возвращает результат.

В этом примере также использован необязательный (Optional) аргумент iFontSize. Если аргумент iFontSize не передан процедуре Sub, то его значение по умолчанию принимается равным 10. Однако же, если аргумент iFontSize передается процедуре Sub, то в выделенном диапазоне ячеек будет установлен размер шрифта, заданный пользователем.

VBA процедура «Sub»: Пример 2. Выравнивание по центру и применение полужирного начертания к шрифту в выделенном диапазоне ячеек

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

Вызов процедуры «Sub» в Excel VBA

Вызов VBA процедуры «Sub» из другой процедуры

Чтобы вызвать VBA процедуру Sub из другой VBA процедуры, нужно записать ключевое слово Call, имя процедуры Sub и далее в скобках аргументы процедуры. Это показано в примере ниже:

Если процедура Format_Centered_And_Sized имеет более одного аргумента, то они должны быть разделены запятыми. Вот так:

Вызов VBA процедуры «Sub» из рабочего листа

Процедура Sub не может быть введена непосредственно в ячейку листа Excel, как это может быть сделано с процедурой Function, потому что процедура Sub не возвращает значение. Однако, процедуры Sub, не имеющие аргументов и объявленные как Public (как будет показано далее), будут доступны для пользователей рабочего листа. Таким образом, если рассмотренные выше простые процедуры Sub вставлены в модуль в редакторе Visual Basic, то процедура Format_Centered_And_Bold будет доступна для использования на рабочем листе книги Excel, а процедура Format_Centered_And_Sized – не будет доступна, так как она имеет аргументы.

Вот простой способ запустить (или выполнить) процедуру Sub, доступную из рабочего листа:

  • Нажмите Alt+F8 (нажмите клавишу Alt и, удерживая её нажатой, нажмите клавишу F8).
  • В появившемся списке макросов выберите тот, который хотите запустить.
  • Нажмите Выполнить (Run)

Чтобы выполнять процедуру Sub быстро и легко, можно назначить для неё комбинацию клавиш. Для этого:

  • Нажмите Alt+F8.
  • В появившемся списке макросов выберите тот, которому хотите назначить сочетание клавиш.
  • Нажмите Параметры (Options) и в появившемся диалоговом окне введите сочетание клавиш.
  • Нажмите ОК и закройте диалоговое окно Макрос (Macro).

Внимание: Назначая сочетание клавиш для макроса, убедитесь, что оно не используется, как стандартное в Excel (например, Ctrl+C). Если выбрать уже существующее сочетание клавиш, то оно будет переназначено макросу, и в результате пользователь может запустить выполнение макроса случайно.

Область действия процедуры VBA

В части 2 данного самоучителя обсуждалась тема области действия переменных и констант и роль ключевых слов Public и Private. Эти ключевые слова так же можно использовать применительно к VBA процедурам:

Собственная функция Excel: Ошибка компиляции: Sub или Function не определены

У нас есть система, которая всегда экспортирует данные IP-адреса с трехзначными октетами. Я пытаюсь создать собственную функцию в Excel, чтобы удалить любые ненужные начальные нули с этих IP-адресов. У меня есть проверенная формула, которая выполняет это, но при попытке создать функцию я получаю ошибку компиляции: Sub или Function не определены. Любая помощь будет оценена.

формула, которая работает:

например, если ячейка A2 содержит 010.110.009.254, эта формула приводит к 10.110.9.254

Я ожидаю, что = IPFix (A2) приведет к правильному формату IP без начальных нулей. Однако я просто получаю эту ошибку компиляции.

Заменить Substitute с Replace на VBA функции

VBA размещается в Excel, но он совершенно особенный: VBA ничего не знает о функциях листа Excel. По крайней мере, не изначально.

Итак, Substitute нигде не определен — то же самое для VLookup и многих других функций листа. Некоторые функции VBA имеют то же имя (или похожее), что и функции листа Excel, и ведут себя по-разному.

Стандартная библиотека VBA имеет модуль Strings который предоставляет ряд специализированных функций String (некоторые из которых также существуют в виде функций рабочего листа, например, =LEFT vs Left и Left$ ).

Как правильно указывает Том, стандартной библиотечной функцией VBA, которая эквивалентна функции Substitute Excel, является Replace — функция, определенная в модуле VBA.Strings , которую вы можете исследовать, нажав F2 , чтобы вызвать VBE Object Browser:

Поскольку все эти функции имеют глобальную область действия, вам не нужно полностью их квалифицировать; вот почему и как вы можете легально написать Debug.Print Replace(string1, string2) . Но знайте, что вы всегда можете набрать VBA. и получить IntelliSense, чтобы перечислить, какие функции доступны — VBA.Strings.Replace работает, как и VBA.Replace , или просто Replace :

Теперь это многословно. Преимущество в том, что теперь, если ваш проект VBA определяет функцию Replace , места, которые вызывают VBA.Strings.Replace или VBA.Replace , будут по-прежнему вызывать эту функцию вместо вашей пользовательской функции VBAProject.Module1.Replace — потому что ссылка на идентификатор в VBA всегда разрешается компилятором, начиная с наименьшей доступной области: пользовательская функция может существовать в пользовательском модуле и «скрывать» или «скрывать» функцию стандартной библиотеки VBA (или любую другую функцию, определенную в любом другом ссылочном типе). библиотека).

И наконец, обратите внимание, что для случаев, когда вам действительно необходимо вызвать фактическую функцию рабочего листа, вы можете сделать это из объектной модели Excel — здесь с With блока With чтобы уменьшить словесность:

Функции рабочего листа, вызываемые следующим образом, будут работать точно так же, как их действительные аналоги; таким образом вы можете использовать Index , Match , VLookup и многие другие функции рабочего листа с помощью стандартного вызова члена VBA с ранней привязкой, который вызовет стандартную ошибку времени выполнения VBA при наличии недопустимых аргументов.

Вы также можете вызывать их с поздним связыванием непосредственно с объектом Application — в этом случае недопустимые аргументы не вызовут ошибку, а вернут ее — точно так же, как в реальных #VALUE! (например, #VALUE! ) — если вы хотите вернуть Это значение ошибки рабочего листа, ваша функция должна возвращать Variant (неявный, как у вас, или явный, как указано ниже), потому что Error — это тип данных VBA, который не может быть приведен к значению String , поэтому возвращаемое присваивание выдает ошибка несоответствия типов:

Обратите внимание, что поскольку эти вызовы имеют позднюю привязку, они разрешаются только во время выполнения, что означает, что вы должны быть очень осторожны с опечатками; вы также не получаете никакой IntelliSense или «быстрой информации о параметрах», чтобы помочь при вводе.

Excel sub or function not defined

Перевести · “Sub or Function not defined” when trying to run a VBA script in Outlook. Ask Question . I solved it by deleting the macro created (in the docx: . Sub or Function not defined in VBA Excel 2016. 0. Calling Outlook Script by using an Excel Macro.

Excel VBA Macro Sub or Function not defined — Super …

Перевести · I used the macro recorder to generate a macro in Excel 2007. . Excel VBA Macro Sub or Function not defined. Ask Question Asked 8 years, 10 months ago. . (the name of my sub

Sub or Function not defined — Visual Basic | Microsoft Docs

Перевести · Specifying a procedure that is not visible to the calling procedure. Declaring a Windows dynamic-link library (DLL) routine or Macintosh code-resource routine that is not

Видео

Why do I receive a «Compile error: Sub or Function not .

Перевести · Why do I receive a «Compile error: Sub or. Learn more about excel, excellink, excllink, sub, function, not, defined, vba, macro, compiler, error .

Compile error: Sub or Function not defined («SolverOk»)

Перевести · 24.12.2011 · Compile error: Sub or Function not defined («SolverOk») I recorded a macro and then tried to run it. The macro includes repeated use of the Solver Tool, to save me some time. Excel does not recognize the «SolverOk» nomenclature . Sub or Function not defined («SolverOk

VBA Errors Compile Error Sub or Function not defined — You…

Перевести · 06.08.2018 · Getting Started with Open Broadcaster Software OBS — …

  • Автор: YourProgrammingNetwork
  • Просмотры: 12 тыс.

#15 How To Fix VBA Compile Error| Sub or Function Not .

Перевести · 24.10.2019 · In this video you will learn about how to fix compile error. If you see error related to sub or function not defined

  • Автор: BP Computer Academy
  • Просмотры: 1,2 тыс.

sub or function not defined in vba | MrExcel Message Board

Перевести · 26.02.2018 · Hi All, i am getting a error sub or function not defined in vba, can any one help. Sub xyz() counter = 1 …

Sub or Function not defined | MrExcel Message Board

Перевести · 25.05.2014 · You are missing a Function, not a Sub. But even if you supply the function, you will have another problem with that line of code. you do not have any lines of code assigning a value to STOCK# which is to be passed into the function

Sub, Function, or Property not defined (Error 35 .

Перевести · Sub, Function, or Property not defined (Error 35) 06/08/2017; 2 minutes to read +1; In this article. A Sub, Function, or Property procedure must be defined

WindowsExcel – электронные таблицы

Реклама Скачивай бесплатный редактор электронных таблиц XLS для работы и учебы

Создаем свою первую функцию в Excel

Что такое функция в VBA?

Функция написанная на VBA — это код, который выполняет вычисления и возвращает значение (или массив значений). Создав функцию вы можете использовать ее тремя способами:

  1. В качестве формулы на листе, где она может принимать аргументы и возвращать значения.
  2. Как часть вашей подпрограммы VBA. В процедуре Sub или внутри других функций.
  3. В правилах условного форматирования.

Хотя Excel уже содержит более 450 встроенных функций, но их тоже периодически не хватает. Иногда встроенные функции не могут выполнить то, что вы хотите сделать. Иногда для достижения результата необходимо создать огромную и сложную формулу, которая не понятна окружающим. В этом случае вы можете создать пользовательскую функцию, которую легко читать и использовать.

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

В чем отличие процедуры (Sub) от функции (Function)?

Основное отличие в том, что процедура (sub) используется для выполнения набора команд, и не призвана в отличие от функции (function) возвращать значение (или массив значений).

Для демонстрации приведем пример. Например есть ряд чисел от 1 до 100 и необходимо отделить четные от нечетных.

С помощью процедуры (sub) вы можете, к примеру, пройтись по ячейкам и выделить нечетные с помощью заливки. А функцию можно использовать в соседнем столбце и она вернет ИСТИНА или ЛОЖЬ в зависимости от того четное значение или нет. Т.е. вы не сможете изменить цвет заливки с помощью функции на листе.

Создание простой пользовательской функции в VBA

Давайте создадим простую пользовательскую функцию на VBA и посмотрим как там все работает.

Ниже представлен код функции, которая из текста оставляет только цифры, отбрасывая буквенные значения.

Чтобы у вас все заработало, необходимо вставить данный код в модуль книги. Если вы не знаете как это сделать, то начните со статьи Как записать макрос в Excel.

Теперь посмотрим как функция работает, попробуем использовать ее на листе:

Прежде чем разбирать саму функцию отметим 2 приятных момента, которые появились после создания:

  • Она стала доступна, как и любая другая встроенная функция (как создать скрытую функцию, расскажем далее).
  • Когда вы ввели знак «=» и начинаете вводить имя функции, то Excel выводит все совпадения и показывает не только встроенные функции, но и пользовательские.

Разбираем функцию пошагово

Теперь давайте глубоко погрузимся и посмотрим, как эта функция создавалась. Начинается функция со строки

Слово Function говорит о начале функции, далее идет ее название, в нашем случае Цифры.

  • Имя функции не может содержать пробелов. Кроме того, вы не можете назвать функцию, если она сталкивается с именем ссылки на ячейку. Например, вы не можете назвать функцию ABC123, так как это имя также относится к ячейке в листе Excel.
  • Вы не должны указывать на свою функцию то же имя, что и у существующей функции. Если вы это сделаете, Excel будет отдавать предпочтение встроенной функции.
  • Вы можете использовать символ подчеркивания, если хотите разделить слова. Например, Сумма_Прописью является допустимым именем.

После названия в круглых скобках описываются аргументы функции. По аналогии со встроенными функциями Excel. В нашем случае используется единственный аргумент Текст. После названия аргумента мы указали As String, это означает, что наш аргумент — текстовое значение или ссылка на ячейку, содержащее текстовое значение. Если вы не укажете тип данных, VBA рассмотрит его как Variant (что означает, что вы можете использовать любой тип данных, VBA его определит самостоятельно).

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

Вторая и третья строка функции объявляет дополнительные внутренние переменные, которые мы будем использовать.

Переменную i мы буем использовать для перебора символов. А переменную result для хранения промежуточного результата функции.

Задача функции — пройти по всем символам переменной Текст и сохранить только те, что являются цифрами. Поэтому начнем цикл с 1 и до последнего символа.

Len — функция, которая определяет количество символов.

Основная строка функции — это проверка является ли очередной символ текста цифрой и если да — то сохранение его в переменной result

Для этого нам потребуется функция IsNumeric — она возвращает True если текст — число и False в противном случае.

Функция Mid берет из аргумента Текст i-ый символ (значение 1, указывает что функция Mid берет только 1 символ)/

Функция Next — закрывает цикл For тут все понятно.

Этой строкой мы преобразовываем текстовую переменную result, которая содержит все цифры аргумента Текст, в числовое значение. И говорим какой результат должна вывести наша функция Цифры.

Последняя строка кода — End Function. Это обязательная строка кода, которая сообщает VBA, что код функции заканчивается здесь.

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

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

Когда вам нужно определить Sub или Function? Зачем вам нужно определить Sub или Function? Какова цель определения Sub или Function?

Я только спрашиваю, из-за этого:

Option Explicit

Sub OpenOrderReportExport()

Dim wsJL As Worksheet 'Jobs List
Dim wsPOT As Worksheet 'PO Tracking
Dim wsTNO As Worksheet 'Tel-Nexx OOR
Dim wbBK2 As Workbook 'New Workbook
Dim wsWS1 As Worksheet 'Sheet1
Dim wsWS2 As Worksheet 'Sheet2
Dim wsWS3 As Worksheet 'Sheet3

Set wsJL = Sheets("Jobs List") 'Jobs List
Set wsPOT = Sheets("PO Tracking") 'PO Tracking
Set wsTNO = Sheets("Tel-Nexx OOR") 'Tel-Nexx OOR
Set wbBK2 = Workbook("Book2") 'New Workbook
Set wsWS1 = Sheets("Sheet1") 'Sheet1
Set wsWS2 = Sheets("Sheet2") 'Sheet2
Set wsWS3 = Sheets("Sheet3") 'Sheet3

Application.ScreenUpdating = False ' Prevents screen refreshing.
CurrentFile = ThisWorkbook.FullName
NewFileType = "Excel Files 2007 (*.xlsx)"
NewFile = Application.GetSaveAsFilename(InitialFileName:="Open Order Log - " & Format(Date, "dd-mm-yyyy") & ".txt", fileFilter:=NewFileType)

End Sub

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

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

Поэтому, не решая всей моей головоломки, я хотел бы знать, почему нужно определить что-то подобное? И как его нужно определить… если кто-то может дать ответ, он будет очень признателен.

С помощью Excel можно выполнять почти какого-угодно порядка: вычислять и даже программировать действия компьютера. Все потому, что в функционал заложены функции и формулы. Но иногда пользователю приходится сталкиваться с ошибками при их вводе. Особенно часто они возникают, когда человек пытается ввести формулу вручную. Если пользователь опытный, такая проблема встречается не очень часто, поскольку он уже знает, какой синтаксис правильный, а также довольно внимательный. Но даже профессионалы могут допускать ошибки.

Часто мы не понимаем, почему они возникают. И профессионалы тоже могут не знать, какие причины. Он может понимать, что означает тот или иной код ошибки, но найти конкретное место в формуле не может. Но для профессионала это не проблема, поскольку он знает, как находить ошибки методами самого Excel. Сегодня мы более детально разберемся в причинах самых распространенных ошибок при вводе формул в Excel и разберем методы решения этой проблемы. Тем самым мы значительно ближе будем к профессионалам. Ну что же, начнем?

Содержание

  1. Изменение формата ячеек Excel
  2. Отключение режима “Показать формулы” в Excel
  3. Активизация автоматического пересчета формул в Excel
  4. Исправление ошибок в формулах
  5. Исправление ошибки в синтаксисе
  6. Выводы

Изменение формата ячеек Excel

Довольно нередкая причина того, почему у человека появляется неудача в ходе записи формул, заключается в том, что он неверно выбрал формат ячеек, на какие она ссылается. Так, если в ней поставили формат «текст», то вместо итогового значения перед нами будет просто показана формула в виде текстовой строки. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Есть случаи, когда формат считается правильно, но отображается неверно. Причина этого явления — также ошибочно выбранный формат. Эта проблема может появиться и сама собой, через глюки в работе программы. Как ни странно, человеческий фактор влияет и на работу компьютера, который не является человеком. Но это уже лирическое отступление. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

  1. Выделить ячейку и перейти на вкладку «Главная» на ленте. После этого перемещаем курсор мыши в группу «число». Здесь также есть поле, в котором демонстрируется формат, в данный момент присвоенные ячейке. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку
  2. Нужно нажать на стрелку вниз возле этого поля. После этого появится список с разными форматами ячеек. Нужно выбрать тот, который соответствует тому, который нужно применять в конкретной формуле. После этого делается клик по выбранному варианту. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Есть еще один инструмент, настройки которого более широки. Чтобы его применить, необходимо выполнять следующую инструкцию:

  1. Определить, нам нужно изменить формат одной ячейки или нескольких. После этого выбираем ту, которая нам подходит (или целый диапазон выделяем), после чего делаем правый клик по ней (ним). Далее ищем в появившемся перечне пункт «Формат ячеек». Задача может быть существенно упрощена, если пользователь нажмет сочетание Ctrl+1.

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

  1. После этого появляется диалоговое окно, в котором по умолчанию будет открыта вкладка «Число». Важно убедиться, что открыта именно она. После этого следует обратить ваш взор на список в левой части окна. Там находится перечень доступных форматов ячеек. Нужно выбрать тот, который подходит в конкретной ситуации и нажать ОК.

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Что следует делать на практике?

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Отключение режима “Показать формулы” в Excel

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

  1. Находим в главном меню вкладку «Формулы». Немного ниже и правее нее находится группа инструментов «Зависимость формул», в которой находится кнопка «Показать формулы». Нужно сделать один левый клик мышью при условии, что эта функция активирована.

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Активизация автоматического пересчета формул в Excel

Время от времени появляются ситуации, когда результат формулы не меняется, если в одной из ячеек, данные которой использовались для подсчета, происходит коррекция значений. Чтобы исправить эту проблему, необходимо воспользоваться меню настроек. Следуйте этим действиям:

  1. Переходим в меню «Файл». Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку
  2. После этого ищем раздел «Параметры» и переходим в него. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку
  3. Далее мы увидим окно. В списке справа находится большое количество различных разделов, но нас интересует «Формулы». После клика мы увидим, что правая часть окна изменилась. Переходим в группу «Параметры вычислений», где ставим флажок возле функции «автоматически». После того, как действия будут выполнены, нам нужно нажать кнопку ОК.

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Исправление ошибок в формулах

Бывают ситуации, когда человек допускает ошибку при вводе формулы. В этом случае программа будет просто ее определять, как простое значение в текстовом формате. То есть, и расчетов также не будет. Так, самой распространенной ошибкой является ситуация, когда перед вводом знака «равно» ставится пробел. Здесь важно помнить, что перед знаком = не должно быть никаких пробелов, и он всегда должен располагаться перед формулой.

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Кроме этого, нередко ошибки появляются в синтаксисе функций. Причина этого проста — не все они просты для заполнения обычными людьми. Особенно это касается ситуаций, когда применяется сразу несколько аргументов. Поэтому ручной ввод формул рекомендуется лишь если пользователь опытный, и в таком случае синтаксис нужно тщательно перепроверять. Для того, чтобы сделать ввод функций более простым, был создан Мастер функций, который вызывается путем нажатия клавиши fx слева от строки ввода формулы. Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Если хотя бы одна из этих ошибок появляется, то нужно проверить, правильно ли заполнена информация в аргументах этой функции. После этого осуществляется проверка самой формулы и то, есть ли в ней ошибки. Особенно нужно акцентировать внимание на тех из них, которые не соответствуют законам математики. Например, очень частая проблема — деление на ноль. Нередко она возникает случайно. Просто в результате вычисления определенного значения функцией, которая входит в состав формулы и служит аргументом для функции более высокого порядка, появляется число ноль. В результате, формула выдает ошибку #ДЕЛ/0.

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

  1. Выделяем ту ячейку, в которой есть ошибочная формула. Далее переходим во вкладку «Формулы». Там нужно найти инструмент «Зависимости формул» — «Вычислить формулу». Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку
  2. Перед глазами пользователя появится диалоговое окно. В нем детально будет описано, как осуществлять отчет правильно. Чтобы решить проблему, необходимо нажать кнопку «Вычислить». После этого функция будет последовательно проверяться на каждом шагу. Поэтому кнопку нужно нажать несколько раз. Таким образом можно отследить, на каком шагу возникла проблема и оперативно ее решить.

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

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

Решаем проблемы с формулами в Excel. Что если формула не работает или показывает ошибку

Чтобы исправить проблему, необходимо нажать на кнопку «Изменить в строке формул». После этого формула будет работать правильно.

Исправление ошибки в синтаксисе

Надо сказать, что все особенности исправления ошибок в синтаксисе были описаны выше, потому что это частный случай ошибок в формулах. Тем не менее, давайте резюмируем то, что было сказано, поскольку ошибка в синтаксисе — очень частая проблема начинающих пользователей Excel. Для проверки синтаксиса существует два специализированных инструмента: проверка формул и вычисление. Также можно воспользоваться ручным методом проверки. Когда какой лучше использовать?

  1. В целом, если формула небольшая, ее можно проверить и самостоятельно. Это не потребует большого количества времени. Также можно без проблем проверять формулы самостоятельно, если их количество небольшое. Дело в том, что при увеличении количества формул увеличивается и количество ошибок при проверке. Мозг загромождается большим количеством информации, пусть и простой для обработки.
  2. Если есть большое количество формул или сами формулы довольно большие, лучше воспользоваться специализированным инструментом. Каким именно — решать только вам. Каждый из них подходит, просто один предусматривает выполнение действий более в ручном режиме, а другой — автоматическом.

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

Выводы

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

Оцените качество статьи. Нам важно ваше мнение:

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Протокол собрания жильцов образец word
  • Процедура на ячейку excel
  • Протягивание чисел в excel
  • Протокол родительского собрания образец word
  • Процедура если в vba excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии