Я написал много кода на Python, и из-за этого я очень привык к синтаксису, структуре объектов и так далее.
Какой лучший онлайн-справочник или ресурсный сайт, чтобы предоставить мне основы, а также руководство по сравнению или поиску с эквивалентными функциями / функциями в VBA по сравнению с Python.
Например, у меня возникают проблемы с приравниванием простого списка в Python к коду VBA. У меня также есть проблемы со структурами данных, такими как словари и т. д.
Какие доступны ресурсы или учебные пособия, которые предоставят мне руководство по переносу функциональности Python на VBA или просто по адаптации к синтаксису VBA из сильного языкового фона ООП?
Отличный вопрос, и если он чем-то похож на меня, он в конечном итоге становится мастером на все руки в офисе, и ему нужно автоматизировать какую-то ерунду с Excel.
Есть множество причин, по которым кто-то захочет изучить новый язык программирования. Многие из них имеют очень разные возможности и функционируют на разных платформах, поэтому имеет смысл знать более одного языка.






Это руководство не предназначено для программистов на Python, но я думаю, что это довольно хороший ресурс по vba:
http://www.vbtutor.net/VBA/vba_tutorial.html
Этот сайт рассматривает реальный пример использования списков:
Возможно, это не совсем то, что вы ищете, но это достойный сайт VBA, если у вас есть некоторый опыт программирования. Это не список этого = этого, а скорее проблема / решение
VBA, как и то, что было реализовано как часть Office 2000, 2003 и VB6, устарели в пользу технологий .Net. Если вы не поддерживаете старый код, придерживайтесь python или, возможно, даже не переходите на IronPython для .Net. Если вы используете IronPython, вам, возможно, придется писать несколько вспомогательных классов C# / VB.Net здесь и там при работе с различными COM-объектами, такими как объекты в Office, но в остальном он должен быть довольно функциональным и приятным. В IronPython почти все совершенства Python закончились. Если вы просто пишете сценарии COM, посмотрите, что выдает ActiveState. Я использовал его в прошлом для работы с COM. В частности, с использованием Python в качестве языка активных сценариев (классический ASP).
Я согласен с предложением IronPython.
Возможно, устарело. Но он по-прежнему доступен в Office 2007 и 2010.
Как сказал Джеймс, VBA по-прежнему является основным языком автоматизации в Office 2010. Я не могу найти информации об обратном, что это изменится в следующем выпуске Office.
Это также единственная кросс-платформа для создания офисных документов со сценариями ... Например, невозможно встроить Python в Office для Mac.
"I'm having trouble equating a simple List in Python with something in VBA..."
Это не лучший способ выучить язык. В некотором смысле вы отказываетесь от больших частей Python, потому что в VBA нет ничего подобного.
Если в VBA нет ничего лучше списка Python, то ... ну, это что-то новое. И новое было бы значительной ценностью в некоторых частях Python.
Первые части Python Встроенные типы могут не соответствовать VBA. Из-за этого обучение кажется пугающим. Но ограничение себя только вещами, которые появляются в VBA, как правило, мешает обучению.
Я думаю, что эквивалентом списков были бы массивы с точки зрения общего использования. Если в 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"
VBA сильно отличается от Python, поэтому вам следует прочитать хотя бы «Справку по Microsoft Visual Basic», предоставляемую приложением, которое вы собираетесь использовать (Excel, Access…).
Вообще говоря, VBA имеет эквивалент модулей Python; они называются «библиотеками», и их не так просто создать, как модули Python. Я упоминаю о них, потому что библиотеки предоставят вам типы более высокого уровня, которые вы можете использовать.
В качестве толчка при запуске есть два типа, которые можно заменить на list и dict.
listVBA имеет тип Collection. Он доступен по умолчанию (находится в библиотеке VBA). Так что просто сделайте adim alist as New Collection
и с этого момента вы можете использовать его методы / свойства:
.Add(item) (list.append (элемент)),.Count (len (список)),.Item(i) (список [i]) и.Remove(i) (список [i]). Очень примитивно, но оно есть.Вы также можете использовать тип VBA Array, который, как и массивы python, представляет собой списки элементов одного типа, и, в отличие от массивов python, вам нужно сделать ReDim, чтобы изменить их размер (т.е. вы не можете просто добавлять и удалять элементы)
dictЧтобы иметь объект, подобный словарю, вы должны добавить библиотеку сценариев в свой проект VBA¹. Впоследствии вы можете Dim adict As New Dictionary
а затем используйте его свойства / методы:
.Add(key, item) (dict [ключ] = элемент),.Exists(key) (dict.has_key [ключ]),.Items() (dict.values ()),.Keys() (dict.keys ()), ¹ Откройте редактор VBA (Alt + F11). Перейдите в Инструменты → Ссылки и отметьте в списке «Microsoft Scripting Runtime».
² Чтобы увидеть обозреватель объектов, в редакторе VBA нажмите F2 (или «Просмотр» → «Обозреватель объектов»).
К сожалению, «Справка по Microsoft Visual Basic» недоступна в Office 2011 для Mac ...
похоже, что VBA Array больше похож на кортежи Python.
Α VBA Array больше похож на array.array, потому что он изменяемый; Кортежи python неизменяемы. Неизменяемость - главное отличие моей книги.
Это может показаться странным, но, поскольку я изучил структуры данных на C++, мне было очень трудно понять, как их создавать без указателей. В VB6 / VBA есть что-то, что заставляет меня чувствовать их неестественно. Во всяком случае, я наткнулся на этот раздел MSDN, в котором есть несколько примеров структур данных, написанных на VBA. Я нашел это полезным.
Создание динамических структур данных с использованием модулей классов
Хотя я не программист на Python, вы можете запустить VSTO с помощью Iron Python и Visual Studio. По крайней мере, так вам не придется изучать синтаксис VBA.
просто любопытно ... зачем вы пытаетесь выучить vba?