Страницы: 1
RSS
Перенос строк если строка больше n кол-ва символов, макрос в надстройку
 
Доброе время суток форумчане!!! У меня такой вопрос. Есть файл (отчет по рапортам) структура его всегда одна, но меняется название самого файла и количество строк в сутках. Как мог так сделал макрос (пример). Не знаю как выполнить такие задачи:
1. Строки где больше 120 символов переносились на строку ниже при условии если она пустая. если не пустая то оставались бы без изменений)
2. как оформить в надстройку таким образом чтобы мог аналогичную таблицу предварительно выделенную на листе за определенные сутки с файла 1 обрабатывать данным макросом? так же в новый файл.
3. Ну и если подскажите как с нового файла удалить "ΔР=0атм" будет совсем замечательно
пробывал  newtxt = Application.WorksheetFunction.Trim(Replace(newtxt, "ΔР=0атм", ""))   ругается. и преобразует дельту в вопрос.
 
Цитата
DEN_ZH написал:
1. Строки где больше 120 символов переносились на строку ниже при условии если она пустая. если не пустая то оставались бы без изменений)
что имеется ввиду, в одной ячейке переносить? или в ячейку снизу?
Цитата
DEN_ZH написал:
так же в новый файл.
что значит эта фраза.
"Все гениальное просто, а все простое гениально!!!"
 
Имею ввиду строки которые больше 120 символов переносятся в ячейку ниже. Тоесть в верхней ячейке остается 120 символов и дпльше строка продолжается в ячейке ниже. Но лишь при условии что ячейка ниже пуста. Если не пуста то омтавляем без изменения. Чтоб в следующей ячейке остались выполняемые работы не затирались.
далее. Макросом создается новый файл. В котором все работы раскидываются на сутки. Вот в нем и нужен перенос. В конечном файле.
у каждой работы есть начало ее выполнения. Работа заполняется на графике. На график в сутки входит ровно 680 строк. Что получается что одна строка кратна 2 минутам. За счет этого и идет распределение работ по строкам. Но бывает и такое что работы меняются каждые две три минуты. Поэтому лучшеичастично потерять описание конца работы чем затереть новую работу. Как оформить перенос у меня наметки есть. Но как при переносе сделать так чтобы если строка добовляется путем переноса то следовательно не должно появится новой строчки а именно должна заполнится пустая строка. В противном случае мы получим численное увеличение количества строк и смещение работы на две минуты ниже. В результате вместо 680 становится 681, 682 и т.д. строк.

Хотя... если сделать перенос в пределах ячейки я думаю будет проще. Но вот возможно ли такое? И при вставке в текстовой формат вновь получим смещение строк. И чем больше таких переносов тем больше смещение. В любом случае нужно будет после переноса хоть в ячейке хоть на другую ечейку ниже, удолять строку чтоб нижележащая работа не сместилась на две минуты ниже.
 
Один из способов решения Вашей задачи по пункту 1
Скрытый текст

Перенос внутри ячейки.
Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Первый вариант то что нужно. все бы шикарно. работает с другими файлами а с создваемым не желает. добовляю его в конец макроса и ничего не переносится... что может быть?
ничего не понимаю. В одном файле любой беру все работает. в моем нет. скидываю пример
 
Цитата
DEN_ZH написал:  работает с другими файлами а с создваемым не желает. добовляю его в конец макроса и ничего не переносится...
Что Вы тут написали?

Цитата
ничего не понимаю. В одном файле любой беру все работает. в моем нет. скидываю пример
всё понятно. В одном файле любой беру всё работает, в этом тоже не скидываю пример
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
макрос предложенный Nordheim работает так как нужно, как и хотелось видеть, но после срабатывания моего макроса, макрос предложенный Nordheim просто никак не реагирует... Хотя вроде и типы данных остаются прежними и ничего не изменяется, может макрос после обработки моим макросом воспринимает ячейки как заполенные? а не пустые
 
Попробуйте прогнать макрос с помощью F8  и посмотрите, что происходит.
"Все гениальное просто, а все простое гениально!!!"
 
Прогонял. Почемуто пустые ячейки воспринимаются как не пустые. Когда в обработанном моим макросом файле механически прям по пустым ячейкам проходишь и жмешь дел то Ваш макрос сробатывает. А так нивкакую. Если офсет где строка далее присвоить =false то переносит. Пробывал после равно поставить "". Тоже не выходит
 
