Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Определённое пользователем количество символов в формуле
 
Вылетает иногда "формула", я так сцепку называю(
Определённое пользователем количество символов в формуле
 
Вообще цель макроса упростить работу и записать формулу с соответствующим префиксом и с соответствующим количеством символов в строке.
Т.е. я открываю таблицу, запускаю макрос и на второй странице записывается формула с которой я продолжу работать в другой программе, при этом мне нельзя превышать количество символов в строке и терять какие-либо данные.
Сам я начал попытке по записи этого макроса в начале сентября, но встрял, макрос выглядел так:
Код
Sub Макрос()'
' макрос 
'Cells.Replace What:=";", Replacement:=","
Cells.Replace What:="""", Replacement:=""
Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Select
Selection.Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "Èìïîðò"
ActiveSheet.Paste
Range("A2").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Range("A1").Select
UserEntry = InputBox("прификс")
Public Head As StringIf UserEntry = "cn" Then
ActiveCell.Value = UserEntry
ActiveCell.FormulaR1C1 = "=""cn;""&RC[-3]&"";""&RC[-2]&"" ""&RC[-1]"
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.FillDown

If UserEntry = "cd" Then ActiveCell.Value = UserEntry
ActiveCell.FormulaR1C1 = "=""cd;""&RC[-3]&"";""&RC[-2]&"" ""&RC[-1]"
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.FillDown

If UserEntry = "fd" Then ActiveCell.Value = UserEntry
ActiveCell.FormulaR1C1 = "=""cd;""&RC[-3]&"";""&RC[-2]&"" ""&RC[-1]"
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.FillDown

If UserEntry = "fn" Then ActiveCell.Value = UserEntry
ActiveCell.FormulaR1C1 = "=""cd;""&RC[-3]&"";""&RC[-2]&"" ""&RC[-1]"
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.FillDown
End If
End Property 

Позже в него  были добавлены Case функции.
Но теперь встала новая задача, в этом макросе идёт сцепка только 3-х столбцов, меня это не устраивает, т.к. их в таблице их может быть больше 3-х, а как я говорил ранее данные терять нельзя, я начал искать как сцепить все ячейки слева от активной, и ничего не нашёл.
При том остаётся вопрос по количеству символов в строке, если будет больше 80 в CN, то при работе в другой проге будет ошибка.

Может будет проще если добить до конца мой первый макрос?
Знаете как сцепить все не пустые ячейки слева от активной на языке VBA. Учитывая что есть ограничения по символам, и если есть превышение начать деление на строки ниже с сохранением соответствия к ШК?

Я вложил изображение, надо чтобы ШК остался, но "лишние" 11 символов перешли на строку ниже с этим же ШК и с такой же формулой.  

Юрий М, Вы сделали почти то что надо, вот только Ваш код использует уже готовую формулу, удаляет её и записывает на уже существующий лист, а надо сцепка происходило на создаваемом листе, и не должны корректироваться исходные данные.
Изменено: Дилетант - 30.09.2018 13:50:26
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
Про какие формулы Вы говорите
Про сцепку, не знаю как её ещё назвать(
Есть ещё какие-нибудь идеи?

При больших объёмах работы этот код нет возможности использовать.

Он удаляет значения, мне надо чтобы они не как не редактировались.  
Определённое пользователем количество символов в формуле
 
И на этом спасибо) а как сделать чтобы формула была не только с CN?
Т.е. если вводить Cn, то сцепка будет, если выбрать cd, то ничего не происходит(  
Определённое пользователем количество символов в формуле
 
Я в этом крайне сомневаюсь(
И как быть с дальнейшим делением? Если надо разделить более чем на 2 строки, то деление прекращается.
Т.е. есть в строке, допустим 171 символ, код делит на 80 и на 91 и заканчивает деление по ШК  
Определённое пользователем количество символов в формуле
 
моя ошибка.  
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
Расходится с первоначальными данными: cd = 255
Есть четыре префикса:
cn - не больше 80
cd - не больше 255
fn - не больше 80
fd - не больше 255

И при каждом вводе от пользователя не сцепка должна начинаться с соответствующим  префиксом.
Например ввожу fn:

="fn;"&..... ( и не больше 80-ти символов, всё что больше, переносится на строку ниже с соответствующим ШК как продолжение описания)
Ввожу cd:

="cd;"&.... ( и не больше 255 символов, всё что больше, переносится на строку ниже с соответствующим ШК как продолжение описания)

И так же с остальными 2-мя префиксами  
Определённое пользователем количество символов в формуле
 
Если нет превышения? - ничего, сцепка должна продолжиться дальше. Если встречается превышение, начинается деление. Деление строки заканчивается и продолжается сцепка описания к другим ШК.

Если пользователь указывается CD - формула должна начинаться ="cd;"&.....  и быть не длиннее 255 - ти символов, если CN (="cn;") не больше 80-ти так со всеми переменными (cn/cd/fn(80)/fd(255))
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
Посмотрите пример. В коде найдите комментарий, где поменять на 80.  
Почему-то в присланном примере не срабатывает ветвление, то есть при выборе CN, макрос срабатывает, при выборе CD ничего не происходит(  
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
Посмотрите пример. В коде найдите комментарий, где поменять на 80.

То что надо) можно чтобы деление "описания" продолжалось, пока не станет ниже допустимого порога?
И надо добавить её 2 префикса : fn - 80 символов, fd - 255  
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
 
А если перенесённая часть строки тоже превышает лимит - её тоже резать?
Да, её тоже резать, пока она не станет меньше допустимого предела  
Изменено: Дилетант - 16.09.2018 11:56:24
Определённое пользователем количество символов в формуле
 
Цитата
Цитата
Юрий М написал:
Знать бы, как это должно выглядеть. Ваш файл из #5 вообще ни о чём. Из первого файла тоже ничего не понял.Неужели трудно набросать пример: вот имеем строку, из неё в одном случае нужно получить ТАК, а в другом случае ВОТ ТАК. И показать эти исходные данные и желаемый результат. И что Вы понимаете под запросом у пользователя - диалоговое окно? Или на листе будет выпадающий список?
Есть описание, которое надо импортировать к ШК.
Это описание разбито на разные столбцы (количество столбцов варьируется), я вручную записываю формулу сцепки, перед этим дописывая ="cn;"&.... (вообще префикса 4, они зависят от того, кому принадлежат ШК).
Я каждый раз вручную переношу всю информацию с одного листа на другой и начинаю сцеплять, при этом, если я записываю префикс CN (к примеру)  - количество символов в строке с формулой (без учёта ="cn;";) не должно превышать 80 символов. Если есть превышение в символах, я начинаю самостоятельно добавлять ниже строку, копировать ниже ШК, и ниже описание (т.е. его продолжение).

Я решил написать код в VBA, который бы делал это всё за меня, а именно делал бы готовую формулу с нужным количеством символов на втором листе. Я написал код, который копирует значение на второй лист, запрашивает у пользователя префикс ( через select case) и начинает сцеплять "описание" с тем префиксом что ввёл пользователь.

НО, я не знаю как автоматизировать обрезку символов по нужному мне количеству в строке. Т.е. если я указываю в диалоговом окне "cn" - то в каждой строке описания должно быть не более 80 символов. Всё, что превышает должно копироваться ниже вместе с ШК и записываться в такую же формулу.

Задача не простая и как по мне специфическая, я не нашёл ничего похожего в интернете и вот я здесь(
Пытаюсь объяснить как можно понятнее. (во вложении файл с исходными данными и нужным результатом)  
Изменено: Дилетант - 16.09.2018 11:55:42
Определённое пользователем количество символов в формуле
 
Цитата
Юрий М написал:
йте всё в коде.
Знать бы как(  
Определённое пользователем количество символов в формуле
 
Цитата
_Igor_61 написал: В примере из #5 не нашел ни одного "fn"... Вы можете в файле Excel  (не в скрине) показать желаемый результат??
fn/cn/cd/fd - это переменные, если вы мне покажете на примере fn (cn в примере) как вообще может быть такое деление, то далее я смогу сам (по Вашему примеру) сделать также на 3 другие переменные.

Я не знаю как сделать в Excel, чтобы формула (записанная через макрос) понимала сколько символов она сцепляет и начинала переносить на строки ниже  продолжение(
В скрине я перевёл форматы ячеек в текстовый и поделил самостоятельно.
Может так будет яснее, сам макрос должен импортировать в специальную прогу описание ШК (столбец в примере), и именно к нужному штрих-коду нужное описание.

Надо чтобы в результате макрос сам понимал что описание к определённому штрих-коду превышает допустимое количество символов и начинал делить строки.
Так же приложил макрос который делает нечто похожее, но не отдельную странице, а в текстовый документ (после создания интересен лист CD).

Цитата
_Igor_61 написал: 1.Почему  "Double" если "fn" - строковое значение
Это случайно в книгу попал макрос для других целей (небольшой бардак)
Во вложении файл, может с ним яснее будет (внутри два макроса)  
Определённое пользователем количество символов в формуле
 
Цитата
_Igor_61 написал: Формула или текст (длина строки, количество символов)?
Количество символов в строке)
Есть 4 префикса, на основании которых должна происходить корректировка длины строки по символам.
Эти префиксы запрашиваются через диалоговое окно у пользователя, и на основании ввода одного из них, на втором листе должна происходить сцепка (как в примере).
Сцепка должна учитывать указанный пользователем префикс : если fn/cn - не больше 80, если cn/cd - не больше 255.

При том количество столбцов в сцепке может варьироваться от 2-х до 6 (примерно) и надо чтобы формула сцепки ничего не упустила и не захватила лишнего.
Во вложенном файлике пример, (от которого может заболеть сердце) первоначальной версии макроса (без ветвлений), потом были изменения, на надеюсь проблема станет понятней)  
Определённое пользователем количество символов в формуле
 
Цитата
Казанский написал: Как должно выглядеть продолжение и где должно быть расположено - покажите на примере
Если возможно - то не включая FN и ";") строку надо разорвать без вреда для текста:

То есть он должен понять, что строка превышает допустимые 80, и начать делить её в строки ниже как продолжение.
И как закончит с делением одной строки, продолжить формулу дальше
Я понятия не имею возможно ли это(  
Изменено: Дилетант - 15.09.2018 15:05:32
Определённое пользователем количество символов в формуле
 
Всем доброго времени суток)
Нужна помощь в решении задачи:
Работаю с таблицами в которых бывает произвольное число столбцов, надо, чтобы они объединялись с определённым префиксом на создаваемом макросом листе.
Так же у пользователя должен запрашиваться сам префикс в формуле, и на основании этого префикса резались строки на новом листе.
То есть  если я указываю "fn" - надо чтобы формула на новом листе была не более 80-ти символов (fd - 255), и после началась новая строка, а именно продолжение.
Сам я мало понимаю в VBA, с некоторыми задачами справился, но встрял - как сделать чтобы формула резалась по нужному мне количеству символов и чтобы формула ничего не пропустила из ячеек?  

Объяснил как смог, может по приложенному примеру будет понятнее.  
Страницы: 1
Наверх