0

計算に使用する XLA があり、これらの計算で使用する変数を Name Manager で作成したいと考えています。ranged という名前のものが既に存在するかどうかを確認し、存在しない場合はユーザーに値を割り当てさせたいと思います。Name Manager を設定するために使用している Sub() があります - 以下の例 - :

Public Sub SetNames()
On Error Resume Next
   IsRangeName = CheckName("test")

If IsRangeName = Empty Then
   Application.ThisWorkbook.Names.Add Name:="test", RefersTo:=0
End If

End Sub

「マクロ」メニューに移動して SetNames ルーチンを実行すると、動作し、Name Manager で test = 0 が設定されます。

ただし、関数を介してこれを実行し、変数が存在する場合は関数が名前マネージャーの変数を使用できるようにし、変数が存在しない場合は、それらの値を名前マネージャーの初期値に設定します。サブルーチン。

次のコードを実行しようとすると、Name Manager で値が設定されません。

Sub Function1()
   Call SetNames()

   -Do Other Things-

End Function

すべての名前はグローバル変数として宣言されています。

その目的は、ユーザーにアドインをインストールさせ、アドインを使用した最初の関数呼び出しで Name Manager を設定して、名前を初期化するか、ユーザーが初期値を設定できるようにすることです。ユーザーが [マクロ] リボン オプションを使用してサブルーチンを実行し、Name Manager 名を初期化することは望ましくありません。

これに関する助けをいただければ幸いです。

4

2 に答える 2

0

スクリプトに「CheckName」が何であるかわかりません-あなたはそれを提供しませんでした..しかし、私はそれを次の方法で機能させました:

1) On Error Resume Next をコメント アウトします。これにより、CheckNames の失敗を確認できます。

2) CheckNames をループに置き換えて、定義された名前をループスローし、自分の名前を探します。

3)「関数」定義を「サブ」から「関数」に変更します。

テストして、正常に動作します。「テスト」名が存在しない場合は設定します。手動で別の値に変更し、再度実行してください。触れません。

  Public Sub SetNames()
  'On Error Resume Next
    For i = 1 To Application.ThisWorkbook.Names.Count
      If Application.ThisWorkbook.Names(i).Name = "test" Then
         IsRangeName = True
         Exit For
      End If
    Next i

  If Not IsRangeName Then
     Application.ThisWorkbook.Names.Add Name:="test", RefersTo:=1
  End If

  End Sub

  Function Function1()
     Call SetNames

     '-Do Other Things-

  End Function
于 2015-02-09T20:42:44.357 に答える