Python程序员的资源

时间:2008-09-16 20:48:06

标签: python vba porting

我在Python中编写了很多代码,因此我非常习惯Python的语法,对象结构等。

为我提供基础知识的最佳在线指南或资源网站是什么,以及VBA与Python中具有等效功能/特性的比较或查找指南。

例如,我无法将Python中的简单List与VBA代码等同起来。我也遇到数据结构问题,例如字典等等。

哪些资源或教程可以为我提供将python功能移植到VBA的指南,或者只是从强大的OOP语言背景中调整VBA语法?

8 个答案:

答案 0 :(得分:23)

VBA与Python完全不同,因此您应该至少阅读您将要使用的应用程序提供的“Microsoft Visual Basic帮助”(Excel,Access ...)。

一般来说,VBA相当于Python模块;它们被称为“库”,它们不像Python模块那样容易创建。我提到它们是因为Libraries将为您提供可以使用的更高级别的类型。

作为初创微调,有两种类型可以替代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数组类型,类似于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(或视图→对象浏览器)。

答案 1 :(得分:2)

本教程不适用于“python程序员”,但我认为这是一个非常好的vba资源:

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

这个网站使用列表覆盖了一个真实的例子:

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

答案 2 :(得分:2)

可能不完全是你想要的,但如果你有一些编程背景,这是一个不错的VBA网站。这不是一个列表,而是更多的问题/解决方案

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

答案 3 :(得分:2)

作为Office 2000,2003和VB6的一部分实现的VBA已被弃用,转而使用.Net技术。除非你保持旧的代码坚持python或甚至可以使用IronPython for .Net。如果你去IronPython,你可能不得不在这里和那里编写一些C#/ VB.Net帮助程序类,当处理Office中的各种COM对象时,否则它应该是非常实用和漂亮的。几乎所有Python的好处都在IronPython中结束了。如果您只是在做一些COM脚本,请查看ActiveState发布的内容。我过去曾用它做一些COM工作。特别是使用Python作为活动脚本语言(经典ASP)。

答案 4 :(得分: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

答案 5 :(得分:1)

虽然我不是Python程序员,但您可以使用Iron Python和Visual Studio运行VSTO。至少在这种情况下,您不必学习VBA语法。

答案 6 :(得分:0)

  

“我在等同一个简单的问题上遇到了麻烦   在Python中列出的东西   VBA ...“

这不是学习该语言的最佳方式。在某种程度上,你放弃了大量的Python,因为在VBA中没有类似的东西。

如果在VBA中没有像Python列表那样的东西,那么 - 好吧 - 这是新的东西。而新的将是Python部分的重要价值。

Python Built-in Types的第一部分可能无法很好地映射到VBA。这使学习看起来令人生畏。但是将自己限制在VBA中出现的东西往往会妨碍学习。

答案 7 :(得分:0)

这可能听起来很奇怪,但是由于我在C ++中学习了数据结构,所以我很难搞清楚如何在没有指针的情况下创建它们。有一些关于VB6 / VBA的东西让他们觉得不自然。无论如何,我遇到了MSDN的这一部分,它有几个用VBA编写的数据结构示例。我发现它很有用。

Creating Dynamic Data Structures Using Class Modules