Страницы: 1
RSS
ActiveSheet.UsedRange.Rows.Count не работает в созданном макросом листе.
 
Доброй ночи!    
 
Есть файл, в котором, 10 первых строк и первые 2 столбца чем-то заняты,  
 
Исполняю что-то вроде:  
Sub macrocros()  
 
Dim wsT As Worksheet, wsTC As Worksheet  
Set wsT = ActiveSheet  
 
wsT.Range(Cells(1, 1), Cells(10, 2)).Copy 'если написать это же не до, а после след.строчки, ошибка  
Workbooks.Add xlWBATWorksheet: Set wsTC = ActiveSheet  
wsTC.Paste Destination:=wsTC.Cells(10, 1)    
 
wsTC.Activate 'это можно не делать, он и так активен, но всё же  
b = ActiveSheet.UsedRange.Rows.Count 'Не считает! Производит подсчёт с изначального листа, а не с нового, активного.    
End Sub  
 
Вообще, вопроса 2:  
1. Как заставить работать ActiveSheet.UsedRange.Rows.Count во вновь созданной книге/листе корректно, а не считать значения книги, открытой в прошлом.    
2. Почему-то если wsT.Range(Cells(1, 1), Cells(10, 2)).Copy написать после того, как создана новая книга (и, соответственно, активирована, появляется ошибка 1004. Странная работа с диапазаонами. В чём причина ошибки?  
 
Прошу прощения если вопрос легковат/глуповат, учусь.
 
Попробуйте так:  
Sub macrocros()  
   Dim wsT As Worksheet, wsTC As Worksheet, b As Long  
   Set wsT = ActiveSheet  
   Workbooks.Add xlWBATWorksheet  
   Set wsTC = ActiveSheet  
   wsT.Range(wsT.Cells(1, 1), wsT.Cells(10, 2)).Copy wsTC.Cells(10, 1)  
   b = ActiveSheet.UsedRange.Rows.Count  
End Sub
Я сам - дурнее всякого примера! ...
 
Прокомментирую код Сергея, будет полезно, если учитесь.  
 
> 1. Как заставить работать ActiveSheet.UsedRange.Rows.Count во вновь созданной книге/листе корректно, а не считать значения книги, открытой в прошлом.  
'Не считает! Производит подсчёт с изначального листа, а не с нового, активного.    
Считает. Просто Usedrange на новом листе начинается с 10 строки, куда Вы вставляете скопированные ячейки.  
Чтобы получить номер последней занятой строки, используйте  
 
b = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1  
 
> 2. Почему-то если wsT.Range(Cells(1, 1), Cells(10, 2)).Copy написать после того, как создана новая книга (и, соответственно, активирована, появляется ошибка 1004.  
Потому что Cells(...) без явного указания листа относится к активному листу, то есть к новой книге, а не к wsT. Правильно и неизбыточно будет  
 
Range(wsT.Cells(1, 1), wsT.Cells(10, 2)).Copy  
wsTC.Paste Destination:=wsTC.Cells(10, 1)  
 
Или в одно действие, как у Сергея:  
 
Range(wsT.Cells(1, 1), wsT.Cells(10, 2)).Copy wsTC.Cells(10, 1)
 
Но не надо путать номер последней заполненной строки с ActiveSheet.UsedRange.Rows.Count  
Проверил код Сергея - если на чистом листе заполнить 3 ряда сверху и выполнить код, то в итоге  b будет всегда 3, хотя в новой книге номер последней заполненной строки 13.
 
Спасибо, Казанский, KuklP и Hugo.    
 
Стало понятней.    
 
Но почему же ActiveSheet.UsedRange.Row и ActiveSheet.UsedRange.Rows.Count дают такие разные значения при подсчёте?
 
The_Prist, спасибо. Уж очень написание похожее и рассматриваемых команд. Вопросов больше не имеется. Пока не имеется)
Страницы: 1
Читают тему
Наверх