Страницы: 1
RSS
Макрос написанный в MSO 2003 не работает в 2010-м
 
Здравствуйте, товарищи Форумчане!  
Помогите разобраться. Есть макрос, написанный в 2003м офисе, вот эта его часть (см. Файл) отказалась работать в 2010 (2007 нет не пробовал). Спасибо.
 
У меня нет 2010-го, но в 2007-м всё работает.  
 
Попробуйте заменить строки    
For Each p In produkt  
 
на  
For Each p In produkt.Cells  
 
 
PS: Я бы советовал переделать макрос так:  
 
 
Sub zakaz()  
   Dim produkt As Range  
   Set produkt = Range("C8:C22")    ' лучше использовать именованный диапазон  
 
   On Error Resume Next  
   'скрываем пустые строки в таблице  
   produkt.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True  
   MsgBox "спрятал"  
 
   'отобразим скрытые строки  
   produkt.EntireRow.Hidden = False  
   MsgBox "показал"  
End Sub
 
В Excel 2010 макрос работает.  
Я лишь объявил переменную p  
Dim p As Range  
 
P.S. Воспользуйтесь макросом от EducatedFool
 
Cells, не спасает код все равно ругается на переменную "p".  
Предложенный Вами код работает. Если не сложно, разъясните эту часть кода, SpecialCells(xlCellTypeBlanks)? справку посмотрел ничего не понял.
 
Да, если переменную объявить работает.    
Спасибо, буду разбираться со SpecialCells(xlCellTypeBlanks).
 
SpecialCells(xlCellTypeBlanks) - это  
- SpecialCells - это метод, переводится как "специальные ячейки"  
- xlCellTypeBlanks - т.е. ячейки с типом "пустые"
 
Дополню себя  
 
метод SpecialCells имеет 2 аргумента это тип и значение(Type, Value)  
SpecialCells(Type, Value)  
 
типы бывают следующими константами:  
xlCellTypeAllFormatConditions  
xlCellTypeAllValidation  
xlCellTypeBlanks  
xlCellTypeComments  
xlCellTypeConstants  
xlCellTypeFormulas  
xlCellTypeLastCell  
xlCellTypeSameFormatConditions  
xlCellTypeSameValidation  
xlCellTypeVisible  
 
Значения бывают следующими константами:  
xlErrors  
xlLogical  
xlNumbers    
xlTextValues  
 
Значения нам в данном случае не нужны, поэтому мы укажем в аргументе только нужную нам константу типов ячеек  
 
Соответственно код .SpecialCells(xlCellTypeBlanks) - вернёт все пустые ячейки
 
Метод SpecialCells(xlCellTypeBlanks) и цикл с проверкой  
For Each p In produkt  
If p = "" Then  
не эквивалентны. Метод не находит пустых ячеек, если пустая строка является значением формулы. И если скопировать такие ячейки с формулами и вставить как значения - тоже не найдет. И вызывает остановку по ошибке, если не находит ни одной ячейки, поэтому метод следует применять с предшествующим оператором  
On Error.
 
Спасибо. Принцип понятен. Подскажите где можно посмотреть, что означают все типы и значения данного метода? Или может кто здесь и напишет, буду очень признателен.
 
Этот метод аналогичен диалогу F5 - Выделить...  
Изучайте на здоровье, используйте макрорекордер.
 
SomeRange.SpecialCells(Type, Value)  
Метод используется для выделения специальных ячеек диапазона  
типы бывают следующими константами:  
xlCellTypeAllFormatConditions-ячейки любого формата  
xlCellTypeAllValidation-  
xlCellTypeBlanks-пустые ячейки  
xlCellTypeComments-с комментариями  
xlCellTypeConstants-числовые или текстовые значения  
xlCellTypeFormulas-содержащие формулы  
xlCellTypeLastCell-последняя ячейка диапазона  
xlCellTypeSameFormatConditions-ячейки с одинаковым форматом  
xlCellTypeSameValidation  
xlCellTypeVisible-видимые ячейки  
 
Значения бывают следующими константами:  
xlErrors-ячейки формул с ошибками  
xlLogical-с логическими формулами  
xlNumbers -с числовыми данными  
xlTextValues-с текстовыми данными
Страницы: 1
Читают тему
Наверх
Loading...