2015-04-21 33 views
0

我不知道爲什麼我可以將範圍值存儲在工作表變量的範圍屬性中,但不在範圍變量中。錯誤91工作表變量的設置範圍

Dim ws As Worksheet, rng As Range 
    Set ws = Worksheets.Add 
    ws.name = "Potato" 
    rng = ws.Range("A1:K1") 
    rng.PasteSpecial 

我能夠通過將最後2行成功運行該程序:每次我試圖運行這段代碼時遇到錯誤91

ws.Range("A1:K1").PasteSpecial 

這工作,即使它雜波我的代碼的其他部分。但我無法理解我的生活使用範圍變量的問題是什麼。

我希望任何人都可以提供澄清。

回答

1

你必須使用Set與對象變量:

Set rng = ws.Range("A1:K1") 
+0

有道理。我從來沒有想過,範圍是一個對象,而工作表和工作簿不是。謝謝! – Josh

+1

工作表和工作簿也是對象。是什麼讓你覺得他們不是? – Rory

0

這裏添加代碼,將確保不會有一個錯誤,如果你已經有一個名爲片「土豆」

代碼以確保Sheet(「Potato」)不存在。

Sub Button1_Click() 
    Dim ws As Worksheet, rng As Range, cRng As Range 
    Dim worksh As Integer 
    Dim worksheetexists As Boolean 
    Dim s As String 

    s = "Potato" 
    Set cRng = ActiveSheet.Range("A1:K1") 

    worksh = Application.Sheets.Count 
    worksheetexists = False 

    For x = 1 To worksh 

     If Worksheets(x).Name = s Then 
      worksheetexists = True 
      MsgBox s & ", already Exists" 
      Exit For 
     End If 

    Next x 

    If worksheetexists = False Then 
     Set ws = Worksheets.Add() 
     ws.Name = s 
     Set rng = ws.Range("A1:K1") 

     cRng.Copy 
     rng.PasteSpecial Paste:=xlPasteAll 
     Application.CutCopyMode = 0 
    End If 

End Sub 
+0

感謝您的提示。我使用了複製/粘貼方法來保留無法預測的無數格式。有沒有一個有效的方法來做到這一點與你的方法?或者是否必須設定新範圍的每一個可能的屬性以匹配舊範圍? – Josh

+0

如果它適合你,那麼好吧,我改變了代碼,所以如果你運行它並且「土豆」已經存在,你不會得到一個錯誤。 – Davesexcel

相關問題