Страницы: 1
RSS
Как работать в vba Excel со длинными строками более 255 символов?
 
Здравствуйте. Проблема такая. Генерится строка более 255 символов или уже имеется, например, диапазон ячеек, или формула, или ещё что-то. И передаётся в качестве параметра или же прописывается ручками, например,    
Dim s As String   'или же Dim s As Variant  
s = "103:103,104:104,105:105,109:109,114:114,115:115,116:116,119:119, и так далее..."  
Range(s).Select  
Естественно, вылетает "Run-time error '1004': Application-defined or object-defined error".    
Подскажите, пожалуйста, как можно одолеть эту траблу. Может, какой другой тип строк есть или что-то ещё? Уж очень нужны они, эти длинные строки.
 
Бить на части или Union
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
А другого пути нету? А то ведь неизвестно какой длины строка. Сгенерится на миллион символов... И притом, надо разбить её на неизвестное число кусков.  
 
Проблема 1: Надо разбить эту сгенерированную строку на куски переменной длины (ведь сначала идут двузначные номера, потом пятизначные, потом десятизначные...).    
s1 = "103:103,108:108,315:315... и так далее ..."  
s2 = "1386:1386,20000:20000,333333333:333333333 и так далее"  
Это значит, в коде надо писать формулу для вычисления.  
 
Проблема 2: Потребуется дополнительный  массив переменной длины, куда помещать эти куски.  
 
Проблема 3: Синтаксис Union подразумевает конечное число кусков. Переменное число кусков записать не получится.  
Union(Range(s1), Range(s2), Range(s3), ... и ещё неизвестно сколько).Select  
 
Union здесь не подходит, проще проводить заданные операции с каждым куском. Опять циклы.  
 
В результате, чтобы решить простейшую задачку на 10 строк кода, надо дополнительно написать ещё 1000. Неужели нет более элегантного решения?
 
Зачем оно надо вообще? Бить на части по 30 эл.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Range(s).Select - вот это зачем?  
Кстати, Union из тысячи кусков тоже сомнительная штука...  
Подозреваю, что нужный результат можно получить совсем другим путём.
 
user456, вы бы приложили небольшой пример с комментариями, что вы хотите получить. А словами бы сказали, что данных может быть очень и очень много. Предоставили бы свой макрос, а мы бы посмотрели. А то полдня ни о чём говорим.
 
Обсуждали здесь:  
http://www.planetaexcel.ru/forum.php?thread_id=24871&page_forum=2&allnum_forum=52
Я сам - дурнее всякого примера! ...
 
В моей задачке можно обойтись и с помощью разбивания строки на части, с этим проблем нет. Но если, например, надо выполнить поиск в Selection (состоящего из 1, 2, 4, 5, 78, 135, ... n строк), то придётся сперва искать в первых 20 (для пятизначных номеров строк), потом в следующих и т.д. А если к этому Selection постоянно надо обращаться (как к таблице базы данных с запросами), то быстродействие сильно упадёт, если обрабатывать Selection по частям.  
Для простых задач разбить длинную строку на части – может, и решение, но для сложных этот вариант не подходит. А постоянно разбивать строковые константы, списки строк, перечисления и массивы на части при инициализации данных, а потом их склеивать? Это ж головная боль. Неужели Microsoft не придумали ничего попроще?  
Постоянно сталкиваюсь с этой проблемой, постоянно искать обходные пути, писать лишний код – сильно утомляет.
 
Не знаю, я вот за всю жизнь ни разу не столкнулся с такой необходимостью. Не зная чего Вы добиваетесь трудно судить, но мож Вы изначально неверный путь выбрали? Selection в 99% случаев ошибочный выбор.
Я сам - дурнее всякого примера! ...
 
Ограничение в 255 символов на длину строки звучит как приговор. И дело тут не в Selection. Просто постоянно приходится отлавливать эти 255 символов и резать константы. Вот другой строковый тип запросто решил бы проблему. А так очень неудобно. Спасибо за ответы.  
 
P.S. А свой неверный путь я не выбирал, – это родители меня сделали )))
 
по-моему, вы не хотите, чтобы мы вам помогали.
 
user456, Вы для начала нарисуйте небольшой пример с исходными данными, и покажите - ЧТО должно получиться на выходе.
Страницы: 1
Читают тему
Loading...