2017-04-24 64 views
0

このエラーの検索はすべて役に立ちませんでした。これは簡単なはずです...私の簡単なモジュール[FTAという名前]には次のコードが含まれています:VBA - ユーザー定義型が定義されていません

モジュールはきれいにコンパイルされます。次に、関数によって返された型メンバーの1つにワークシートのセル値を設定しようとすると、私は以下の構文を使用します。

=test.added(1,2)

それは、ポップアップ・エラーおよびセルを表示し#NAME「定義されていないユーザー定義型」になり?。 正しい値3を表示するにはどうすればよいですか? これは些細な数学ではなく、Typeを返す関数を呼び出して、そのタイプのメンバーをワークシートに使用できるかどうかについてです。あなたはその後、使用することができます

Public Type AddMult 
    Added As Double 
    Multiplied As Double 
End Type 

Function test(A As Double, B As Double) As AddMult 
    test.Added = A + B 
    test.Multiplied = A * B 
End Function 

Function test_added(A As Double, B As Double) As Double 
    test_added = test(A, B).Added 
End Function 

Function test_multiplied(A As Double, B As Double) As Double 
    test_multiplied = test(A, B).Multiplied 
End Function 

を:私のExcelはあなたがたUDFとして使用可能である二つの機能を作成することができ、その後、それらの機能のそれぞれは、例えば、既存のものを起動している2010年

+1

返すためにAddMultからの値を参照するには、オプションのブールを使用しています。 UDFから複数の値を返す場合は、配列ではなく型を返す必要があります。 –

+0

2提案に感謝しますが、私の問題はより複雑です。私の真のUDFは、スカラー、ブール値、文字列などが混在した型を返します。個々の型メンバーを個別に返すために別々のVBA関数を書くのは避けたいです。ワークシートが私のVBAパブリック・タイプを認識しないか、またはUDFがそのタイプのオブジェクトを戻すという事実はないようです。ワークシートにそのことを「教える」方法を教えてください。 VBAは構文 "test(1,2).Added"を受け付けているようですが、ワークシートにはありません。どうして? – Gershon

+0

あなたのタイプを認識するようにExcelに教えることはできません。物語の終わり。 – YowE3K

答えて

1

のOffice Professional Plusのの一部です。 Excelセル内の=test_added(1,2)

0

これはYowE3Kに追加されていますが、その例は実際には最適です。 これは、VBAは、UDFのでそのように動作しません

Public Type AddMult 
    Added As Double 
    Multiplied As Double 
End Type 

Function test(A As Double, B As Double, Optional returnMulti As Boolean = False) As Double 
Dim am As AddMult 
    am.Added = A + B 
    am.Multiplied = A * B 
    If returnMulti = True Then 
     test = am.Multiplied 
    Else 
     test = am.Added 
    End If 
End Function 
関連する問題