2015-04-21 2 views
0

Я в недоумении относительно того, почему кажется, что я могу сохранить значение диапазона в свойстве диапазона переменной рабочего листа, но не в переменной диапазона. Я получил ошибку 91 каждый раз, когда я пытался запустить этот код:Ошибка 91 диапазон установки переменной рабочего листа

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

Я был в состоянии успешно запустить программу, заменив последние 2 строки с:

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

Это работает, даже если он загромождает другие части моего кода. Но я не могу понять для меня, что проблема с использованием переменной диапазона.

Я хотел бы получить любое разъяснение, которое может предоставить любой человек.

ответ

1

Вы должны использовать Set с объектными переменными:

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

Имеет смысл. Мне никогда не приходило в голову, что диапазон - это объект, а рабочие листы и книги - нет. Благодаря! – Josh

+1

Рабочие листы и книги также являются объектами. Что заставляет вас думать, что это не так? – Rory

0

Здесь добавляется код, который будет убедиться, что не будет ошибкой, если у вас уже есть лист с именем «Картофельный»

код чтобы убедиться, что лист («Картофель») еще не существует.

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

Спасибо за подсказку. Я пошел с методом copy/paste, чтобы сохранить несметное число форматирования, которое я не смогу предсказать. Есть ли эффективный способ сделать это с вашим подходом? Или нужно установить все мыслимые свойства нового диапазона в соответствии со старым? – Josh

+0

Если это работает для вас, тогда хорошо, я изменил код, поэтому, если вы запустите его, и «Картофель» уже существует, вы не получите ошибку. – Davesexcel

Смежные вопросы