2014-11-05 55 views
0

從表單中的單元格(Sheets("Omrnavne"))開始,幾個範圍名稱彼此相連,代碼必須找到寫入的第一個值(範圍名稱) ,在Sheets("Specifikationer")上查找並選擇帶有該名稱的實際範圍,複製數據,轉到Sheets("Omrnavne")上的下一個值,找到實際範圍,粘貼值並重新開始。VBA Excel - 在將數據從一個範圍名稱複製/粘貼到另一個範圍名稱時,避免不要使用範圍名稱

問題:如果在Sheets("Omrnavne")上寫出的範圍名稱不作爲範圍名稱存在,那麼如何跳過該範圍?

用下面的代碼:If Range(whatToFind) Is Nothing Then
我得到的錯誤:

Run-time error '1404': Method 'Range' of object'_Global' failed

爲這麼想的存在rangename搜索時。

我試了幾個小時,但沒有成功。請幫忙 - 謝謝。

的代碼是:

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 

回答

0

正如你已經看到的,ActiveSheet.Range屬性返回不Nothing,如果範圍不存在。相反,它會產生一個錯誤。你可以將​​作爲對象變量Range。這個變量是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 

問候

阿克塞爾