2008-11-12 83 views
1

我想这样做一个很好的对Excel的功能Name属性添加到WorkBook类。有没有一个好的方法来做到这一点?添加属性,以现有的VBA

更详细的问题:在VBA您可以在Excel工作表中公式分配给一个范围。我想这样做,我希望我的公式引用第二个工作簿,这是我的代码中名为wb的对象。然后我使用wb.Name将公式分配给一个范围。

问题出现时wb.Name中有一个单引号。然后你风像这样的东西:

=MONTH('[Ryan's WB]Sheet1'A1) 
在电子表格中,因为单引号工作簿中的名称相匹配的第一个单引号从而未能

我想要的是WorkBook类的FunName属性,该属性用两个单引号替换Name属性中的所有单引号并返回该属性。接着上面的公式将正常风看起来像

=MONTH('[Ryan''s WB]Sheet1'A1) 

回答

3

您不需要制作单独的类来扩展工作簿类。您可以将属性添加到现有的ThisWorkbook类模块,像这样:

Public Property Get FunName() As String 

    FunName = Replace(Me.Name, "'", "''") 

End Property 

然后调用ThisWorkbook.FunName让你清理的名字。但是,该代码必须存在于手头的工作簿中。如果你想让它在任何工作簿上工作,你的功能就是要走的路。

1

只是做了更换,以加倍的单引号

WorksheetName = Replace(WB.Name, "'", "''") 
0

你需要的是它扩展了工作簿对象的类。插入一个类模块,然后尝试下面的代码

Dim WithEvents WB As Workbook 

Public Sub SetWB(W As Workbook) 
    Set WB = W 
End Sub 

Public Property Get FunName() As String 
    FunName = Replace(WB.Name, "'", "''") 
End Property 

Private Sub WB_SheetCalculate(ByVal Sh As Object) 
    'this runs when WB calculates 
End Sub 

“使用这样的

Dim WB As New wbClass 
WB.SetWB ActiveWorkbook 
CleanedName = WB.FunName 

注意,作为奖励,我已经把WITHEVENTS中,在顶部变暗WB行班上。这可以让您捕获所有发生在WB中的事件,并且我将Calculate事件作为上面的演示包含在内。如果您处于课程代码中并单击代码窗格左上角的对象下拉列表,您将看到WB对象,并且如果单击此对象,则右侧列表框将为您提供所有可供选择的事件。

+0

绝对完美!这正是我所期待的。谢谢! – 2008-11-12 22:37:56

1

最终的答案似乎是工作簿类可以扩展到包括名称属性,它是不错的Excel公式。这可以使用dbb提供的方法完成。但是,由于VBA不支持继承,因此扩展类的对象只具有您为其定义的属性。

因此,只使用一个函数真的更有意义。以下是我要使用的内容:

Function FormulaWorkName(ByVal aName As String) As String 
    FormulaWorkName = Replace(aName, "'", "''") 
End Function 

其中我将应用于工作表名称和工作簿名称。

相关问题