Tag: class

VBA:variables别名

重新构build了这个问题:我使用了一个范围(包含头文件)来定义一个数组,我初始化并从表中提取数据。 事情进展顺利(冗余和重复代码),但我可以直接写入数组到Excel行。 但是代码需要validation和初始化,因此我将其迁移到封装了两个需求的类中。 dynamic实现需要用InsertLines重写类。 问题是,现在我有一个类的数据,但我不知道如何写它到一个单一的行。 以前的algorithm: Dim MyRange as Range Dim sTR() as string 'set myrange to a specific range of cells' 'Redim the sTR array to match the number of unique variables in the range 'Extract values from multiples rows in a table to the sTR array' 'Write the array to the Excel file […]

Excel VBA:来自太多未被破坏的对象的溢出错误?

在大数据集上执行优化任务时,我会不时收到溢出运行时错误6(通常在1小时或2小时后)。 当我从macros停止的位置重新启动我的macros时,错误消失,即从发生错误的地方再次启动macros。 溢出错误是否与创build太多使用后不能正确销毁的对象有关? 下面是我的容器类的一个(简化版本),它被销毁(通过Set … = Nothing)和重build(通过Set … = New)成千上万次。 'CG_data_point custom collection class Public data_points As Collection Private Sub Class_Initialize() Set data_points = New Collection End Sub Public Sub AddDataPoint(mydate as date, price as double) Dim new_data_point As CG_data_point Set new_data_point = New CG_data_point new_data_point.EnterData mydate, price data_points.Add new_data_point Set new_data_point = Nothing 'I […]

如何在子中创build一个新的对象,并将其分配给一个参数?

我在vba中有以下代码,excel。 首先,我创build了“List”类: Public next as List Public val as Integer 接下来我想这样做 Sub Test() Dim ls as List Set ls = new List Set_val ls.next, 8 Debug.Print (ls.next is Nothing) 'True – why? Debug.Print ls.next.val 'Error end sub Sub Set_val(l as List, v as Integer) Set l = new List l.val = v end sub 但它不工作,我得到错误消息“对象或块variables未设置的variables”。 […]

如何在VBA中为类模块声明静态variables?

我想跟踪Excel-VBA中的特定类的所有实例,如VB.Net中的静态成员。 所以这是我的class级模块: ClassModule:clsClass Private pName as String 'Static pCount Commented as it doesnt work Property Set Name(arg as String) pName=arg End Property Private Sub Class_Initialize() 'pCount = pCount + 1 Commented as it doesnt work End Sub Public Function GetCount() GetCount = pCount End Function 和我的通用模块模块:Module1 Sub ABC() Dim instance1 As New clsClass Dim instance2 […]

使用ClassModule属性添加数组键

