2015-02-05 5 views
0

Я уверен, что это было сделано до смерти, но я не могу понять, что не так с моим кодом, который теперь бросает ошибку «Определено приложение или объект», но ТОЛЬКО, когда я запускаю это от кнопки на другом листе к тому, у кого есть данные, которые я хочу переименовать.Переименование диапазона в Excel VBA

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

Sub updateDataSheet() 
    Dim lastColumn As Integer 
    Dim lastRow As Integer 
    lastColumn = (Sheets("Data").Cells(1, columns.count).End(xlToLeft).Column) 
    lastRow = Sheets("Data").Cells(Rows.count, 1).End(xlUp).Row 

    ActiveWorkbook.Names("myData").RefersTo = Sheets("Data").Range(Cells(1, 1), Cells(lastRow, lastColumn)) 
end sub 

Я предполагаю, что мне нужно добавить некоторые дополнительные ссылки, но не может видеть то, что я бы не быть, как абсолютное Excel VBA новичок!

Любая помощь будет высоко ценится

+0

Ваше имя [местное] (http://stackoverflow.com/a/2176154/11683)? – GSerg

+0

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

+0

У вас есть та же проблема, что и не квалифицировать вызовы «Ячейки» с объектом рабочей таблицы, как здесь: http://stackoverflow.com/questions/28323053/excel-vba-range-object-error-in-looping-through-worksheet/28323314#28323314 – Rory

ответ

0

Это будет работать для вас,

Sub updateDataSheet() 
    Dim ws As Worksheet 
    Dim lastColumn As long 
    Dim lastRow As long 
    Dim rng As Range 
    Set ws = Worksheets("Data") 
    With ws 
     lastColumn = .Cells(1, Columns.Count).End(xlToLeft).Column 
     lastRow = .Cells(Rows.Count, 1).End(xlUp).Row 
     Set rng = .Range(.Cells(1, 1), .Cells(lastRow, lastColumn)) 
     rng.Name = "myData" 
    End With 
End Sub 

После определения диапазона вы можете назвать его.

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