2008-11-12 84 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 

其中我將應用於工作表名稱和工作簿名稱。

相關問題