Tag:

VBA错误:相同属性的属性过程的定义不一致,或者属性过程有一个可选参数

我有一个非常简单的类定义。 课表作者定义如下: Option Explicit 'Works off of the ActiveCell 'Helps you write data into the cells Private pCornerCell As String Public Property Get CornerCell() CornerCell = pCornerCell End Property Public Property Let CornerCell(Value As String) pCornerCell = Value Range(Value).Select End Property 我收到一个编译错误,我不明白。 属性过程的定义不一致,或者属性过程有一个可选参数。 我究竟做错了什么?

Excel VBA将数据写入类模块中的字典

我正在尝试将数据保存在类模块中声明的字典中。 我已经在类模块中使用过一个字典,因为在开始时组的数量和相关的数据点是未知的。 下面的代码编译,但模块和类模块中的dRATIO.exists语句都返回false(但是在第一次传递类模块中的debugging语句给出正确的值,之后的错误),然后Function GetRATIO返回999.任何build议? 'CODE IN A CLASS MODULE CALLED clsIVDATA Option Explicit Public dRATIO Public dIV ' Sub Init(RATIO As Variant, IV As Variant, KEY As String) 'Dim I As Long Dim VAL As String Dim RowKeys Dim COLKEYS Set dRATIO = CreateObject("Scripting.Dictionary") Set dIV = CreateObject("Scripting.Dictionary") dRATIO.ADD ITEM:=RATIO, KEY:=KEY dIV.ADD ITEM:=RATIO, KEY:=KEY Debug.Print […]

如何将对象数组快速写入工作表列?

在一个名为cFoolish的大型多属性类中,就是这个代码片段: ''''' Property Definitions Private pID As Integer Public Property Get ID() as Integer ID = pID End Property 代码模块声明cFoolish对象的1000个元素数组,并且作为更大计划的一部分,要将所有1000个.ID属性写入工作表: Public Sub Test() Dim MyArray(1 To 1000) As New cFoolish Dim rRange As Range Set rRange = ThisWorkbook.Sheets("Test").Range("A1:A1000") Set rRange.Value = MyArray.ID '''''clearly doesn't work! End Sub 对不起,这是我第一个在VBA中使用类的程序,我仍然很笨。 这个想法最终是在工作表“Test”中的范围A1:A1000中填充了cFoolish的1000元素数组中的1000个ID整数。 感谢您的任何帮助! 戴夫

VBA代码在执行时的行为不同

我试图编写代码来处理我的用户窗体上任何combobox的“更改”事件。 我回答了这个问题的答案,并创build了一个单独的类,等等。 但是,它不起作用。 在一个新的项目上使用相同的代码工作正常,这个项目上的代码有时工作,当我使用“一步一步”执行(F8),但使用正常运行时不。 看着其他人类似的困境,我添加了“DoEvents”,但没有帮助。 这是我在UserForm中的代码 Private Sub UserForm_Initialize() Dim ComboBox_Collection As Collection Dim ctrl As Control Dim cbc As ComboBox_Class Set ComboBox_Collection = New Collection For Each ctrl In UserForm1.MultiPage.Pages(2).Controls DoEvents If TypeName(ctrl) = "ComboBox" Then DoEvents Set cbc = New ComboBox_Class Set cbc.Control = ctrl ComboBox_Collection.Add cbc DoEvents End If Next ctrl Set […]

单击类模块中的事件不成功

我有一个用户窗体显示逐行validation错误(在文本框中),我想补充用户的表单标签作为超链接,用户可以点击直接进入有问题的单元格。 我有代码,dynamic地build立标签,并通过类模块添加了一个单击事件,但我不能得到它的类模块中点击事件触发。 我从工作代码中修改了这个代码,这些代码构build了这种types的标签,并且在运行中单击事件,但是代码在用户启动时加载标签,并将每个类对象放入一个集合中。 我不知道是否有必要build立我的解决scheme,但我玩了它,不能得到它的工作。 这里是我的程序,如果需要的话,在用户表单上放置标签。 如果需要validation,它将在另一个过程中运行。 用户窗体比显示,填写消息(这是一个标签,现在创build),如果需要validation。 Sub PlaceLinkLabel(SayWhat As String, WhichSheet As String, WhichRange As String) Dim lblNew As MSForms.Label Set lblNew = frmValidationMessage.Controls.Add(bstrProgID:="Forms.Label.1", Name:=SayWhat, Visible:=True) With lblNew With .Font .Size = 10 .Name = "Comic Sans MS" End With .Caption = SayWhat .Top = 55 .Height = 15 .Left = 465 .Width = […]

如何正确使用VBA类模块的集合?

我想创build一个机场的集合。 机场有许多参数,但为了简单起见,我们假设在机场等级模块中这样定义一个机场等级: 'Class Airport Public name As String ' Stores name of the airport Public flights As Long ' Stores number of flights in that airport 然后我的模块是相当大的,但这是我从一个Excel文件中读取列和存储在机场收集值,删除重复的部分: Dim airports As Collection Set airports = New Collection 'Putting airports in collection Dim c As Range For Each c In wsToCheck.Range("D:D") On Error Resume Next Dim airport […]

将属性添加到现有的VBA类

我想要做一些像添加一个漂亮的Excel函数Name属性到WorkBook类。 有没有一个好的方法来做到这一点? 更详细的问题:在VBA中,您可以将公式分配给Excel工作表中的范围。 我想这样做,我想我的公式引用第二个工作簿,这是在我的代码中称为wb的对象。 然后,我使用wb.Name将公式分配给一个范围。 当wb.Name在wb.Name有一个单引号时出现问题。 然后,你结束了这样的事情: =MONTH('[Ryan's WB]Sheet1'A1) 在电子表格中失败,因为工作簿名称中的单引号与第一个单引号相匹配。 我想要的是一个FunName类的FunName属性,用两个单引号replaceName属性中的所有单引号并返回。 那么上面的公式就会很适合 =MONTH('[Ryan''s WB]Sheet1'A1)

VBA将对象传递给另一个对象集合

我有一套业主,每个业主都有各自的机会。 我有两个类模块,具有一堆属性的ClmOpportunity和具有单个名称属性的ClmOwner和存储ClmOpportunity对象的Collection: Public name As Variant Private opps As New collection Public Function addOpportunity(opp As ClmOpportunity) opp.ID = opps.Count + 1 opps.Add opp, opps.Count + 1 End Function 这些所有者对象也被存储在我的主模块的集合中。 当我尝试使用addOpportunity函数时,如下所示: Dim item As New ClmOpportunity item.name = "test" owners.item(overallOwner).addOpportunity (item) 我得到的错误: “对象不支持这个属性或方法” 我对VBA很新,我不明白这是为什么,我正在通过一个ClmOpportunity,所以它应该没问题吧? 任何帮助将不胜感激!

VBA中的构造函数 – 运行时错误91“对象variables未设置”

我正在尝试使用面向对象的概念在Excel VBA中编写一些代码。 所以我想用构造函数初始化我的对象,就像我们通常在Java中所做的那样。 但是,我发现在VBA中提供的默认Class_Initialize() Sub不带参数。 经过一番search,我发现这个问题的答案提出了一个很好的select。 这里是我的工厂模块(我命名它造物主 )的一个例子: Public Function CreateTool(ToolID As Integer) As cTool Set CreateTool = New cTool CreateTool.InitiateProperties (ToolID) '<= runtime error 91 here End Function 类cTool : Private pToolID As Integer Private pAttributes As ADODB.Recordset Private pCnn As ADODB.Connection Public Sub InitiateProperties(ToolID As Integer) Dim sSQL As String Set pCnn = […]

用vba中的用户定义的类对象的每个循环

代码在这里,你得到每个语句的第一行所需的运行时错误'424'对象 Public Sub test() Dim a As clsTest Dim dic As Dictionary Dim tmpObj As clsTest Set dic = New Dictionary Set a = New clsTest dic.Add "1", a dic.Add "2", New clsTest dic.Add "3", New clsTest For Each tmpObj In dic.Items '–<< error: Run-time error '424' Object required Debug.Print tmpObj.i Next tmpObj Stop End […]