Страницы: 1
RSS
Простой вопрос про макрос
 
Объясните, пожалуйста, почему следующий простейший макрос работает, когда я нахожусь на том листе, где он считает (she2), а когда на другом - выдает ошибку. И как мне правильно декларировать, чтобы он работал? Разобраться самостоятельно не получается.  
 
Sub learning()  
   Worksheets("she2").Range("D4")= Application.WorksheetFunction.Sum(Worksheets("she2").Range(Cells(1, 1), Cells(5000, 1)))  
End Sub  
 
Спасибо
 
Вот так будет работать:  
 
Sub learning()  
   With Worksheets("she2")  
       .Range("D4") = WorksheetFunction.Sum(.Range(Cells(1, 1), .Cells(5000, 1)))  
   End With  
End Sub  
 
PS: Вы забыли указать ссылку на лист перед Cells(5000, 1)
 
Точнее, вот так правильно:  
 
Sub learning()  
   With Worksheets("she2")  
       .Range("D4") = WorksheetFunction.Sum(.Range(.Cells(1, 1), .Cells(5000, 1)))  
   End With  
End Sub  
 
 
Перед Cells(1, 1) тоже не было ссылки на лист.
 
Можно и так записать:  
 
Sub learning()  
   Worksheets("she2").[D4] = WorksheetFunction.Sum(Worksheets("she2").[a1:a5000])
End Sub  
 
 
Или так:  
 
Sub learning()  
  [she2!D4] = WorksheetFunction.Sum([she2!a1:a5000])
End Sub
 
Спасибо.    
Последний вариант мне больше подходит, так как весь макрос относительно длинный и совершает действия с ячейками на разных листах. Поэтому применить там with ... end with невозможно.    
Поясните пожалуйста, что означают [ ]?
 
> Поясните пожалуйста, что означают [ ]?
[ ] - в данном случае, это ссылка на диапазон ячеек.
 
Как можно было догадаться из кода, запись [D4] равносильна записи Range("D4")
 
Спасибо. Удобная форма записи, буду пользоваться, и чтобы окончательно прояснить для себя, спросил. А то в программирование все дело в мелочах, лучше спросить.
Страницы: 1
Читают тему
Наверх
Loading...