【问题标题】:Resources for Python Programmer [closed]Python程序员的资源[关闭]
【发布时间】:2010-09-09 18:21:46
【问题描述】:

我用 Python 写过很多代码,也因此非常习惯 Python 的语法、对象结构等。

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

例如,我无法将 Python 中的简单列表等同于 VBA 代码。我也有数据结构的问题,比如字典等等。

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

【问题讨论】:

  • 只是好奇...你为什么要学习 vba?
  • 问得好,如果他和我一样,他最终会成为办公室里的万事通,需要自动化一些 Excel 废话。
  • 人们想要学习一门新的编程语言的原因有很多。他们中的许多人在不同的平台上具有非常不同的能力和功能,因此了解一种以上的语言是有意义的。

标签: python vba porting


【解决方案1】:

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

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

本网站介绍了一个使用列表的真实示例:

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

【讨论】:

    【解决方案2】:

    可能不完全是您正在寻找的,但如果您有一些编程背景,这是一个不错的 VBA 网站。这不是这个=那个的列表,而是更多的问题/解决方案

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

    【讨论】:

      【解决方案3】:

      在 Office 2000、2003 和 VB6 中实施的 VBA 已被弃用,取而代之的是 .Net 技术。除非您维护旧代码坚持使用 python,或者甚至使用 IronPython for .Net。如果您使用 IronPython,则在处理各种 COM 对象(例如 Office 中的对象)时,您可能必须在各处编写一些 C#/VB.Net 帮助程序类,否则它应该是非常实用且美观的。几乎所有的 Python 优点都在 IronPython 中结束了。如果您只是在编写一些 COM 脚本,请查看 ActiveState 输出的内容。我过去用它来做一些 COM 工作。特别是使用 Python 作为主动脚本语言(经典 ASP)。

      【讨论】:

      • 我同意 IronPython 的建议。
      • 也许已经贬值了。但它在 Office 2007 和 2010 中仍然可用。
      • VBA 仍然是 Office 2010 中的主要自动化语言,正如 James 所提到的。我找不到相反的信息表明这将在下一个 Office 版本中发生变化。
      • 它也是唯一跨平台的办公文档脚本...例如没有办法在Office for mac中嵌入Python。
      【解决方案4】:

      “我很难将一个简单的 在 Python 中列出一些内容 VBA..."

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

      如果在 VBA 中没有类似于 Python 列表的东西,那么——嗯——它是新的东西。而 new 将是 Python 部分的重要价值。

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

      【讨论】:

        【解决方案5】:

        我认为就常见用法而言,列表的等价物是数组。 在 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

        【讨论】:

          【解决方案6】:

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

          一般来说,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)(删除列表[i])。非常原始,但它就在那里。

          你也可以使用 VBA Array 类型,它像 python 数组是相同类型项目的列表,与 python 数组不同,你需要做ReDim 来改变它们的大小(即你不能只是追加和删除项目)

          dict

          要拥有类似字典的对象,您应该将脚本库添加到您的 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(或查看→对象浏览器)。

          【讨论】:

          • 很遗憾,Office 2011 for Mac 上没有“Microsoft Visual Basic 帮助”...
          • 似乎 VBA Array 更类似于 Python 元组。
          • A VBA 数组更类似于array.array,因为它是可变的; python 元组是不可变的。不变性是我书中的一个主要区别。
          【解决方案7】:

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

          Creating Dynamic Data Structures Using Class Modules

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-10-23
              • 1970-01-01
              • 1970-01-01
              • 2010-10-12
              • 1970-01-01
              • 2010-10-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多