[[20050126142616]] 『セルに付けた名前があるかないかの判別』(shima) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルに付けた名前があるかないかの判別』(shima)

 お世話になります。
 早速ですが…
 処理範囲が違うため各ボタンによって、名前の定義で処理しています。
 そこで、実行時に一旦、名前の削除を行い、再定義を行いました。
 ボタンを実行した時にすでに同じ名前が定義されていればエラーとはならず再定義
 されるのですが、定義済みの名前がなかった場合はエラーとなってしまいます。

 すでに定義された名前があるかないかの判別って出来るのでしょうか?
 もしくは、エラー回避の方法はどうすれば良いでしょうか?

 よろしくお願いいたします。

 マクロの話ですか?
定義された名前を取得するサンプルです。
Sub test()
    Dim i As Integer
    With ActiveWorkbook
        For i = 1 To .Names.Count
            MsgBox .Names(i).Name
            'MsgBox .Names(i).Name & "の範囲は" & .Names(i).RefersTo
        Next
    End With
End Sub
(ご近所PG)忙しめ

 ご近所PGさん、お忙しいところありがとうございます。

 名前の定義されている範囲は3箇所あり、可変なのは1箇所です。
 その可変範囲の名前のみ分かればよいのですが…。

 (shima)

 考え方。

 >すでに定義された名前があるかないかの判別って出来るのでしょうか?
「名前があるかないかの判断」をするにあたって必要なのが何かを考えてみる。
「定義されている全ての名前」を取得できれば、それらを総当りして見ればよい。
その取得方法が上記サンプルに当たります。

 で、

 >名前の定義されている範囲は3箇所あり、可変なのは1箇所です。
取得した名前の中に、その範囲が可変である「とある名前」が存在するかをチェックし、
存在すれば削除。
存在しないなら何もしない。
とすればご希望の動作となるはずです。

 追記:
 >もしくは、エラー回避の方法はどうすれば良いでしょうか?
Delete命令よりも前のどこかで
On Error Resume Next
を記述、
Delete命令直後に
If Err Then Err.Clear
としても良いけど、
個人的にエラーを起こさず処理可能なものに対してエラーで判定するのはあまり好きでは無い…
定義の名前が膨大で全てチェックするのに時間がかかる等、然るべき理由があるならその限りでは無いけれど。
(ご近所PG)応用して欲しかったの。


 そうですね。応用ですよね。(^_^;)

 上記、On Error Resume Next も試したのですが、更に分からなくなってしまったので
 今日は挫折し、人に頼ろうとしてしまいました。

 いずれにせよ、問題の名前以外のものも定義されていなければエラーとなってしまうので
 すべての名前をチェックするようにしたいと思います。
 また、Delete せずに再定義で行うようにしようかな、と思っています。

 ありがとうございました。

 (shima)

 ほい、がんばっちください。
以下は自分ならこうかなというサンプルです。
Sub test()
    Dim strTargetName As String
    Dim blnFlg As Boolean
    '初期設定
    strTargetName = "とある名前"
    blnFlg = False
    '現在アクティブなブックに対して処理
    With ActiveWorkbook 
        For i = 1 To .Names.Count '定義されている名前分ループ
            If .Names(i).Name = strTargetName Then '目的の名前か否か
                blnFlg = True '目的の名前をもつ定義が見つかった
                Exit For 'ループを抜ける
            End If
        Next
        If blnFlg Then '目的の名前をもつ定義が見つかったなら
            If MsgBox(strTargetName & " が定義されてたよ。削除するね。", vbOKCancel) = vbOK Then
                .Names(strTargetName).Delete '削除処理
            End If
        Else
            MsgBox strTargetName & " なんて定義されてなかったよ。大丈夫。"
        End If
    End With
End Sub
(ご近所PG)

 ご近所PGさん、ご丁寧にありがとうございました。
 じっくりと検証してみたら、自分で思っていた以上に名前定義されていることも分かり
 ました。
 実際に“使う人”は超初心者ですので、エラーが出ないように頑張ります!

 また、よろしくお願いしま〜す。
 (shima)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.