4

Excelでセル範囲を変更する必要があるVBAにUDF(ユーザー定義関数)があります。

UDF ではこれができないため、イベント呼び出しを使用してみました。

カスタム イベントを発生させてセルに書き込もうとすると、#Value エラーが発生します。一方、 などのアプリケーション イベントは Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)、セルに書き込むことができます。

私の質問は、UDF を呼び出して他のセルを更新する方法です。

4

2 に答える 2

9

拘束を回避する方法は次のとおりです。間接的に行う必要があります。Excelからコピーされたメソッド- ユーザー定義関数からセルを埋める方法は? :

標準モジュールでは:

Public triggger As Boolean
Public carryover As Variant
Function reallysimple(r As Range) As Variant
    triggger = True
    reallysimple = r.Value
    carryover = r.Value / 99
End Function

ワークシート コード:

Private Sub Worksheet_Calculate()
    If Not triggger Then Exit Sub
    triggger = False
    Range("C1").Value = carryover
End Sub

これは、目的に応じて拡張できます。基本的に、UDF はパブリック変数を更新し、それをWorksheet_Calculateイベントから読み取って、好きなことを行います。

もう 1 つのより複雑な方法は、Excel を自動化し、シェル経由で実行しようとする関数から vbscript ファイルを作成することです。ただし、上記の方法ははるかに信頼性があります。

于 2012-09-19T23:58:29.610 に答える
0

UDF 関数のメソッドを使用して他の関数を呼び出す場合Application.Evaluate、VBA はどの関数が呼び出されたかを認識しないため、シート上のすべて (Values、Steel など) を変更できます。

例:

Sub UDFfunction()
  Evaluate "otherfunc(""abc"")"
End Sub

Public Function otherfunc(ByVal str As String)
  ActiveSheet.Cells(1, 1).Value = str
End Function
于 2016-05-20T10:29:56.640 に答える