А не пробовали с помощью функции Len посмотреть количество символов в пустой ячейке? Либо взять переменную типа Variant и присвоив значение этой переменной посмотреть в окне Watch, чему переменная равна?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
DEN_ZH написал:
Пробывал после равно поставить "".
что в принципе тоже самое, что сравнить с пустой ячейкой. Выделите ячейку, значение которой воспринимается как не пустое -Ctrl+G. В появившемся окне Immediate запишите:
ActiveCell.Value & "Длина текста в этой ячейке: " &  Len(ActiveCell.Value)
и нажмите Enter.
Посмотрите, что будет записано в этом окне ниже. Уверен, что длина текста будет более 0. Это значит, что в ячейке либо перенос на строку, либо другой невидимый символ, который все же не является строкой нулевой длины и не воспринимается как НИЧТО.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
DEN_ZH написал: Пробывал после равно поставить "".
В каком месте кода?
попробуйте это:
Код
If Len(Cells(i, 1).Offset(1, 0)) = 0 Then

вместо
Код
If IsEmpty(Cells(i, 1).Offset(1, 0)) Then
"Все гениальное просто, а все простое гениально!!!"
 
If IsEmpty(Cells(i, 1).Offset(1, 0)) = false
но тогда просто строка ниже даже если что то есть затирается. А не хотелось бы. Ок. А как обойти это самое непустое. Ведь раз я не вижу значит пустое. Или может как то в начале макроса прописать удалить ячейки с 1 по 680 в которой текст  =""
это так сказать мысли в слух
 
Цитата
Дмитрий(The_Prist) Щербаков написал:Посмотрите, что будет записано в этом окне ниже.
Попробовал в файле примере, странно но показывает 0 поэтому предложил немого изменить код, хотя если будут невидимые символы, то и этот код будет бесполезен.
"Все гениальное просто, а все простое гениально!!!"
 
Дмитрий(The_Prist) Щербаков, Nordheim, спасибо огромное. Ну а другие пункты я уже сам добил. Коряво маленько может, но всеже.
 
Цитата
DEN_ZH написал:а с ближайшего пробела
Скрытый текст

Только дробить будет очень мелко.
Изменено: Nordheim - 16.01.2019 10:18:09
"Все гениальное просто, а все простое гениально!!!"
 
Ну это я так понимаю если оставить пробел а если вместо " " поставить уникальный символ то дробить будет по нему. Правильно я понимпю. Спасибо огромное.  
 
Цитата
DEN_ZH написал:Правильно я понимпю
Совершенно верно. Но если символ будет один а количество всего символов в строке более 240, то первоначальное условие (оставить 120 символов в строке) не будет выполняться.
Изменено: Nordheim - 16.01.2019 11:18:43
"Все гениальное просто, а все простое гениально!!!"
 
Надстроечку я почти закончил, как мне кажется, но вот перенос 70 знаков почему то не проходит до конца. подскажите. где ошибка? дает ошибку 1004 в строке 7.
Код
 Dim txt$, i&
Set ActiveSht = ActiveSheet
    For i = 1 To 680
        If Len(Cells(i, 1).Value) > 70 Then
                                       txt = Cells(i, 1).Value
              ActiveSheet.Cells(i, 1).Resize(2).Value = _
               Application.Transpose(Array(Left(txt, 70), Right(txt, Len(txt) - 70)))
            
        End If
    Next i

соответственно кидаю файл пример и саму будующую надстройку. Почитав просторы инета думаю что не воспринимает лист должным образом, но... может не правильно думаю.
Отчет - файл с которым проделываю манипуляции и создаю файл книга 7. и сама будующая надстроечка файл "Делаем надстройку"
 
Может так подойдет. Проблема скорее всего возникает с тем, что остаток сроки , переносимый начинается со знака "=", а после равно идут не удовлетворяющие математическим вычислениям символы. Можно исправить двумя вариантами
1) заменяем "=" на ":="
Скрытый текст


2) Делаем в обрабатываемом столбце текстовой формат ячеек.

Скрытый текст


Мне толко эти два способа пришли в голову.

А вот эта строка, вообще не понял зачем вставлена в код
Код
Set ActiveSht = ActiveSheet
Изменено: Nordheim - 21.01.2019 09:09:27
"Все гениальное просто, а все простое гениально!!!"
 
Я не знал что знак равно так воспринимается, и пробывал думал может с надстройки не понимает что вычисление надо проводить на активном листе, и пробывал его сделать активным, но результат остался тот же. а строку просто забыл удалить.
 
Спасибо Огромное. Второй вариант огонь. Все тема закрыта.  
 
Единственное я бы цикл сделал до 679, иначе макрос может перенести часть текста в 681 строку. при условии что в 680 строке количество символов в обрабатываемой ячейке >70.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim,  Здравствуйте! а можно вас попросить по вашему посту #4 в первом макросе добавить строку которая переносила строку допустим > 30 до пробела, а то получается переносит одну букву некрасиво, Заранее спасибо!
Изменено: Дмитрий Дунаев - 18.02.2022 13:31:52
НЕ БОГИ ГОРШКИ ОБЖИГАЮТ
Страницы: 1
Наверх