макрос Excel 2016 VBA для очистки диапазонов ячеек, затем вставьте данные в пустые ячейки

#excel #vba

#excel #vba

Вопрос:

Цель моего макроса — сбросить мой лист.

Мой макрос сначала выполняет функцию clearcontents в нескольких разных диапазонах ячеек.

Затем я хочу заполнить некоторые из этих ячеек обратно 0

Я нашел одну рекомендацию, в которой я изменил их = «ВКЛ.» на = «0»

Пересечение (выделение, диапазон («D7:R23»)) = «0»

Я получаю следующее,

Ошибка времени выполнения ’91’

Объектная переменная или переменная блока не установлена

Есть идеи, что я делаю не так?

Код выглядит следующим образом:

 Sub Clearcells()

Range("D2:Z2").ClearContents

Range("D3:AG3").ClearContents

Range("D4:AG4").ClearContents

Range("AE2:AG2").ClearContents

Range("C7:R23").ClearContents

Range("W7:Y23").ClearContents

Range("AC7:AF23").ClearContents

Range("B27:AG43").ClearContents

Intersect(Selection, Range("D7:R23")) = "0"

Intersect(Selection, Range("W7:Y23")) = "0"

Intersect(Selection, Range("AC7:AF23")) = "0"

End Sub
  

Комментарии:

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

Ответ №1:

Эта ошибка означает, что ни одна из Select отредактированных ячеек не попадает в диапазон D7:R23. Эти два диапазона полностью не пересекаются. Например:

введите описание изображения здесь

В приведенном выше примере я Select отредактировал блок A1: B5 перед запуском строки кода.

Комментарии:

1. Означает ли это, что я должен переходить строка за строкой?

2. @Miam НЕТ Это означает, что при выполнении этой строки кода Select отредактированные ячейки должны перекрывать блок ячеек D7: R27

3. Извините, я новичок в этом программном макросе. Итак, я должен выбрать ячейки перед запуском макроса?

4. @Miam В опубликованной вами единственной строке кода предполагается, что вы (или предыдущие строки кода) отредактировали Select некоторые или все ячейки в блоке.

Ответ №2:

Попробуйте это; Вы пытаетесь выполнить простую очистку, а затем запись в пустые ячейки; вам не нужно использовать Intersect, и вы можете объединить все диапазоны, чтобы сократить свой код.

 Range("D2:Z2, D3:AG3, D4:AG4, AE2:AG2, C7:R23, W7:Y23, AC7:AF23, B27:AG43").ClearContents
Range("D7:R23, W7:Y23, AC7:AF23") = "0"
  

Ответ №3:

Я не мог понять, как очистить, а затем вставить, поэтому этот код просто заменяет все ячейки значением 0. В конечном итоге это то, что я хотел сделать.

 Sub Clearcells()    
Range("D2:Z2").ClearContents    
Range("D3:AG3").ClearContents    
Range("D4:AG4").ClearContents    
Range("AE2:AG2").ClearContents    
Range("B27:AG43").ClearContents    
Range("C7:C23").ClearContents    
Range("D7:R23") = "0"    
Range("W7:Y23") = "0"    
Range("AC7:AF23") = "0"    
End Sub