我有一个ClassModule包含私有属性m_Invalid() as String 。 我需要的是两个属性,一个允许公共访问获得整个数组,一个允许私人访问添加一个键到数组。 我已经想出了这个,但如果我尝试使用AddInvalid( Me.AddInvalid ("Test")我得到一个编译错误 – 属性的用户无效 有人知道我在做什么错吗? 谢谢, Public Property Get Invalid() As String() Invalid = m_Invalid End Property Public Property Let AddInvalid(ByVal Value As String) Dim ArrayLength As Integer ArrayLength = UBound(m_Invalid) ReDim Preserve m_Invalid(ArrayLength) m_Invalid(ArrayLength) = Value End Property

后续的VBAinheritance通过build设,构造不工作?

这是这个问题的后续。 这里是我的用例:我想比较两个Excel文件逐个单元格,并突出显示不同的单元格。 每个文件将有几张纸,每张纸都有几列,每一列都有一个标题和几个值(如典型值)。 以下是比较代码的草稿活动图: 活动图 这是我的草图类图: 类图 我的目标是让VBA对于我经常使用的types(比如电子表格的新旧版本)来说不那么麻烦。 也就是说,我希望它能像Python一样工作…特别是,我想写这样的代码: For Each Sheet1 In File1 Name1 = Sheet1.Name If File2.sheet_dict.Exists(Name1) Then Sheet2 = File1.Sheets(File2.sheet_dict(Name1)) Sheet2.Checked = True For Each Col1 In Sheet1.cols hdr = Col1.Header If Sheet2.header_dict.Exists(hdr) Then Col2 = Sheet2.cols(Sheet2.header_dict(hdr)) Col2.Checked = True For Each Val1 In Col1.Vals Val2 = Col2.Vals(Val1.row_number) Val2.Checked = True If […]

如何在VBA中实现自定义迭代类

我想添加一个function到我的类,所以我可以用它们为每个循环。 我写了hashmaps,arraylists,队列,集合等,我想迭代。 现在我正在寻找一种方法来实现IUnknown类来构build自定义迭代器。 我已经知道如何使用 private objPeople as Collection Public Property Get NewEnum() As IUnknown Attribute NewEnum.VB_UserMemId = -4 Attribute NewEnum.VB_MemberFlags = "40" Set NewEnum = objPeople.[_NewEnum] End Property 但是那里的所有例子都是基于Collection类的,我不想使用它们。 我想要关注的是试图实现IUnknown接口,但我还没有find任何有关如何做到这一点的参考。 我在Java,C ++,C#等方面拥有丰富的经验,所以我认为即使在VBA中也有这样的实现方式,甚至可以用API调用这样的东西。

对于Excel VBA中的每个类属性

我有一些看起来像这样的代码: pos.Clutch = sh2.Cells(R, Clutch) pos.Wiper = sh2.Cells(R, Wiper) pos.Alternator = sh2.Cells(R, Alternator) pos.Compressor = sh2.Cells(R, Compressor) … pos.Telephone = sh2.Cells(R, Telephone) poss.Add pos poss是一个集合,Clutch,Wiper等是列索引(从1开始)。 这目前的作品,但非常丑陋。 我正在寻找一种方法来做这样的事情… Do While i <= classProperty.count For each classProperty in pos classProperty = sh2.Cells(R + 1, i) Next classProperty Loop 显然,这不会工作,但没有人有任何build议,如何做一个方法或集合内类将完成大致相同?

我是否必须在VBA类对象中有重复值?

我已经在excel中使用VBA类模块了一段时间,但我不确定我是否正确地创build它们。 我通常为类创build模块级variables,然后是属性让和获取函数。 例如: Private msRegion As String Property Get Region() As String Region = msRegion 'Return the Region End Property Property Let Region(ByVal sRegionName As String) msRegion = sRegionName 'Set the Region End Property 当我查看本地窗口中的对象时,我注意到,对于每个属性,我最终得到了模块作用域variables和Let函数所需的variables。 这似乎是重复一个variables给我。 我担心的是,如果我在每个对象中安装了大量的对象,那么在资源方面可能代价很高。 我试图修改代码,只有一个variables在对象类中,但到目前为止,我只有我的痛苦的错误信息。 有没有人知道一种方法来创build不会导致重复variables的类模块中的属性? 编辑: 我刚刚看了一下我的本地窗口,意识到财产让我们的论据不存在。 2expression式似乎是私有存储的variables,并且特权获得值,在这种情况下msRegion和Region。 这符合Cor_Blimey的回答。

VBA Class()对象作为另一个类的属性

我试图创build一个类来容纳可变数量的项目(这本身就是另一个类对象)。 所以,我有第二类: '2类包含每个单独的报价单元(OTC和MRC) 私人pOTC作为string 私人pMRC作为string 公共属性获取OTC()作为string OTC = POTC 最终财产 公共财产让OTC(价值作为string) pOTC =值 最终财产 公共属性获取MRC()作为string MRC = pMRC 最终财产 公共财产让MRC(价值作为string) pMRC =值 最终财产 然后Class 1包含一个Class 2的数组: 私人pCurr作为string 私人pQuote(20)作为Class2 公共属性获取Curr()作为string Curr = pCurr 最终财产 公共财产让Curr(值作为string) pCurr =值 最终财产 Public Property Set Quote(Index As Integer,cQuote As Class2) 设置pQuote(Index)= cQuote 最终财产 公共属性获取报价(索引整数)作为Class2 Quote = pQuote(Index) 最终财产 而我想要做的是这样的: Dim […]