Скрытые ловушки VBA

Этот вопрос предназначен для увеличения Скрытого вопроса о Функциях в Скрытых функциях VBA

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

Перечислите что-либо, что могло бы быть описано как

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

5
задан 2 revs 23 May 2017 в 12:01
поделиться

3 ответа

Поскольку я некоторое время писал VB.net, для меня всегда было проблемой ставить префиксы строк назначения объектов с помощью Set , например

Dim d as Object
Set D = CreateObject("SomethingUseful")

вместо просто

D = CreateObject("SomethingUseful")

, что IDE не будет жаловаться, но вы получите ошибку времени выполнения (ссылка на объект не установлена).

Но это в основном разница между VB.Net/VB6, а не особенно с VBA.

3
ответ дан 13 December 2019 в 22:05
поделиться

Весь язык?

Эх, я буду конкретен: тот факт, что:

  • x = f (y)
  • f (y)
  • fy
  • Call f (y)

Все они имеют слегка разную семантику, в зависимости от того, является ли f функцией или Sub и является ли y ByRef или ByVal .

То есть, если f является функцией:

  • x = f (y) делает то, что вы ожидаете
  • f (y) вызывает f и отбросить возвращаемое значение, но если y равно ByRef , оно будет передано ByVal как особый случай
  • fy - это синтаксическая ошибка
  • Вызов f (y) выполняется так же, как f (y) выше, но без предупреждения ByVal

С другой стороны, если f - это Sub :

  • f (y) - синтаксическая ошибка
  • fy верна
  • Вызов f (y) - это синтаксическая ошибка

Ура!

4
ответ дан 13 December 2019 в 22:05
поделиться

Для любых вызовов API в 64-битной системе или в Office 2010 x64 вам придется переписать свой код. Вы все еще можете записать его в более ранних версиях VBA и для более ранних версий VBA, но вам необходимо использовать переменные условной компиляции VBA7 и / или Win64. Например:

#If VBA7 Then
   Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
   Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Вот статья об этом http://msdn.microsoft.com/en-us/library/ee691831 (office.14) .aspx

3
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: