Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Альтернатива SpecialCells для защищенного листа / 18 сообщений из 18, страница 1 из 1
01.09.2017, 15:57
    #39514185
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Здравствуйте.

Есть защищенный лист. Данных очень много. Надо получить область со всеми непустыми ячейками. Значения ячеек доступны макросу, но функция SpecialCells вылетает с ошибкой (из-за защиты). Как быть? Снять защиту не предлагать :)

Интересно даже, почему SpecialCells не работает? Ведь обычным циклом я могу собрать эти ячейки. Но конечно хочется побыстрее.
...
Рейтинг: 0 / 0
01.09.2017, 16:11
    #39514188
Cursky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождя,
Код: vbnet
1.
ActiveSheet.UsedRange

пробовал?
...
Рейтинг: 0 / 0
01.09.2017, 16:37
    #39514210
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
CurskyСын вождя,
Код: vbnet
1.
ActiveSheet.UsedRange

пробовал?
Попробуй мне быстро найти непустые ячейки здесь:
Код: vbnet
1.
2.
3.
4.
5.
Dim SH As Worksheet
    Set SH = Excel.Workbooks.Add.Sheets(1)
    SH.Cells(1, 1).Value = 1
    SH.Cells(SH.Rows.Count, SH.Columns.Count).Value = 2
    SH.UsedRange.Select ' :))))))))))))
...
Рейтинг: 0 / 0
01.09.2017, 18:28
    #39514263
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождя,

Не знаю на сколько быстро/ресурсозатратно, но что если весь лист в массив и уже проверять массив...ну или сначало UsedRange, а потом массив...как-то так.
...
Рейтинг: 0 / 0
01.09.2017, 20:03
    #39514303
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
iMrTidyНе знаю на сколько быстро/ресурсозатратно, но что если весь лист в массив и уже проверять массив...
Да, руками можно что-то сделать. Но функции Excel работают очень быстро. Вот и хочу найти подходящие.

Та же сортировка массива, в несколько раз быстрее через лист Excel, чем тасованием массива макросом.

CountA и CountBlank выполняются мгновенно, независимо от объема данных. Значит проблема в SpecialCells.
...
Рейтинг: 0 / 0
01.09.2017, 23:57
    #39514357
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождя,

A1 = 1, A1048576 = 2

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Option Explicit

Sub Test()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim arr() As Variant
Dim k As Long

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
Set rn = sh.UsedRange

arr = rn

For k = 1 To UBound(arr)
    If arr(k, 1) <> "" Then
        Debug.Print arr(k, 1)
    End If
        
Next

End Sub



Работает очень быстро.
...
Рейтинг: 0 / 0
02.09.2017, 07:45
    #39514369
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
iMrTidy...Работает очень быстро.
Быстро, но не работает :)

При копировании области в массив, Excel имеет ограничение в 65536 ячеек. В последней версии Excel, ячеек 16 777 216.

Нужны не только значения, а еще и область с ячейками. Нужна альтернатива, сравнимая по скорости с SpecialCells(xlCellTypeConstants).
...
Рейтинг: 0 / 0
02.09.2017, 11:36
    #39514403
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождя,

Когда речь заходит о работе софта на пределе его возможностей, невольно приходит в голову мысль, а правильно ли выбран инструмент...
...
Рейтинг: 0 / 0
02.09.2017, 12:09
    #39514415
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
iMrTidy...а правильно ли выбран инструмент...
Инструмент устраивает. Не вижу подходящего инструмента этого инструмента :)

Тестирую на словаре в 200 000 слов. Ничего особенного.
...
Рейтинг: 0 / 0
02.09.2017, 12:32
    #39514423
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождяiMrTidy...а правильно ли выбран инструмент...
Инструмент устраивает. Не вижу подходящего инструмента этого инструмента :)

Тестирую на словаре в 200 000 слов. Ничего особенного.

SQL?
...
Рейтинг: 0 / 0
03.09.2017, 01:14
    #39514598
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождяЕсть защищенный лист... функция SpecialCells вылетает с ошибкой (из-за защиты). Как быть? Снять защиту не предлагать
Достаточно (пере)защитить с UserInterfaceOnly:=True
Код: vbnet
1.
2.
3.
4.
5.
6.
Sub Test()
  With ActiveSheet
    .Protect UserInterfaceOnly:=True ', Password:="123"
    Debug.Print .UsedRange.SpecialCells(xlCellTypeConstants).Count
  End With
End Sub
...
Рейтинг: 0 / 0
03.09.2017, 01:16
    #39514599
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Тэги и в предыдущем сообщении лишние:
Код: vbnet
1.
2.
3.
4.
5.
6.
Sub Test()
  With ActiveSheet
    .Protect UserInterfaceOnly:=True ', Password:="123"
    Debug.Print .UsedRange.SpecialCells(xlCellTypeConstants).Count
  End With
End Sub
...
Рейтинг: 0 / 0
03.09.2017, 14:24
    #39514704
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
ZVI...(пере)защитить...
Это снятие защиты, а там может быть пароль. Пишется макрос для общего пользования.

Для работы, макросу требуются значения ячеек и их область. Все это макросу доступно при любой защите (поправьте, если есть защита, когда макросом ничего не считать). Но некоторые функции Excel, которые ничего не меняют на листе, почему-то не работают :(

Может кто-то составлял список, что работает в защите, а что нет? Логики я не вижу. Проверить можно только опытным путем :(
...
Рейтинг: 0 / 0
03.09.2017, 18:14
    #39514722
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождя,

Учитывая, что любая защита снимается в течение секунды, можно делать временную копию исходника, снимать на нем все защиты, делать все что нужно, а затем уничтожать.
...
Рейтинг: 0 / 0
05.09.2017, 00:43
    #39515403
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождяЭто снятие защиты, а там может быть пароль. Пишется макрос для общего пользования.
В предложенном варианте нет снятия защиты ни на мгновение: .Protect UserInterfaceOnly:=True ', Password:="123"
Предполагается, что лист уже был защищен, а этот код повторной защиты открывает полный доступ лищь для VBA, но не для ручных действий пользователя.
Понятно, что если лист защищен паролем, а пароль коду неизвестен, то предложенный вариант не "прокатит", что вообще-то и правильно.
...
Рейтинг: 0 / 0
05.09.2017, 11:34
    #39515562
Сын вождя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
[quot ZVI]Сын вождя...В предложенном варианте нет снятия защиты ни на мгновение...
Ага, а книгу почему-то предлагает сохранить, как измененную :)

Народ, речь не о снятии защиты вообще. Нужен алгоритм быстрой обработки листа под защитой. Без извращений. Стандартными средствами. Как я понял, таких в Excel нет. Остается оптимизировать костыли.
...
Рейтинг: 0 / 0
05.09.2017, 13:04
    #39515628
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
[quot Сын вождя]ZVIпропущено...

Ага, а книгу почему-то предлагает сохранить, как измененную :)

Народ, речь не о снятии защиты вообще. Нужен алгоритм быстрой обработки листа под защитой. Без извращений. Стандартными средствами. Как я понял, таких в Excel нет. Остается оптимизировать костыли.

Сохранить предлагает, потому что раньше защита распространялась еще и на доступ к ячейкам через VBA, а теперь только через интерфейс. После того, как данные обработаны, поменяйте флаг на исходный.
...
Рейтинг: 0 / 0
06.09.2017, 01:29
    #39516073
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Альтернатива SpecialCells для защищенного листа
Сын вождяАга, а книгу почему-то предлагает сохранить, как измененную :)
Это не причем. Много чего меняет свойство Saved книги.
Например, любая формула динамического диапазона типа = A1: ИНДЕКС(A:A;СЧЁТЗ(A:A)) пересчитывается при загрузке книги и Excel спросит о сохранении книги с такой формулой. И это никак не связано с защитой.
Если смущает, то ActiveWorkbook.Saved = True
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Test1()
  Dim IsSaved As Boolean
  ' Запомнить статус Saved книги
  IsSaved = ActiveWorkbook.Saved
  ' Защитить с доступом из VBA
  With ActiveSheet
    .Protect UserInterfaceOnly:=True ', Password:="123"
    Debug.Print .UsedRange.SpecialCells(xlCellTypeConstants).Count
  End With
  ' Восстановить статус Saved книги
  ActiveWorkbook.Saved = IsSaved
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Альтернатива SpecialCells для защищенного листа / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]