Подтвердить что ты не робот

VBA: ресурсы для программиста на Python

Я написал много кода в Python, и я очень привык к синтаксису, структуре объекта и т.д. из-за этого Python.

Каков наилучший онлайн-справочник или ресурсный сайт, чтобы предоставить мне основы, а также руководство по сопоставлению или поиску с эквивалентными функциями/функциями в VBA и Python.

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

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

4b9b3361

Ответ 1

VBA сильно отличается от Python, поэтому вы должны прочитать хотя бы "Справка Microsoft Visual Basic", предоставленную приложением, которое вы собираетесь использовать (Excel, Access...).

Вообще говоря, VBA имеет эквивалент модулей Python; они называются "Библиотеки", и их не так легко создать как модули Python. Я упоминаю их, потому что библиотеки будут предоставлять вам типы более высокого уровня, которые вы можете использовать.

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

list

VBA имеет тип Collection. Он доступен по умолчанию (он находится в библиотеке VBA). Итак, вы просто делаете dim alist as New Collection
и с тех пор вы можете использовать его методы/свойства:

  • .Add(item) (list.append(item)),
  • .Count (len (list)),
  • .Item(i) (список [i]) и
  • .Remove(i) (del list [i]). Очень примитивный, но он есть.

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

dict

Чтобы иметь словарь-подобный объект, вы должны добавить библиотеку сценариев в свой проект VBA¹. Впоследствии вы можете Dim adict As New Dictionary
а затем использовать его свойства/методы:

  • .Add(key, item) (dict [key] = item),
  • .Exists(key) (dict.has_key [ключ]),
  • .Items() (dict.values ​​()),
  • .Keys() (dict.keys()),
    и другие, которые вы найдете в обозревателе объектов.

¹ Открыть редактор VBA (Alt + F11). Перейдите в раздел "Инструменты" → "Ссылки" и отметьте "Runtime Microsoft Scripting Runtime" в списке.

² Чтобы просмотреть обозреватель объектов, в редакторе VBA нажмите F2 (или View → Object Browser).

Ответ 3

Вероятно, не совсем то, что вы ищете, но это приличный сайт VBA, если у вас есть некоторый фон программирования. Это не список этого =, а больше проблемы/решения

http://www.mvps.org/access/toc.htm

Ответ 4

VBA как в том, что было реализовано как часть Office 2000, 2003 и VB6, устарели в пользу технологий .Net. Если вы не поддерживаете старый код для python или, может быть, идите с IronPython для .Net. Если вы запустите IronPython, вам, возможно, придется писать некоторые вспомогательные классы С#/VB.Net здесь и там, когда работаете с различными COM-объектами, такими как те, что находятся в Office, но в остальном он должен быть довольно функциональным и приятным. Почти все добро на Python закончилось в IronPython. Если вы просто выполняете некоторые скрипты COM, взгляните на то, что ActiveState выпускает. Я использовал его в прошлом, чтобы выполнить некоторую работу COM. В частности, использование Python в качестве активного языка сценариев (классический ASP).

Ответ 5

Я думаю, что эквивалент списков будет массивом с точки зрения общего использования. Где обычно используется список в Python, вы обычно используете массив в VB. Тем не менее, массивы VB очень негибкие по сравнению с списками Python и больше похожи на массивы в C.

' An array with 3 elements
'' The number inside the brackets represents the upper bound index
'' ie. the last index you can access
'' So a(2) means you can access a(0), a(1), and a(2) '

Dim a(2) As String
a(0) = "a"
a(1) = "b"
a(2) = "c"

Dim i As Integer
For i = 0 To UBound(a)
    MsgBox a(i)
Next

Обратите внимание, что массивы в VB не могут быть изменены, если вы объявляете начальное число элементов.

' Declare a "dynamic" array '

Dim a() As Variant

' Set the array size to 3 elements '

ReDim a(2)
a(0) = 1
a(1) = 2

' Set the array size to 2 elements
'' If you dont use Preserve then you will lose
'' the existing data in the array '

ReDim Preserve a(1)

Вы также встретите различные коллекции в VB. например. http://devguru.com/technologies/vbscript/14045.asp

Словари в VB могут быть созданы следующим образом:

Set cars = CreateObject("Scripting.Dictionary")
cars.Add "a", "Alvis"
cars.Add "b", "Buick"
cars.Add "c", "Cadillac" 

http://devguru.com/technologies/vbscript/13992.asp

Ответ 6

Пока я не программист на Python, вы можете запустить VSTO с Iron Python и Visual Studio. По крайней мере, вам не придется изучать синтаксис VBA.

Ответ 7

"У меня возникают проблемы приравнивания простого Список в Python с чем-то в VBA..."

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

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

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

Ответ 8

Это может показаться странным, но поскольку я изучил структуры данных на С++, мне было очень трудно понять, как их создавать без указателей. Там что-то о VB6/VBA, что заставляет их чувствовать себя неестественно для меня. В любом случае, я столкнулся с этим разделом MSDN, который имеет несколько примеров структуры данных, написанных в VBA. Я нашел это полезным.

Создание динамических структур данных с использованием модулей классов