Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10143 / 13646 ツリー ←次へ | 前へ→

【23455】名前付き範囲が未定義かを確認したい RIK 05/3/23(水) 22:25 質問[未読]
【23456】Re:名前付き範囲が未定義かを確認したい IROC 05/3/23(水) 23:02 回答[未読]
【23457】Re:名前付き範囲が未定義かを確認したい ichinose 05/3/24(木) 7:40 発言[未読]
【23474】Re:名前付き範囲が未定義かを確認したい RIK 05/3/24(木) 15:51 お礼[未読]
【23475】Re:名前付き範囲が未定義かを確認したい IROC 05/3/24(木) 16:04 回答[未読]

【23455】名前付き範囲が未定義かを確認したい
質問  RIK  - 05/3/23(水) 22:25 -

引用なし
パスワード
   定義済みの名前付き範囲に値を入力する処理を考えているのですが、
名前が未定義かどうかを判断する方法が判らず、つまづいています。

If <objExcel.RangeNameが定義済み> Then
 objExcel.Range(RangeName) = Str
Else
 <未定義の場合の処理>
End If

上記のような処理を行いたいのですが、良い方法はないでしょうか?

【23456】Re:名前付き範囲が未定義かを確認したい
回答  IROC  - 05/3/23(水) 23:02 -

引用なし
パスワード
   名前の定義はNameオブジェクトなので、
Namesコレクションオブジェクトを用います。

If ThisWorkbook.Names("あああ") Is Nothing Then
  MsgBox "X"
Else
  MsgBox "OK"
End If

【23457】Re:名前付き範囲が未定義かを確認したい
発言  ichinose  - 05/3/24(木) 7:40 -

引用なし
パスワード
   ▼RIK さん、IROCさん、おはようございます。

>定義済みの名前付き範囲に値を入力する処理を考えているのですが、
>名前が未定義かどうかを判断する方法が判らず、つまづいています。
>
>If <objExcel.RangeNameが定義済み> Then
> objExcel.Range(RangeName) = Str
>Else
> <未定義の場合の処理>
>End If
on error ステートメントを使う方法です。

'===================================================
Sub test()
  On Error Resume Next
  nm = ThisWorkbook.Names("aaa").Name
  If Err.Number <> 0 Then
   MsgBox "not found"
  Else
   MsgBox "done"
   End If
  On Error GoTo 0
End Sub

他には・・・と考えると、

'=====================================================
Sub test2()
  nm = Evaluate("aaa")
  If IsError(nm) Then
   MsgBox "not found"
  Else
   MsgBox "done"
   End If
End Sub

こんな方法でもいけそうですが、私は、testの方を使うと思います。

【23474】Re:名前付き範囲が未定義かを確認したい
お礼  RIK  - 05/3/24(木) 15:51 -

引用なし
パスワード
   IROCさん、ichinoseさん
素早いご回答ありがとうございます。
おかげさまで無事に解決しました。

▼IROCさん:
>名前の定義はNameオブジェクトなので、
>Namesコレクションオブジェクトを用います。

Namesオブジェクトだったのですね・・・。判りませんでした。
こちらの勉強不足ですね。ご指摘ありがとうございます。

これで解決かと思いましたが、次に下記の問題が発生しました。

 a = ThisWorkbook.Names("aaa").Name

上記で"aaa"が未定義の場合、オブジェクト未定義の
エラーが発生してしまいます。
このためエラーの例外処理が必要になるのですが、
ichinoseさんのサンプルが非常に参考になりました。

▼ichinoseさん:
>on error ステートメントを使う方法です。

test()を利用し下記の形で無事動作させることが出来ました。
重ね重ね、ありがとうございます。
---
Function sample(・・・)
  :
 On Error Resume Next
 a = ObjExcel.Names(RangeName)
 If Err.Number = 1004 Then
    <未定義時の処理>
    Err.Clear
    Exit Function
 End If
 On Error GoTo 0
 <定義済み時の処理>
End Function

【23475】Re:名前付き範囲が未定義かを確認したい
回答  IROC  - 05/3/24(木) 16:04 -

引用なし
パスワード
   >上記で"aaa"が未定義の場合、オブジェクト未定義の
>エラーが発生してしまいます。

そうでした。ごめんなさい。
せめてエラートラップしないで判定する方法を載せておきます。


Sub test()
Dim n As Name

  For Each n In ThisWorkbook.Names
    If n.Name = "あああ" Then
      GoTo myNext
    End If
  Next n
  
  MsgBox "X"
  Exit Sub
  
myNext:
  MsgBox "OK"
End Sub

10143 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free