Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2019, 17:44   #1
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
По умолчанию проблема с usedrange

Добрый день,

может кто-нибудь сталкивался с такой проблемой и подскажет, как решить.
Есть лист с БД в файле .xlsb, там порядка 10тыс. строк. Если запустить макрос
Код:
MsgBox ActiveSheet.UsedRange.Address
на этом листе, сообщение покажет "$A:$BE". Удаление строк всего "хвоста" или очистка ничего не дает. Эксель упорно считает, что используется более миллиона строк.
Подскажите как правильно решить проблему.

Пока решили путем сохранения в формате xls, а затем обратно в xlsb. в результате usedrange стал "$A$1:$BE$65536", и файл похудел на пару мегобайт. Но хотелось бы прийти к правильному usedrange и понять на будущее в чем проблема
iNataliya вне форума Ответить с цитированием
Старый 16.07.2019, 17:59   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

файлик сильно секретный?

можете вручную найти последнюю используемую ячейку?
станьте на неё, потом выделите всё, что ниже до конца используемой области
(сочетание клавиш Shift-Ctrl-End)
и удалите содержимое. Сохраните документ.
Откройте и проверьте.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2019, 18:20   #3
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
По умолчанию

к сожалению файлик секретный.
Удаляли несколько раз все что ниже, не помогает.
Я думаю проблема именно в том, что эксель принимает за usedrange колонки, а не диапазон. А вот как победить его или обмануть не знаю.
iNataliya вне форума Ответить с цитированием
Старый 16.07.2019, 22:40   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iNataliya Посмотреть сообщение
к сожалению файлик секретный.
да, не повезло Вам.


Цитата:
Сообщение от iNataliya Посмотреть сообщение
Удаляли несколько раз все что ниже, не помогает.
Выделить, скопировать нужные данные и вставить в НОВЫЙ лист попробуйте.


Цитата:
Сообщение от iNataliya Посмотреть сообщение
Я думаю проблема именно в том, что эксель принимает за usedrange колонки, а не диапазон.
когда нажимаешь Ctrl-End - в какую ячейку переходит выделение?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2019, 00:09   #5
iNataliya
Пользователь
 
Регистрация: 29.08.2013
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Выделить, скопировать нужные данные и вставить в НОВЫЙ лист попробуйте.
это приводит к вылету Экселя (поэтому и появилась необходимость решать проблему с подцепившимся диапазоном) памяти не хватает.
временно решили только через сохранение в xls и обратно.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
когда нажимаешь Ctrl-End - в какую ячейку переходит выделение?
10тысячная - конец таблицы с данными.
iNataliya вне форума Ответить с цитированием
Старый 17.07.2019, 09:32   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от iNataliya Посмотреть сообщение
10тысячная - конец таблицы с данными.
чудо. я считал, что Ctrl-End как раз на конец используемого диапазона и переходит!
у меня
Код:
MsgBox ActiveSheet.UsedRange.Address
показывает как раз ту ячейку, на которую происходит переход.
Тогда я не знаю, чем Вам помочь.
Может быть, кто-то из Гуру Excel Вам поможет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2019, 13:49   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Причин много, все сразу не вспомнишь
перечислять долго и неинтересно, посмотреть файл - невозможно, а выспрашивать, что там в файле - снова долго и неинтересно.

остается автору пожелать настойчивости.
главное в поиске причин не ходить по одной и то й же дорожке, а перебирать варианты, все решается (при наличии желания и времени)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.07.2019, 11:24   #8
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

возможно поможет, найти последнюю используемую ячейку как то так:

Код:
MsgBox Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Address
может быть, у вас там в базе данных, не все столбцы заполнены,
тогда лучше поискать отдельно последнюю используемую строку
и отдельно последний используемый столбец,
и результат применить по вашему усмотрению

Код:
MsgBox Cells.Find(What:="*", After:=[a1], SearchDirection:=xlPrevious).Row
Код:
MsgBox Cells.Find(What:="*", After:=[a1], SearchDirection:=xlPrevious).Column

Последний раз редактировалось Elixi; 18.07.2019 в 23:21.
Elixi вне форума Ответить с цитированием
Старый 03.08.2019, 14:37   #9
Elixi
Форумчанин
 
Регистрация: 10.05.2019
Сообщений: 163
По умолчанию

Вы с проблемой наверное уже разобрались.
Я только что обнаружил в моём коде недочёт. Исправляю.
Для правильной работы функции Find надо указывать правильный SearchOrder.
Код:
Sub AlterUsedRangeAddress()
    'Debug.Print Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    'Debug.Print Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Debug.Print Cells(Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, _
        Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column).Address
End Sub
Elixi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ActionScript В чем проблема? while(if(i), Flash проблема со скобками. artscorp Общие вопросы Web 4 09.04.2013 23:41
Неблокирующий сокет Си проблема с закрытием, проблема с закрытием сокетов в цикле mnx_vol C/C++ Сетевое программирование 0 06.11.2012 13:57
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37