Отладка vbs скриптов в notepad
Scripts will seldom be perfect right away.
This page describes some (debugging) techniques that will help you avoid errors in VBScript, or to find and correct them.
Display or log intermediate results like variable values and return codes
To check the script's program flow, and the values of variables during execution, it helps to display variable names and their values during run time.
If external commands or objects are used, display their return codes as well.
Write every detail in a log file too, preferably with a timestamp in order to detect possible delays.
If subroutines or (user defined) functions are used, log each call to these subroutines, it will help you follow the program flow.
If I expect problems with a script, I often add an optional /DEBUG command line switch, which will tell the script to log even more details.
Use a debugger, if available
This tip was sent by Tom Hoff: use CSCRIPT //X yourscript.vbs to execute your script in a debugger.
You will be prompted to choose a debugger from a list of available debuggers.
Debuggers that can be used for VBScript include (but are, most likely, not limited to):
Modularize your scripts with functions and subroutines
Any block of code that will be used more than once can be moved into a subroutine or function.
Dividing the code into logical subroutines and functions will improve readability of your script, and thus will make maintenance a lot easier.
If a "self-contained" subroutine or function has been debugged, it will save debugging time when you reuse it in another script.
If your function or subroutine receives parameters, use distinctive parameter names to avoid conflicts with global variables. Do not use an existing variable name for a parameter name.
As you may have noticed, I use the prefix my for parameter names in my own scripts. Choose any naming system you want, but be consistent, and keep in mind that some day others may need to understand your code.
To be completely on the safe side, use ByVal as in
to prevent changing the value of an existing global variable named varParameter in the global scope.
Experiment with Denis St-Pierre's ByVal/ByRef test script to become familiar with the concepts.
Never assume anything
This may be the most important thing to keep in mind when scripting — in any language.
Use common sense.
Make sure you log any requirements that aren't met, and/or display descriptive error messages.
with built-in debugger and object browser
- Different colors for commands and keywords: a typo will result in the wrong color
- IntelliSense ™ like "intelligence" and object browser: type a dot after an object name and you'll get a drop-down list of available properties and methods
- Built-in debugger: run the script "inside" the editor, add breakpoints, monitor variable values, get improved error handling
My personal favorite is VbsEdit, which saves me a lot of time and frustration when writing in VBScript.
Because there are more editors and more scripting languages, I compiled a list of script editors and IDEs.
(Temporarily) disable all On Error Resume Next lines
When you're looking for the cause of an error, you do want to see the error messages stating which line in the code generates the error.
So "comment out" any On Error Resume Next lines while testing/debugging.
And whenever you really do need to use On Error Resume Next , check for errors ( If Err Then. ), and switch back to On Error Goto 0 as soon as possible.
Avoid nested functions
A one-liner like:
is hard to debug if it returns the wrong result.
Split it up in several lines, each without nested functions, and use variables to contain the intermediate results:
Now, if the code doesn't do what it is supposed to do, you can have a look at the intermediate results to check where the problem lies.
Clean up
It is usually advisable to clean up any leftover objects at the end of the script.
Objects like the FileSystem object, Internet Explorer and others may cause memory leaks if they aren't discarded and new instances are being opened all the time.
Just make sure to add a Set objectName = Nothing line at each "exit" (just before each WScript.Quit ) and end of the program flow.
Objects that are "created" inside a subroutine or function should always be discarded at the end of the routine.
A known exception to this rule is the Internet Explorer Debug Window discussed before.
Решение
В исходном коде выше ключа /f как раз нет.
Отправлять WM_CLOSE на WSH можно только с подключением сторонней библиотеки. Поэтому в данном случае только c taskkill:
а о какой библиотеке идет речь?
Добавлено через 4 минуты
Я не какую-то конкретную имел в виду. Из тех, что знаю: JSSys3, AutoItX3, dynwrapx, wshAPIToolkitObject.
Да это и не нужно, и так все отлично пашет!
Добавлено через 2 часа 13 минут
И это пригодилось , повесил горячие клавиши Ctrl+F5 и Ctrl+Alt+F5 и получилось вообще шикарно! Это очень удобно особенно когда редактируешь новые опции в контекстном меню программы, когда надо постоянно и много раз перезагружать программу чтобы редактирование вступило в силу.
Вы наш спаситель
А я и не писал, что это обязательно при наличии taskkill.
Про хоткеи мне рассказывать не нужно, я и сам клавиатурник в большей степени. Только предпочёл бы Ctrl+Shift+R в данном случае.
Beer-Sheva, ну это уже на вкус и цвет (R — Reload/Restart/Replace/Rebuild/Restore/Recover/Record/Run/Resample/Remix).
Этот скрипт прекрасно работал пока я не обновился с npp.7.8.6.portable и до npp7.9.4.portable (все версии беру только с оф сайта). И не пойму что случилось, этот скрипт перезагрузки блокнота перестал работать если папка с программой находиться не на системном диске. Самое интересное что эти же скрипты в npp.7.8.6.portable работают на любом разделе жесткого диска!
Не подскажете в чем может быть проблема?
скрипт для Notepad++
Есть xml файл, с помощью скрипта для notepad++, в нем нужно найти все строчки.
Скрипт поиска и замены для notepad++ на Python
Есть программа для который нужно обычный текст заменять на коды. Например. для вставки "exit".
Улучшить скрипт для плагина под notepad++
Есть: Всем известная программа notepad++. Под неё существует плагин для юзерских.
Скрипт или программа для облегчения работы с Notepad++
Дорого времени суток! Нужно какое-нибудь решение. Либо скрипт, либо программа, или хотя.
Как написать скрипт для скрытия модального окна при клике вне окна(на боди) ?
У меня модальное окно вообще даже не открывается при нажатии на кнопку,потому что у меня так.
Скрипт перезагрузки (запретить suspend)
при командах su sudo reboot компьютер переходит в режим suspend ждущий можно ли сделать.
Тем не менее, это исключительно вспомогательный скриптовой инструмент, абсолютно непригодный для написания прикладных пакетов, системных утилит и прочего софта
Так же, впрочем, как ява и топиковый васик
Хотя на последних бородатые люди в чалмах и умудряются что-то кодить прикладного
А вот на питоне я ничего такого не встречал
Fog_patch
Речь про то, что можно вручную набрать простейший парсер, без использования каких-либо языков. Я даже больше скажу — парсер можно собрать прямо в железе. Я Панчула читаю уже пару-тройку лет – он недавно писал про такой фокус.
splxgf
Тем не менее, это исключительно вспомогательный скриптовой инструмент, абсолютно непригодный для написания прикладных пакетов, системных утилит и прочего софта
Так что насчет вспомогательного и скриптового это было обидно. По части дизайна языка он фору даст многим серьезным языкам в топ-20. Да и сфера применения выходит далеко за рамки скриптов, как минимум big data/data mining/machine learning.
_MBK_
Пикирующий бомбардировщик
Fog_patch
Вы что хотите услышать? Сейчас даже процессоры проектируются в программах, в верилогах и прочем. Естественно, что-то использовать всё-равно придётся. Но если теоретически.
Oleg Butrin
Тем не менее, это исключительно вспомогательный скриптовой инструмент, абсолютно непригодный для написания прикладных пакетов, системных утилит и прочего софта
_MBK_
Пикирующий бомбардировщик
Я не пойму сакрального превосходства питона над другими языками. Для написания простейшего парсера любого языка необходима программа, уже умеющая парсить текст и транслировать его в машинные команды. А для питона (виндовой его реализции) необходим вдобавок JVM или фреймворк. И где избранность и самозарождение?
Fog_patch
_MBK_
Пикирующий бомбардировщик
Не по теме:
Я ничего против питона не имею, хотя не ожидал увидеть тут столько его религиозных адептов Человек от незнания написал лажу, потом понял свои заблуждения и скромно замолчал, зато все кинулись защищать любимый воляпюк
Oleg Butrin
aleksasha
Интересно читать все ваши рассуждения. Правда. Но у меня конкретный вопрос к тем, кто может сталкивался с таким. Выяснилось, что встроенный в InDesign интерпретатор при запуске из панели Sripts одинаково отработает строку obj.fit (idFillProportionally) и obj.fit (idFitOptions.idFillProportionally), а вот в VBA работает только второй вариант. Почему так?
_MBK_
Пикирующий бомбардировщик
Skvoznyak
vbatushev
_MBK_
Пикирующий бомбардировщик
Т.е. вот у меня сейчас в данный момент на раритетной XP нет никакого Go, я прям с нуля могу исключительно на Go этот Go на ней сотворить из ничеgo?
splxgf
Т.е. вот у меня сейчас в данный момент на раритетной XP нет никакого Go, я прям с нуля могу исключительно на Go этот Go на ней сотворить из ничеgo?
Ты не поверишь на чем пишутся компиляторы для C/C++. Никого же не удивляет запуск виртуальной машины в браузере с поддержкой нативных бинарников под любую архитектуру (точнее конечно удивляет, но факт).
_MBK_
Пикирующий бомбардировщик
Меня сложно чем то удивить
Однако, нужно называть вещи своими именами и "питон крут ибо написан целиком на питоне" и "голанг написан целиком на голанге" - исключительно пиарные слоганы, производящие впечатление на ламеров. В первую очередь, потому что они неверны. С другой стороны, при здравом размышлении понятно, чем больше языковых библиотек написано исключительно на интерпретируемом коде самого языка, тем тормознее и глючнее работает вся конструкция, как, если б они были нативными и оптимизированными под натив.
А у питона и го, как ни прискорбно это признать, но натив где-то глубоко на самом донышке через миллион прослоек в виде JVM, IL, MFC и даже WinAPI
Создайте новый файл, назовите его test.vbs. Поместите это в него.
Обратите внимание, что номер находится в миллисекундах, поэтому 1000 составляет 1 секунду.
Ответ 2
Если вы пытаетесь моделировать задержку сна в VBScript, но WScript недоступен (например: ваш script вызывается из инструмента Microsoft BGInfo), попробуйте следующий подход.
Пример ниже будет задерживаться до 10 секунд с момента обработки команды:
Ответ 3
если это VBScript, это должно быть
Если это JavaScript
Время в миллисекундах. WScript.Sleep 1000 приводит к 1-секундному сну.
Ответ 4
Следующая строка сделает ваш script спать в течение 5 минут.
Обратите внимание, что значение, переданное во время сна, составляет миллисекунды.
Ответ 5
Здесь другая альтернатива:
Ответ 6
Многие ответы здесь предполагают, что вы используете свой VBScript в Windows Scripting Host (обычно wscript.exe или cscript.exe ). Если вы получаете ошибки, такие как "Переменная" undefined: "WScript", то вы, вероятно, нет.
Объект WScript доступен только в том случае, если вы работаете под Windows Scripting Host, если вы работаете под другим хостом script, таким как Internet Explorer (и вы, возможно, не понимаете его, если находитесь в чем-то как HTA), он не доступен автоматически.
Microsoft Эй, сценарист! В блоге есть статья, которая касается именно этой темы Как временно приостановить script в HTA?, в которой они используют VBScript setTimeout создать таймер для имитации спящего режима без необходимости использовать петли для зависания процессора и т.д.
Ответ 7
Время ожидания Функция находится в миллисекундах (мс)
если вы хотите 3 минуты, вот как это сделать:
Ответ 8
Ниже приведено обновление решения, предоставленного @user235218, которое позволяет указать количество требуемых миллисекунд.
Примечание. Параметр -n - это количество повторений, а -w - тайм-аут в миллисекундах для пинга. Я выбрал адрес 127.255.255.254, потому что он находится в диапазоне loopback, и ms-окна не реагируют на него.
Я также сомневаюсь, что это обеспечит миллисекундную точность, но в другой заметке я попробовал ее в приложении с помощью управления ms script, а встроенная функция сна заблокировала интерфейс, который этот метод не сделал.
Если кто-нибудь может объяснить, почему этот метод не заблокировал интерфейс, мы могли бы сделать этот ответ более полным. Обе функции сна, которые выполняются в пользовательском потоке.
Ответ 9
лучший таймер использования:
Ответ 10
Вот мое решение. Работал с script, который запускался сторонней программой без объявления WScript и не разрешен импорт.
Обновить
Похоже, Microsoft удалил Sleep.exe из win 8, так что это не работает в win 8, если вы не поставили Sleep.exe в папку, определенную в% path%.
В настоящее время я использую Notepad ++ для написания/редактирования VBScipts, но я ищу что-то новое (а также бесплатное). У кого-нибудь есть любимый?
У меня нет проблем с Notepad ++; на самом деле мне это очень нравится, и я использую его много, я просто хочу посмотреть, какие другие варианты доступны. Я хотел бы найти что-то, что имеет больше чувства IDE к нему, но также поддерживает несколько языков.
Решение
FlasherX, Большое спасибо вашу помощь
Добавлено через 2 часа 16 минут
FlasherX, Ваш скрипт перезагружает окно программы в несколько раз быстрее!
… чем этот код:
FlasherX, Если открыть в чистом окне файлы, и перегрузить окно через ваш скрипт то файлы не сохраняются в окне программы. Седьмую строку в скрипте я закомментировал, чтобы исключить перезапись XML файлов настройки и сессии. Может быть такое что из за высокой скорости перезагрузки окна данные о сессии не успевают прописаться в файле session.xml? Загрузил короткий ролик чтобы наглядно показать про что я говорю.
Седьмую строку в скрипте я закомментировал, чтобы исключить перезапись XML файлов настройки и сессии.
FlasherX, Такая же вещь проходит и с моим кодом, а если удалить ключ /f то вновь открытые файлы их окна не вылетают.
Добавлено через 3 минуты
Просто я подумал если комментировать №7 строку из вашего кода можно получить два скрипта, один простая перезагрузка а второй с перезаписью файлов)))
Always use Option Explicit and declare all variables
It may seem a nuisance to force yourself to declare all variables, but trust me, Option Explicit will save you a lot of time searching for errors caused by typos in variable names.
It will also help you find variables with the wrong scope (local vs. global).
Create and use a debug window
Notes: | ||
Notes: | (1) | objIEDebugWindow must be declared in the main script body, not in the subroutine (must be global)! |
(2) | Do not discard the objIEDebugWindow object at the end of the script, or your debug window will vanish! |
And this is what the debug window looks like:
Use custom error handling
It is ok to use the scripting engine's built-in error handling, but adding your own custom error handling may result in a better "user experience".
Insert a line On Error Resume Next just before some code that might cause trouble.
Insert another block of code after that suspect code to deal with potential errors.
Use Err or Err.Number and Err.Description to detect and log and maybe even correct errors.
If no more problems are expected, insert a line On Error Goto 0 after the custom error handling code to restore the default built-in error handling.
Initialize variables
This may be important when you use loop counters other than For loops: make sure the counter variable has a valid value to start with.
Also watch out for global variables that are used in subroutines or functions.
Test for 32-bit MSHTA.EXE on 64-bit Windows
Sometimes an HTA can cause trouble when running with 32-bit MSHTA.EXE on a 64-bit Windows.
This is especially true when 64-bit external commands need to be executed: a 32-bit MSHTA process simply cannot start a 64-bit external command.
The following sample code warns the user for this condition when the HTA is loaded:
Этот скрипт по идее должен закрыть окно Notepad++, далее запустить скрипт "Copy.vbs" который скопирует файлы с перезаписью файлы config.xml и session.xml на один каталог выше где находиться notepad++.exe только после этого должно запуститься окно Notepad++. Но это не фига не работает.
Этот скрипт копируем файлы config.xml и session.xml из каталога "VBS" с перезаписью, на один каталог выше где находиться notepad++.exe
Помогите пожалуйста привести в рабочее состояние это хозяйство, и желательно все объединить в один скрипт.
Добавлено через 11 минут
Если вручную запустить такой скрипт из каталога "VBS", то приходит перезагрузка окна и файлы config.xml и session.xml перезаписываются. Но вот из меню "Запуск" в Notepad++ это не работает.
VBS скрипт для перезагрузки ALTUSEN
Доброго всем вечера. Толковые люди данного форума подскажите кто чем может. Ни как не могу.
Скрипт перезагрузки компьютера при отсутствии сети
Всем доброго дня, помогите советом - нужен скрипт перезагрузки компьютера при отсутствии сети, на.
Нужен скрипт для перезагрузки компьютера в случае отвала оборудования
Всех приветствую, имеется комп, система Windows 10 corporate, с несколькими видеокартами, АМД.
А насколько это целесообразно?
Если нужен один скрипт, просто распишите точную последовательность действий для него.
FlasherX, У меня не получается заставить его работать из меню "Запуск" с перезаписью файлов config.xml и session.xml (это для очистки всего кеша Notepad++, окна поиска, сессии и всего остального)
Добавлено через 2 минуты
Я не пойму как это все проще и надежнее реализовать
Beer-Sheva, кого его, если скриптов приведено несколько? Целесообразность касается объединения. И моя рекомендация безотносительно кодов была вполне однозначной.
FlasherX, Про обеднение я имел ввиду про Restart1.vbs и Copy.vbs, то есть:
1. Завершить процесс notepad++.exe
2. Скопировать файлы config.xml и session.xml на один каталог выше (Copy.vbs)
3. Запустить процесс notepad++.exe
Такое можно реализовать на vbs? Чтобы все работало из из каталога "VBS" который будет в корне с notepad++.exe
ОТВЕТЫ
Ответ 1
Я большой поклонник Notepad ++. У меня есть пара проблем с ним, но это отличный редактор в целом.
Я некоторое время смотрел emacs, но еще не сделал решительный шаг.
Ответ 2
Мне нравится Vbsedit, это делает мои ежедневные задачи сценариев намного проще.
Ответ 3
Excel не является бесплатным, но в случае, если у вас уже есть его.
Если вы хотите intellisense, вы можете использовать редактор макросов Excel (он же VBE) и экспортировать модули в файлы .vbs. Это не отличный редактор и не обновлялся более десяти лет. Но intellisense все еще делает его лучше, чем большинство текстовых редакторов.
Ответ 4
Visual Studio будет моим любимым редактором VBScript, где есть экспресс-выпуски, если вы хотите попробовать бесплатную версию. Курс Я использую VS от 6.0 до 2010 с более чем несколькими версиями между ними.
Ответ 5
Связанный (но публикация здесь, так как поток "VBScript компилятор" закрыт и указывает здесь) - если вы ищете бесплатный инструмент для компиляции VBS-EXE, лучшим вариантом является HTWOO от Hadi Kiamarsi. Он указан как инструмент для "Python script для EXE", но затем вы узнаете, что он также делает VBS для EXE и многие другие компиляции бесплатно.
Ответ 6
В настоящее время я использую AdminScriptEditor, который имеет почти все функции Primal Script за небольшую часть стоимости. В моей прошлой жизни я использовал Microsoft Script Editor, который поставляется в каждой версии Office 200 и 2003 (возможно, даже 2007, но я не уверен). MSE предназначен для веб-отладки, но он выполняет достойную работу для выделения синтаксиса и поддержки hta/html. Хотя теперь, когда я думаю об этом, вы, вероятно, можете получить те же преимущества MSE в версии Visual Studio Visual Studio, которая бесплатна.
Ответ 7
Раньше я использовал UltraEdit-32 в день - к сожалению, он больше не был свободен, но когда я его использовал, я нашел его достаточно полезным, чтобы я не стал спорить о ставке в 35 долларов.
Предположительно (хотя я передаю информацию второй стороны здесь, поэтому не держите меня за это), она поддерживает intellisense, а также вашу обычную подсветку синтаксиса и коллапс кода. Я не уверен, поддерживает ли он точки останова и отладки.
Я тестировал последнюю версию PrimalScript, которую один из моих друзей рекомендовал мне, что я считаю выдающимся, он поддерживает всевозможные опрятные функции - intellisense. Я просто жду, чтобы узнать, собирается ли компания выработать его. Это не дешево, хотя в $279,00. Я бы сказал, что это приложение стоит обстреливать. Он поддерживает полную script отладку, intellisense, подсветку синтаксиса - весь caboodle. Он также работает для целой группы языков, а не только для VBScript. это JavaScript, командные файлы, PowerShell, SQL-скрипты, партия. Это полноценная среда разработки, которая не может использоваться для замены чего-то вроде Visual Studio, но для большинства одиночных приложений script/file, я не думаю, что это может быть бит.
Ответ 8
GVim (vi) для меня.
Ответ 9
Я использую SciTE с настраиваемым файлом свойств для сценариев автозаполнения, intellisense и запуска.
Ответ 10
Я использую PSPad, который поддерживает несколько языков, включая vbs, и также является достойным редактором. стоит проверить его.
Ответ 11
Мне нравится emacs с visual-basic-mode. Как отмечали другие, Notepad ++ тоже неплохо.
Ответ 12
VBsEdit и vim, зависит от размера script.
Ответ 13
Notepad ++ - лучший бесплатный редактор script, с которым я столкнулся (пока).
Но если вы делаете много сценариев VB, VBSEdit (~ $75) трудно превзойти. Возможность отбрасывать фрагменты кода при нажатии кнопки меню, а также множество примеров сценариев. Имеет гладкий интерфейс, включая ссылку на объект, но предназначен только для vbscript.
XLNow OnScirpt (~ $60) обрабатывает еще несколько языков сценариев и фрагменты кода и немало примеров. Интерфейс также включает ссылку на объект, но немного неуклюж (IMHO).
Ответ 14
В основном я использую PrimalScript 2007 Enterprise с полными возможностями script, естественно, Microsoft cscript и wscript, а иногда VBSEdit. Хотя ExeScript Editor звучит интересно, так что это может привести к этому.
Ответ 15
SciTE, это мой любимый для vbscript и autoit.
Ответ 16
Я все еще использую Crimson Editor. Это довольно круто, особенно если вы создаете пользовательский "инструмент пользователя", который вызывает wscript.exe с помощью нажатия клавиши.
Ответ 17
GridinSoft Notepad Lite - мой любимый для написания/редактирования VBScipts. Freeware.
Ответ 18
Я не видел, чтобы кто-то предлагал E - TextEditor, поэтому я его выложу. Я начал с NotePad ++, но после попытки E я не вернулся. Моими определенными причинами переключения являются поддержка шаблонов для разных файлов, возможности темы (раскраски), панель вкладок и поддержка фрагментов.
Ответ 19
PrimalScript - это блестящий редактор script, который обрабатывает VBScript, WSH, PowerShell, HTA и другие. Это не бесплатно, но если вы делаете много сценариев, это может сделать мир различий.
Ответ 20
Я использую ExeScript VBScript Editor Он позволяет редактировать, компилировать и отлаживать скрипты, искать и применять COM-объекты,
Ответ 21
Я использую обновленную версию Exescript - ExeScript Pro. Все современные функции: intellisense, com com completion, debug, COM-браузер и помощник, WMI suport, Powershell, Bat, VBS, JS, HTA, множество образцов и, конечно же, родная компиляция в EXE!
Ответ 22
Я использовал редактор ConTEXT, довольно неплохо, это позор, который был остановлен, но он по-прежнему является хорошим бесплатным редактором, я нашел его менее громоздким, чем блокнот ++.
Вы можете запустить script из редактора с помощью до 4 команд быстрого доступа (для расширения файла), включая такие параметры, как //X, чтобы запустить режим отладки (в визуальной студии или MSE), работающий либо с помощью cscript.exe, либо с помощью wscript.exe.
Ответ 23
В настоящее время я использую notepad ++ для записи/редактирования VBScipts.
Use a VBScript aware editor or IDE
Check the WSH version
Ok, so you wrote your script, tested it on your own computer, maybe even on multiple computers, and everything seems to work fine.
Does that mean your script is ready to be distributed?
Would I ask if it were?
No, we are not done yet.
A final screening is necessary to find out the minimum WSH version required to run the script.
Browse through your script and for each command you used, look up the WSH version required in MSDN's VBScript Version Information tables (JScript Version Information is available too).
The WSH version required for a particular command can be found in the page's second table.
Write down any required WSH version greater than 1.0.
The highest/latest version you wrote down is the minimum WSH version required to run your script.
Now check the VBScript Version Information page's first table to see if the minimum WSH version requirement is met by all client computers you had in mind.
In case you aren't sure about the client computers, you can make your script itself perform a check, using:
Note: | |
Note: | Yes, this check is safe, all commands and functions used were available in the very first WSH version |
Use descriptive names for variables, functions and subroutines
You are (almost) completely free to use any name for a variable, subroutine or function.
However, instead of using a name like f , why not use objFSO for a FileSystem object? Or Decode instead of dec as a function name?
Imagine what a difference it will make when someone else needs to read and understand your code (or you yourself a couple of months from now. ).
By choosing logical, descriptive names, you may also save yourself time while debugging.
You may have noticed that many scripters use the first character, or the first 3 characters, of variable names to specify the data type: objFSO for a (FileSystem) object, intDaysPerWeek for integers, etc.
Though in VBScript any variable can contain any type of data at any time, this naming convention helps make clear what type of data a variable is supposed to contain.
For function or subroutine that receive parameters, use distinctive parameter names to avoid conflicts with global variables. Using existing variable names for parameter names spells trouble.
As you may have noticed, I use the prefix my for parameter names in my own scripts. You can choose any naming system you want. But do keep it consistent.
Keep in mind that some day others may need to understand your code.
Again, to be completely on the safe side, use ByVal as in
to prevent changing the value of an existing global variable named varParameter in the global scope.
I urge you to try Denis St-Pierre's ByVal/ByRef test script to build an understanding of the concepts.
It may save you days of stressful debugging.
Document your scripts with useful comments
It is always wise to add comments explaining what a script, or part of the script, does.
However, make sure the comments are relevant for future use — scripts need maintenance every now and then, and comments can help make this easier.
If you intend to reuse code, like subroutines or user defined functions, it is essential to describe the functionality in comments.
Include a description of what the routine is intended for, its requirements, input parameters, output and/or return codes.
In short, describe it as a "black box": what goes in, what comes out, and how are the two related.
Читайте также: