我已经编写了很多Python代码,因此非常熟悉Python的语法、对象结构等。
有哪些最佳在线指南或资源网站可以为我提供基础知识,以及针对VBA与Python等价功能/特性的比较或查找指南?
例如,我在将Python中简单的List对应到VBA代码方面遇到了问题。我还遇到了数据结构(例如字典)等问题。
有哪些资源或教程可提供指南,以便我将Python功能移植到VBA,或仅从强大的OOP语言背景适应VBA语法?
我已经编写了很多Python代码,因此非常熟悉Python的语法、对象结构等。
有哪些最佳在线指南或资源网站可以为我提供基础知识,以及针对VBA与Python等价功能/特性的比较或查找指南?
例如,我在将Python中简单的List对应到VBA代码方面遇到了问题。我还遇到了数据结构(例如字典)等问题。
有哪些资源或教程可提供指南,以便我将Python功能移植到VBA,或仅从强大的OOP语言背景适应VBA语法?
VBA与Python有很大的不同,因此您应该至少阅读所使用的应用程序(Excel、Access等)提供的“Microsoft Visual Basic Help”。
一般来说,VBA具有Python模块的等效物;它们被称为“库”,并且创建起来不像Python模块那么容易。我提到它们是因为库将为您提供可以使用的更高级别的类型。
作为初步提示,有两种类型可以替代list
和dict
。
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键(或选择“查看”→“对象浏览器”)。
array.array
,因为它是可变的;Python元组是不可变的。在我的看法中,不可变性是一个重要的区别。 - tzot虽然我不是Python程序员,但你可能可以使用Iron Python和Visual Studio运行VSTO。至少这样,你就不必学习VBA语法。
也许并不完全符合您的需求,但如果您有一些编程背景,这是一个不错的VBA网站。它不是一个“这个=那个”的列表,而是一个问题/解决方案。
作为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)。
我认为列表的等价物在常见用法上应该是数组。 在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
' 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"