1

Nameクラスに素敵な Excel 関数プロパティを追加するようなことをしたいと思いますWorkBook。これを行う良い方法はありますか?

より詳細な問題: VBA では、数式を Excel ワークシートの範囲に割り当てることができます。私はそうしたいと思っており、wb私のコードで呼び出されるオブジェクトである 2 番目のワークブックを数式で参照したいと考えています。次にwb.Name、式を範囲に割り当てる際に使用します。

問題wb.Nameは、単一引用符が含まれている場合に発生します。次に、次のようなものになります。

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

ワークブック名​​の一重引用符が最初の一重引用符と一致するため、失敗します。

私が望むのは、FunNameプロパティWorkBook内のすべての一重引用符を 2 つの一重引用符に置き換えてName返すクラスのプロパティです。次に、上記の式は次のように適切に巻き上げられます

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

4 に答える 4

3

ワークブック クラスを拡張するために別のクラスを作成する必要はありません。次のように、既存の ThisWorkbook クラス モジュールにプロパティを追加できます。

Public Property Get FunName() As String

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

End Property

ThisWorkbook.FunName次に、クリーンアップされた名前を取得するために呼び出します。ただし、このコードは手元のブックに存在する必要があります。どのワークブックでも機能させたい場合は、関数が最適です。

于 2008-12-19T22:31:07.647 に答える
1

最終的な答えは、WorkBookクラスを拡張して、Excelの数式に適したnameプロパティを含めることができるということです。これは、dbbが提供する方法を使用して実行できます。ただし、VBAは継承をサポートしていないため、拡張クラスのオブジェクトには、定義したプロパティのみが含まれます。

したがって、関数を使用する方が実際には理にかなっています。これが私が使用しようとしているものです:

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

ワークシート名とワークブック名​​の両方に適用します。

于 2008-11-12T23:14:42.090 に答える
1

一重引用符を二重にするために置換を行うだけです

WorksheetName = Replace(WB.Name, "'", "''")
于 2008-11-12T19:35:34.873 に答える
1

必要なのは Workbook オブジェクトを拡張する Class です。クラスモジュールを挿入してから、次のコードを試してください

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

おまけとして、クラスの一番上にある Dims WB という行に WithEvents を入れたことに注意してください。これにより、WB に発生するすべてのイベントをトラップできます。上記のデモとして Calculate イベントを含めました。クラス コード内で、コード ペインの左上にあるオブジェクト ドロップダウンをクリックすると、WB オブジェクトが表示されます。これをクリックすると、右側のリスト ボックスに選択可能なすべてのイベントが表示されます。

于 2008-11-12T22:25:02.457 に答える