寻找解释vba类使用的参考

时间:2012-10-26 10:40:20

标签: excel vba

我正在学习,现在我正在尝试开始使用课程,因为我发现我的程序太难以使用,而且我总是一遍又一遍地编写类似的代码。

你能推荐一本涵盖中用户定义对象的书吗?因为我发现的所有内容都只是简单介绍了这个主题。

在我搜索这样一本书时,我在找到了许多高级书籍。据我所知,这种语言更“强大”(可用于更广泛的任务)。

4 个答案:

答案 0 :(得分:2)

如果您想了解VBA,请在 VB6 上查找参考资料。您可以找到便宜的很多参考书和书籍。我认为自己非常擅长VBA,这就是我学到很多东西的原因。即使是最新版本的VBA(VBA7)也是VB6的一个子集。关于VB6的大部分内容完全适用于VBA,特别是关于类和UDT(在.NET世界中有点像structs)。

根据我自己的经验,我会说用户定义的类型(使用Type关键字声明)很少有用除了私有用在单个模块中以达到本机目的函数声明,需要指向某个结构的指针。它们的根本缺点是它们无法与Variant进行强制转换,后者是高级VBA的杀手。一旦你习惯了它,用同样的字段快速构建一个类(用VB语言中的类模块)并不太难。

发布脚本:在学习类或用户定义的类型时,这对你没有帮助,所以我只是将其添加为后期脚本:你也可以通过搜索的VBScript 即可。大多数VBScript可以直接粘贴到VBA项目中,它会运行,但有一些小例外,例如无法访问Wscript对象。许多文档示例(如MSXML(用于与XML文件和Internet交互)都显示VBScript,所有这些代码都可以在VBA中使用。

答案 1 :(得分:1)

Getz和Gilbert的VBA开发者手册获得了我的投票。它已经过时了,但你可以在这里获得电子版https://play.google.com/store/books/details/Ken_Getz_Vba_Developer_s_Handbook?id=46toCUvklIQC&feature=null-Mike+Gilbert

这是一个野兽,但是一本好书

答案 2 :(得分:0)

VB.NET是一种完整的编程语言 - 不需要在“Excel”中运行。 有几种方法可以“连接”VB.net和Excel,例如“Com Interop”或将代码集成到工作簿中(我在这里含糊不清,因为我自己从未做过后者)。 易用性很难获得 - 如果您只想使用内部Excel数据,VBA更适合,因为它更快。如果你想从互联网上读取数据,存储/加载数据或构建你自己的UI vb.net会更快,因为VBA可以做所有这些事情,但就像用螺丝刀敲钉子一样钉在墙上。

答案 3 :(得分:0)

你的意思是“我的节目难以使用”? 编写课程不一定能使您的工具更容易使用...
我也没有看到一遍又一遍地使用相同代码的问题,只要你尊重良好实践的一般规则(高性能,动态,透明等等)。

有什么关于课程的知识?
类可以创建标准的封装的对象,其中包含只能通过类函数访问的私有属性( get let )。 您可以将类模块实例化到对象实例中,并创建同一类的多个实例(使用关键字)。
你不能用标准模块做到这一点;即使您可以为标准模块(VBA开发人员主要使用)声明私有属性,也只会存在此变量的一个“副本”。

示例比较:
标准模块: “m_Standard_Module” *

Option Explicit

Private lNumber_Test As Long

Property Get get_Number_Test() As Long
get_Number_Test = lNumber_Test
End Property

Property Let letNumber_Test(param_Number_Test As Long)
lNumber_Test = param_Number_Test
End Property

来自:

Sub test_Standard_Module()

Dim iNumber                     As Integer

'--> This will produce an error, cannot be instantiated! 
'Dim mdlStandard                 as m_Standard_Module 


'Property contained by standard module is unique and cannot be copied.
m_Standard_Module.letNumber_Test = 2
iNumber = m_Standard_Module.get_Number_Test
MsgBox iNumber

End Sub

课程模块:
名为“c_Class_Module”的类

Option Explicit
Private pNumber_Class As Long

Public Property Get number_Class() As Long  
number_Class = pNumber_Class  
End Property  

Public Property Let number_Class(param_Number_Test As Long)    
pNumber_Class = param_Number_Test
End Property

来自:

Sub test_Class()

Dim clsClass_Module1            As c_Class_Module
Dim clsClass_Module2            As c_Class_Module
Dim lNumber1                    As Long
Dim lNumber2                    As Long


'Can instantiate multiple objects!
Set clsClass_Module1 = New c_Class_Module
Set clsClass_Module2 = New c_Class_Module

'property number_Class is copied for each of the class instances  
clsClass_Module1.number_Class = 1
clsClass_Module2.number_Class = 2

iNumber1 = clsClass_Module1.number_Class    
iNumber2 = clsClass_Module2.number_Class    

MsgBox iNumber1 & ", " & iNumber2

Set clsClass_Module1 = Nothing
Set clsClass_Module2 = Nothing

End Sub

所以基本上,只有当你想创建同一类型对象(具有相似属性)的多个实例时,类对象才有用。
无论何时制作工具,首先创建对象模型非常有用,您可以在其中确定所需的对象及其要创建的属性。

请注意,VBA不支持继承,这意味着一个类不能从另一个类“继承”属性(其基本示例将是Employee类将从Person类继承)。它从来没有真正打扰过我。