Страницы: 1
RSS
Ошибка .SpecialCells(xlCellTypeBlanks)
 
Добрый день.

Столкнулся с такой проблемой: не могу найти пустые ячейки с помощью метода .SpecialCells(xlCellTypeBlanks)
Диапазон точно пустой, так как он выбирается на только что созданном чистом листе. Он выбирается и... выдает ошибку при поиске пустых ячеек.
При этом .SpecialCells(xlCellTypeConstants) тоже ничего не находит... Впрочем, как и поиск по формулам или еще по чему.

Но стоит сделать .Clear, как пустые ячейки начинают определяться, как пустые.... Но что это за бред, какими они были до этого? Как мне найти пустые ячейки?
Изменено: Vhodnoylogin - 21.04.2017 09:34:43
 
Вы описываете как работали над чем-то... и это похоже был файлик со своими проблемами... Да?
А где он? Или Вы думаете, что здесь моделируют проблемы по описанию, а потом рассказывают как их решить?  :D
 
Ничего не понял... Проблема либо есть, либо ее нет. Просто выберете

Если нужен код (зачем?) - вот он:
Код
Public Sub hp_SetCopyFormates( _
                        ByRef acceptor As Range, _
                        ByRef donor_for_filled_cells As Range, _
                        ByRef donor_for_empty_cells As Range _
                    )
    With acceptor
        On Error GoTo errLabel1
        With .SpecialCells(xlCellTypeBlanks)
            donor_for_empty_cells.Copy
            .PasteSpecial xlPasteValidation
            .PasteSpecial xlPasteFormats
            .PasteSpecial xlPasteColumnWidths
            .PasteSpecial xlPasteFormulas
        End With
nextLabel1:
        On Error GoTo errLabel2
        With .SpecialCells(xlCellTypeConstants)
            donor_for_filled_cells.Copy
            .PasteSpecial xlPasteValidation
            .PasteSpecial xlPasteFormats
            .PasteSpecial xlPasteColumnWidths
            .PasteSpecial xlPasteFormulas
        End With
    End With
nextLabel2:
    Exit Sub
    
    '---------------------'
errLabel1:
    Resume nextLabel1
errLabel2:
    Resume nextLabel2
End Sub

Вставляйте любые диапазоны. Если Аксептор будет пустым полностью, то .SpecialCells(xlCellTypeBlanks) не сработает. И я спрашиваю - что делать?
Изменено: Vhodnoylogin - 21.04.2017 09:53:11
 
Может Вам сюда?
Я сам - дурнее всякого примера! ...
 
Может в шаблоне, на основании которого создается новый лист чего этого... .того... не то? :)
Кому решение нужно - тот пример и рисует.
 
Да возьмите любой пустой диапазон и
Код
selection.SpecialCells(xlCellTypeBlanks).select
 
Vhodnoylogin, в пределах .UsedRange
Вернее нет, я не правильно выразился...
Если нет ни одной используемой ячейки, то будет ошибка
Достаточно закрасить даже цветом одну и все путем.
Изменено: AAF - 21.04.2017 10:10:13
 
зачем искать пустые ячейки на пустом листе?
 
Цитата
AAF написал:
Достаточно закрасить даже цветом одну и все путем.
Недостаточно... Ведь смысл кода в том, чтобы запилить форматы для выбранного рейнджа...

Чтобы работало, нужно дополнить код этим:
Код
If WorksheetFunction.CountA(acceptor) = 0 Then
            donor_for_filled_cells.Copy
            .PasteSpecial xlPasteValidation
            .PasteSpecial xlPasteFormats
            .PasteSpecial xlPasteColumnWidths
            .PasteSpecial xlPasteFormulas
        End If
 
Вот если б Вы выложили файл...
А то мне самому рисовать доноров и акцепторов?
Вы четко представляете Вашу задачу и для Вас не сложно сделать это.
Я сейчас не вижу проблем... В чем они?
 
