0

Sheets("Omrnavne")互いに下に複数の範囲名が書かれたシート ( ) のセルから、コードは最初に書かれた値 (範囲名) を見つけ、この名前を持つ実際の範囲を見つけて選択しSheets("Specifikationer")、データをコピーし、次の値に移動しなければなりませんSheets("Omrnavne")。実際の範囲を見つけ、値を貼り付けて最初からやり直してください。

問題: 範囲名Sheets("Omrnavne")として存在しない範囲名が書かれている場合、これをスキップするにはどうすればよいですか?

次のコードIf Range(whatToFind) Is Nothing Then
を使用すると、次のエラーが表示されます。

実行時エラー '1404': オブジェクト '_Global' のメソッド 'Range' が失敗しました

存在しない範囲名を検索するとき。

私は何時間も試しましたが、成功しませんでした。助けてください - ありがとう。

コードは次のとおりです。

Sub Test1()
    Dim whatToFind As String
    Sheets("Omrnavne").Select

    ' Select first line of data*.
    Range("a1").Select

    ' Set Do loop to stop when an empty cell is reached.
    Do Until IsEmpty(ActiveCell)
        whatToFind = ActiveCell.Value

       'Find rangename, select and copy
        Sheets("Specifikationer").Select
        With Sheets("Specifikationer")
            On Error Resume Next
            On Error GoTo 0

            If Range(whatToFind) Is Nothing Then ' <~~~~ ERROR HERE    
                Sheets("Omrnavne").Select
                ActiveCell.Offset(2, 0).Select
                whatToFind = ActiveCell.Value           
            Else       
                Range(whatToFind).Select
                Selection.Copy
            End If                
        End With

        ' Find and select rangename to paste to
        Sheets("Omrnavne").Select
        With Sheets("Omrnavne").Select
             ActiveCell.Offset(1, 0).Select
             whatToFind = ActiveCell.Value        
             Sheets("Specifikationer").Select
             Range(whatToFind).Select
             Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                 :=False, Transpose:=False
             Application.CutCopyMode = False
        End With

        ' Step down 1 row from present location.
        Sheets("Omrnavne").Select
        ActiveCell.Offset(1, 0).Select         
    Loop

End Sub
4

1 に答える 1

0

すでに見たように、範囲が存在しない場合、ActiveSheet.Rangeプロパティは not を返します。Nothing代わりに、エラーが発生します。DIMとしてオブジェクト変数を使用できますRange。この変数はNothing、設定されるまで有効です。次に、この変数をエラー処理ブロック内の名前付き範囲に設定してみてください。この後さらに変数が Nothing の場合、名前付き範囲は存在しません。

例:

 Dim oRange As Range
 On Error Resume Next
 Set oRange = Range("test")
 On Error GoTo 0
 If oRange Is Nothing Then
  MsgBox "No range named ""test"" present."
 Else
  MsgBox oRange.Address
 End If

ご挨拶

アクセル

于 2014-11-05T09:49:10.717 に答える