Python程序员的资源

22

我已经编写了很多Python代码,因此非常熟悉Python的语法、对象结构等。

有哪些最佳在线指南或资源网站可以为我提供基础知识,以及针对VBA与Python等价功能/特性的比较或查找指南?

例如,我在将Python中简单的List对应到VBA代码方面遇到了问题。我还遇到了数据结构(例如字典)等问题。

有哪些资源或教程可提供指南,以便我将Python功能移植到VBA,或仅从强大的OOP语言背景适应VBA语法?


2
只是好奇...你为什么要学习VBA? - Jiaaro
2
很棒的问题,如果他和我一样,在办公室里成为了一个万能工具人,并需要自动化一些 Excel 程序。 - technomalogical
有很多原因为什么有人想要学习一门新的编程语言。其中许多语言具有非常不同的功能,并在不同的平台上运行,因此了解超过一种语言是有意义的。 - trevorKirkby
8个回答

26

VBA与Python有很大的不同,因此您应该至少阅读所使用的应用程序(Excel、Access等)提供的“Microsoft Visual Basic Help”。

一般来说,VBA具有Python模块的等效物;它们被称为“库”,并且创建起来不像Python模块那么容易。我提到它们是因为库将为您提供可以使用的更高级别的类型。

作为初步提示,有两种类型可以替代listdict

list

VBA具有类型Collection。它默认可用(在库VBA中)。所以你只需要做一个
Dim alist as New Collection
从那时起,您就可以使用它的方法/属性:

  • .Add(item)( list.append(item)),
  • .Count( len(list)),
  • .Item(i)( list [i])和
  • .Remove(i)( del list [i])。非常原始,但它在那里。

您还可以使用VBA Array类型,它像python数组一样是相同类型项目的列表,而不像python数组,您需要使用ReDim来更改其大小(即您无法仅添加和删除项目)

dict

要拥有类似字典的对象,应将Scripting库添加到VBA项目¹中。之后,您可以
Dim adict As New Dictionary
然后使用其属性/方法:

  • .Add(key, item)( dict [key] = item),
  • .Exists(key)( dict.has_key [key]),
  • .Items()( dict.values()),
  • .Keys()( dict.keys()),
    以及您将在对象浏览器²中找到的其他内容。

¹ 打开VBA编辑器(按下Alt+F11)。转到“工具”→“引用”,在列表中选中“Microsoft Scripting Runtime”。

² 要查看对象浏览器,在VBA编辑器中按F2键(或选择“查看”→“对象浏览器”)。


很遗憾,“Microsoft Visual Basic Help”在Office 2011 for Mac上不可用... - oligofren
似乎 VBA 数组更类似于 Python 元组。 - Capi Etheriel
VBA数组更像是一个array.array,因为它是可变的;Python元组是不可变的。在我的看法中,不可变性是一个重要的区别。 - tzot

2

虽然我不是Python程序员,但你可能可以使用Iron Python和Visual Studio运行VSTO。至少这样,你就不必学习VBA语法。


2

2

也许并不完全符合您的需求,但如果您有一些编程背景,这是一个不错的VBA网站。它不是一个“这个=那个”的列表,而是一个问题/解决方案。

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


2

作为Office 2000、2003和VB6的一部分实现的VBA已经被弃用,取而代之的是.Net技术。除非你正在维护旧代码,否则建议使用Python,甚至可以选择IronPython for .Net。如果你选择IronPython,可能需要在处理各种COM对象时编写一些C#/VB.Net辅助类,例如Office中的对象,但除此之外,它应该非常实用和好用。几乎所有Python的优点都在IronPython中了。如果你只是进行一些COM脚本编写,请看看ActiveState发布的内容。我曾经使用过它来做一些COM工作,特别是将Python作为Active Scripting语言(经典ASP)。


我同意使用IronPython的建议。 - Cristian Ciupitu
1
已经被弃用了,但仍然可以在Office 2007和2010中使用。 - James
2
VBA仍然是Office 2010中的主要自动化语言,正如詹姆斯所提到的。我找不到任何信息表明在下一个Office版本中会发生改变。 - technomalogical
1
它也是唯一的跨平台脚本化办公文档...例如,在Mac版Office中没有嵌入Python的方法。 - oligofren

1

我认为列表的等价物在常见用法上应该是数组。 在Python中常用列表的地方,你通常会在VB中使用数组。 然而,与Python列表相比,VB数组非常不灵活,更像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


0
这可能听起来有点奇怪,但因为我是在C ++中学习数据结构的,所以我很难想象如何在没有指针的情况下创建它们。VB6 / VBA 中的某些东西让我感觉不自然。无论如何,我发现MSDN的这个部分有几个用VBA编写的数据结构示例,我发现它非常有用。

使用类模块创建动态数据结构


0
"我在将Python的简单列表与VBA中的某个内容相互对应方面遇到了困难..."
这并不是学习语言的最佳方式。从某种程度上说,你放弃了Python的很多重要部分,因为在VBA中没有类似的东西。
如果在VBA中没有类似于Python列表的东西,那么就要面对新的东西了。而新的东西恰恰是Python的重要价值所在。
Python的内置类型的前几个部分可能与VBA的对应不好。这使得学习变得艰巨。但是,仅限于只学习VBA中出现的内容会阻碍学习的进展。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接