Ресурсы для программистов Python

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

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

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

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


person Community    schedule 16.09.2008    source источник
comment
просто любопытно ... зачем вы пытаетесь выучить vba?   -  person Jiaaro    schedule 17.09.2008
comment
Отличный вопрос, и если он чем-то похож на меня, он в конечном итоге становится мастером на все руки в офисе, и ему нужно автоматизировать какую-то ерунду с Excel.   -  person technomalogical    schedule 17.01.2013
comment
Есть множество причин, по которым кто-то захочет изучить новый язык программирования. Многие из них имеют очень разные возможности и функционируют на разных платформах, поэтому имеет смысл знать более одного языка.   -  person trevorKirkby    schedule 07.01.2014


Ответы (8)


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 (элемент)),
  • .Count (len (список)),
  • .Item(i) (список [i]) и
  • .Remove(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 ()),
    и другие, которые вы найдете в Object Browser².

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

² Чтобы увидеть обозреватель объектов, в редакторе VBA нажмите F2 (или «Просмотр» → «Обозреватель объектов»).

person tzot    schedule 09.10.2008
comment
К сожалению, справка Microsoft Visual Basic недоступна в Office 2011 для Mac ... - person oligofren; 09.02.2014
comment
похоже, что VBA Array больше похож на кортежи Python. - person Capi Etheriel; 13.09.2014
comment
Α VBA Array больше похож на array.array, потому что он изменяемый; кортежи python неизменяемы. Неизменяемость - главное отличие моей книги. - person tzot; 13.09.2014

Это руководство не предназначено для программистов на Python, но я думаю, что это довольно хороший ресурс по vba:

http://www.vbtutor.net/VBA/vba_tutorial.html

Этот сайт рассматривает реальный пример использования списков:

http://www.ozgrid.com/VBA/count-of-list.htm

person Jiaaro    schedule 16.09.2008

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

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

person Community    schedule 16.09.2008

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

person Sam Corder    schedule 16.09.2008
comment
Я согласен с предложением IronPython. - person Cristian Ciupitu; 17.09.2008
comment
Возможно, устарело. Но он по-прежнему доступен в Office 2007 и 2010. - person James; 29.06.2010
comment
Как сказал Джеймс, VBA по-прежнему является основным языком автоматизации в Office 2010. Я не могу найти информации об обратном, что это изменится в следующем выпуске Office. - person technomalogical; 17.01.2013
comment
Кроме того, это единственная кросс-платформа для написания сценариев офисных документов ... Например, невозможно встроить Python в Office для Mac. - person oligofren; 09.02.2014

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

person JonnyGold    schedule 09.10.2008

Я думаю, что эквивалентом списков были бы массивы с точки зрения общего использования. Если в 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

person molasses    schedule 08.10.2008

«У меня проблемы с приравниванием простого списка в Python к чему-то в VBA ...»

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

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

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

person S.Lott    schedule 17.09.2008

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

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

person CtrlDot    schedule 09.10.2008