Цитата
Vhodnoylogin написал:
Но стоит сделать .Clear, как пустые ячейки начинают определяться, как пустые
возможно, повреждение книги. Такое поведение может быть в одном случае: в ячейках не пустые значения, а строки нулевой длины. Такое может наблюдаться при создании файлов путем выгрузки из 1С.
Попробуйте сделать все в новом файле.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
возможно, повреждение книги
Дим, я в новой книге в А1 записал единичку, выделяю А1:А5, выполняю макрос
Код
Sub qqq()
    Selection.SpecialCells(xlCellTypeBlanks).Select
End Sub
и получаю ошибку с сообщением, что не найдено ни одной ячейки, удовлетворяющей указанным условиям.
Мало того: F5 - выделить - Пустые ячейки, получаю аналогичное сообщение.
Получается, что и у меня повреждена новая книга?
 
А, если вообще нет значений - это логично, т.к. диапазон рабочий пока еще только из одной ячейки(точнее - из ни одной :)) и любая конструкция SpecialCells будет ломаться, т.к. не работает для ни одной ячейки.
Я обычно перед использованием SpecialCells проверяю сколько будет ячеек в необходимом диапазоне. И если только одна ячейка в рабочем диапазоне - то проверяю через свойства самой ячейки.
Изменено: The_Prist - 21.04.2017 15:17:15
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
А, если вообще нет значений - это логично
Но у меня ведь одна заполнена )
 
Заполнил А1 и А5, выделил А1:А5, выполнил макрос - выделено три ячейки А2:А4. Вывод: работает в пределах UsedRange. Так? )
 
Цитата
Юрий М написал:
работает в пределах UsedRange
Да
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Юрий М написал:
работает в пределах UsedRange
Нет....  :)
Код
Sub test1()
'вот здесь будет ошибка
Sheets.Add
Range("A1") = 1
Set Rng = Range("A1:J10").SpecialCells(xlCellTypeBlanks)
Rng.Select
End Sub
Sub test2()
'вот здесь иллюстрация работы .SpecialCells(xlCellTypeBlanks)
Sheets.Add: Range("B2") = 1
Set Rng = Range("A1:J10").SpecialCells(xlCellTypeBlanks): Rng.Select
For i = 1 To Rng.Areas.Count
  s = s & "Areas(" & i & ").count = " & Rng.Areas(i).Count & vbCrLf
Next
MsgBox Join(Split(Rng.Address, ","), vbCrLf) & vbCrLf & s: s = ""
Sheets.Add: Range("C3:G7") = 1
Set Rng = Range("A1:J10").SpecialCells(xlCellTypeBlanks): Rng.Select
For i = 1 To Rng.Areas.Count
  s = s & "Areas(" & i & ").count = " & Rng.Areas(i).Count & vbCrLf
Next
MsgBox Join(Split(Rng.Address, ","), vbCrLf) & vbCrLf & s: s = ""
Sheets.Add: Range("C3:G7") = 1
Range("F6:H8").EntireRow.Rows.Hidden = True
Set Rng = Range("A1:J10").SpecialCells(xlCellTypeBlanks): Rng.Select
For i = 1 To Rng.Areas.Count
  s = s & "Areas(" & i & ").count = " & Rng.Areas(i).Count & vbCrLf
Next
MsgBox Join(Split(Rng.Address, ","), vbCrLf) & vbCrLf & s
'стоит обратить внимание и на это поведение SpecialCells
s = "xlCellTypeLastCell    " & Cells(1).SpecialCells(xlCellTypeLastCell).Address
Set usRng = ActiveSheet.UsedRange
Set curReg = Range("C3:G7")
MsgBox s & vbCrLf & "последняя UsedRange    " & usRng.Cells(usRng.Rows.Count, usRng.Columns.Count).Address _
  & vbCrLf & "последняя CurRegion    " & curReg.Cells(curReg.Rows.Count, curReg.Columns.Count).Address
End Sub
Изменено: AAF - 21.04.2017 18:02:08
Страницы: 1
Читают тему
Наверх