2016-10-04 3 views
0

Я пишу код для сброса ячеек на моем листе. Это было прекрасно, и внезапно он прекратил работать. Это код сброса.Ошибка времени выполнения '1004': ошибка при сбросе ячеек

Private Sub Reset_Click() 

Range(Cells(20, 2), Cells(41, 13)).Interior.Color = RGB(217, 217, 217) 
Range(Cells(20, 2), Cells(41, 13)).Font.Color = RGB(255, 255, 255) 

Range(Cells(3, 2), Cells(11, 13)).Interior.Color = RGB(255, 255, 255) 
Range(Cells(13, 2), Cells(18, 13)).Interior.Color = RGB(255, 255, 255) 

End Sub 

Заранее спасибо

+2

Является ли код в рабочем листе модулем? Я предполагаю, что вам нужно квалифицировать вызовы 'Range' и' Cells' вместо использования глобальных переменных. – Comintern

+0

Как @Comintern утверждает выше. Вам нужно квалифицировать вызовы «Range» и «Cells», иначе они будут рассматриваться как «ActiveSheet», которые могут быть не такими, которые вы ожидаете от него. – Dave

+0

Защищаете ли вы лист? – Rory

ответ

0

Вот скорректированный код (который должен работать):

Option Explicit 

Private Sub Reset_Click() 

Dim ws As Worksheet 

' Change in the following line the name of the sheet (if necessary) 
Set ws = ThisWorkbook.Worksheets("Sheet1") 

ws.Range(ws.Cells(20, 2), ws.Cells(41, 13)).Interior.Color = RGB(217, 217, 217) 
ws.Range(ws.Cells(20, 2), ws.Cells(41, 13)).Font.Color = RGB(255, 255, 255) 

ws.Range(ws.Cells(3, 2), ws.Cells(11, 13)).Interior.Color = RGB(255, 255, 255) 
ws.Range(ws.Cells(13, 2), ws.Cells(18, 13)).Interior.Color = RGB(255, 255, 255) 

End Sub 

В принципе, вы должны квалифицироваться все ваши Range и Cells с действующим workbook и worksheet. В противном случае вы оставите его в VBA, чтобы угадать, какой файл Excel использовать, и какой лист в файле должен быть изменен.

Так как это усилия сообщества с комментариями выше, я отвечу на этот ответ на ответ сообщества wiki.

+0

, когда я набираю это, я получаю эту ошибку. Ошибка времени выполнения «9»: подстрочный код –

+0

Вы изменили имя листа в коде (как указано в коде)? Скорее всего, ваш лист не называется 'Sheet1', но имеет другое имя ?! – Ralph

+0

Если в вашем файле имеется только один лист (как указано в комментарии выше), вы также можете использовать 'Set ws = ThisWorkbook.Worksheets (1)' вместо 'Set ws = ThisWorkbook.Worksheets (« Sheet1 »)'. – Ralph

0

Сколько листов у вас есть? Если вы не уточните местоположение диапазона, вы получите сообщение об ошибке. Попробуйте что-то вроде:

Sheets("NameOfTheSheetWhereTheRangeIsLocated").Range(Cells(20, 2), Cells(41, 13)).Interior.Color = RGB(217, 217, 217) 
+0

У меня есть только 1 лист. –

+0

Попытайтесь не создавать приватную югу, если не делаете этого в модуле листа. Вы создаете модуль листа, нажимая на имя листа в редакторе. если вы создали только обычный модуль, просто попробуйте изменить свой частный sub в общедоступный раздел и указать лист. – Ary

+0

@Ary: Я хотел бы сделать предложение улучшить ваше решение: вы предлагаете квалифицировать код (который является правильным и хорошим). Тем не менее, вы на один шаг отстаете от полной квалификации своего кода. Ваше решение квалифицирует лист, но не (пока) рабочую книгу (файл Excel) для работы. Это решение может (потенциально) привести к очень похожей проблеме в будущем. Чтобы полностью квалифицировать свой код, вы должны включить 'ThisWorkbook.Sheets (« NameOfTheSheetWhereTheRangeIsLocated ») ...'. – Ralph

-1

Это всегда безопасно, чтобы написать код в модуле, а затем отожмите же в рабочий лист module.due ограничений в Excel такая ошибка происходит.

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