Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Корректный перенос текста по строкам - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Корректный перенос текста по строкам (Формулы/Formulas)
Корректный перенос текста по строкам
combat Дата: Четверг, 08.10.2015, 22:52 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Всем доброго времени суток, помогите решить задачу
прошелся по ветке www.excelworld.ru/forum/2-890-1 ничего для себя не взял, все не то
на моём примере, и по моему шаблону как корректно переносить текст по строкам шаблона
в первых двух строках применены формулы, с "ручной" настройкой кол-ва символов (регулятор первой строки)
в других строках текст может уходить за границы диапазона объединённых ячеек
при перемещении по листбоксу, если сдвинуть форму видно как распределяется текст в первых двух строках и как он не умещается в других
как решить эту задачу без формул, а макросами
К сообщению приложен файл: 4___97-2003.rar (59.6 Kb)


Сообщение отредактировал combat - Четверг, 08.10.2015, 22:52
 
Ответить
СообщениеВсем доброго времени суток, помогите решить задачу
прошелся по ветке www.excelworld.ru/forum/2-890-1 ничего для себя не взял, все не то
на моём примере, и по моему шаблону как корректно переносить текст по строкам шаблона
в первых двух строках применены формулы, с "ручной" настройкой кол-ва символов (регулятор первой строки)
в других строках текст может уходить за границы диапазона объединённых ячеек
при перемещении по листбоксу, если сдвинуть форму видно как распределяется текст в первых двух строках и как он не умещается в других
как решить эту задачу без формул, а макросами

Автор - combat
Дата добавления - 08.10.2015 в 22:52
Roman777 Дата: Воскресенье, 11.10.2015, 20:44 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, добрый день!
Честно, не знаю как полностью граммотно решить Вашу задачу. Но вы как минимум могли бы использовать те же формулы, что у Вас есть, просто записав их в коде ВБА, например:
Код
=ЕСЛИ(ДЛСТР(BC3)<BB15;BC3;ЛЕВСИМВ(BC3;ПОИСК(" ";BC3;BB15)-1))

Значение, которое у Вас в BC3 запишите в одну переменную, например Namess, а длину, которую вы пишите в ячейке BB15 можно записать в другую переменную или явно указывать в коде:
[vba]
Код
if len(Namess)<45 then
  Name=Namess
else
  Name=Left(Namess,Find(" ", Namess,45)-1))
end if
[/vba]
Гдe Name - переменная, получаемое значение которой Вы будете записывать в ячейку M15
Для ячейки A17 можно по аналогии формулу записать в коде ВБА.


Много чего не знаю!!!!
 
Ответить
Сообщениеcombat, добрый день!
Честно, не знаю как полностью граммотно решить Вашу задачу. Но вы как минимум могли бы использовать те же формулы, что у Вас есть, просто записав их в коде ВБА, например:
Код
=ЕСЛИ(ДЛСТР(BC3)<BB15;BC3;ЛЕВСИМВ(BC3;ПОИСК(" ";BC3;BB15)-1))

Значение, которое у Вас в BC3 запишите в одну переменную, например Namess, а длину, которую вы пишите в ячейке BB15 можно записать в другую переменную или явно указывать в коде:
[vba]
Код
if len(Namess)<45 then
  Name=Namess
else
  Name=Left(Namess,Find(" ", Namess,45)-1))
end if
[/vba]
Гдe Name - переменная, получаемое значение которой Вы будете записывать в ячейку M15
Для ячейки A17 можно по аналогии формулу записать в коде ВБА.

Автор - Roman777
Дата добавления - 11.10.2015 в 20:44
Cheshir0067 Дата: Вторник, 13.10.2015, 10:12 | Сообщение № 3
Группа: Проверенные
Ранг: Новичок
Сообщений: 35
Репутация: 8 ±
Замечаний: 0% ±

Excel 2010
Имхо всё не так страшно:
Самое главное определиться с размером и шрифтом чтобы влазил в ячейку и задать конечное колличество символов (ограничение) для показа в первой ячейке.
Пример берёт колличество символов из ячейки BB15 и разбрасывает по строкам.
В Вашем примере надо заменить в Private Sub ListBox1_Change():
[vba]
Код

Worksheets("РСИ").Cells(3, 55) = Lbl.Caption
[/vba]
На:
[vba]
Код

numb = Worksheets("РСИ").Cells(15, 54)' Считаем колличество символов к отображению
Worksheets("РСИ").Cells(15, 13).FormulaR1C1 = Left(Lbl.Caption, numb)' Записываем numb символов с лева в первую ячейку
Worksheets("РСИ").Cells(17, 1) = Right(Lbl.Caption, Len(Lbl.Caption) - numb)' Забираем оставшиеся символы во вторую ячейку
[/vba]


irelandzp@gmail.com
 
Ответить
СообщениеИмхо всё не так страшно:
Самое главное определиться с размером и шрифтом чтобы влазил в ячейку и задать конечное колличество символов (ограничение) для показа в первой ячейке.
Пример берёт колличество символов из ячейки BB15 и разбрасывает по строкам.
В Вашем примере надо заменить в Private Sub ListBox1_Change():
[vba]
Код

Worksheets("РСИ").Cells(3, 55) = Lbl.Caption
[/vba]
На:
[vba]
Код

numb = Worksheets("РСИ").Cells(15, 54)' Считаем колличество символов к отображению
Worksheets("РСИ").Cells(15, 13).FormulaR1C1 = Left(Lbl.Caption, numb)' Записываем numb символов с лева в первую ячейку
Worksheets("РСИ").Cells(17, 1) = Right(Lbl.Caption, Len(Lbl.Caption) - numb)' Забираем оставшиеся символы во вторую ячейку
[/vba]

Автор - Cheshir0067
Дата добавления - 13.10.2015 в 10:12
combat Дата: Вторник, 13.10.2015, 11:59 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Я пошел совсем по другому пути, объединил строки нарисовал линии и вставил label (подстрочный текст под эти линии)
вставляемый текст из ячеек распределяется в соответствии со свойствами "переносить по словам" в коде ...

[vba]
Код
Worksheets("РСИ").Cells(15, 1) = "Средство измерения " & Lbl.Caption
[/vba]

вообщем все оказалось очень просто, и без заморочек, правда пришлось подбирать шрифт, необходимо было большое межстрочное пространство, у вас его может не быть и будет не корректно показывать, подобрал шрифт Ebrima

далее, следующая для меня проблема, вроде должно все работать, но не срабатывает код в форме ComboBox1 иComboBox2
[vba]
Код
Private Sub UserForm_Initialize()
       
    ListBox1.ColumnCount = 2 '
    ListBox1.ColumnWidths = "0;"
    CommandButton2.Enabled = False
    '...........................................
    Set SRng = Sheets("БазаСИ").Range("B1") '
    '...........................................
    Set SRng = Range(SRng, SRng.End(xlDown))
    N = SRng.Rows.Count
    Vs = SRng.Value
    ReDim SArr(1 To N)
    ReDim Arrr(N - 1)
    For R = 1 To N
        Sentence = Vs(R, 1)
        SArr(R) = " " & Replace(Sentence, """", "")
        ListBox1.AddItem R
        ListBox1.List(R - 1, 1) = Sentence
        Arrr(R - 1) = R
    Next
    
    Lbl_SI.Caption = "Всего СИ в базе " & " " & N & " ед."
    'ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    'ComboBox2.List = Worksheets("Специалисты").Range("B1", Cells(Rows.Count, "B").End(xlUp)).Value
End Sub
[/vba]

тот код который отключен, в самом конце
К сообщению приложен файл: 0460682.rar (94.5 Kb)


Сообщение отредактировал combat - Вторник, 13.10.2015, 22:16
 
Ответить
СообщениеЯ пошел совсем по другому пути, объединил строки нарисовал линии и вставил label (подстрочный текст под эти линии)
вставляемый текст из ячеек распределяется в соответствии со свойствами "переносить по словам" в коде ...

[vba]
Код
Worksheets("РСИ").Cells(15, 1) = "Средство измерения " & Lbl.Caption
[/vba]

вообщем все оказалось очень просто, и без заморочек, правда пришлось подбирать шрифт, необходимо было большое межстрочное пространство, у вас его может не быть и будет не корректно показывать, подобрал шрифт Ebrima

далее, следующая для меня проблема, вроде должно все работать, но не срабатывает код в форме ComboBox1 иComboBox2
[vba]
Код
Private Sub UserForm_Initialize()
       
    ListBox1.ColumnCount = 2 '
    ListBox1.ColumnWidths = "0;"
    CommandButton2.Enabled = False
    '...........................................
    Set SRng = Sheets("БазаСИ").Range("B1") '
    '...........................................
    Set SRng = Range(SRng, SRng.End(xlDown))
    N = SRng.Rows.Count
    Vs = SRng.Value
    ReDim SArr(1 To N)
    ReDim Arrr(N - 1)
    For R = 1 To N
        Sentence = Vs(R, 1)
        SArr(R) = " " & Replace(Sentence, """", "")
        ListBox1.AddItem R
        ListBox1.List(R - 1, 1) = Sentence
        Arrr(R - 1) = R
    Next
    
    Lbl_SI.Caption = "Всего СИ в базе " & " " & N & " ед."
    'ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    'ComboBox2.List = Worksheets("Специалисты").Range("B1", Cells(Rows.Count, "B").End(xlUp)).Value
End Sub
[/vba]

тот код который отключен, в самом конце

Автор - combat
Дата добавления - 13.10.2015 в 11:59
combat Дата: Четверг, 15.10.2015, 19:41 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Как заставить работать ComboBox на форме, беря данные с листа в книге, а форма привязана к др. листу, у меня по чему то не работает
пребывал по всякому, работает только если активен лист с которого берутся данные, все указано в сообщении 4, там же и файл

[vba]
Код
ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
[/vba]

если активен лист "РСИ" не работает, если лист "Специалисты" работает, в общем надо, что бы работало при активном листе "РСИ"


Сообщение отредактировал combat - Четверг, 15.10.2015, 19:41
 
Ответить
СообщениеКак заставить работать ComboBox на форме, беря данные с листа в книге, а форма привязана к др. листу, у меня по чему то не работает
пребывал по всякому, работает только если активен лист с которого берутся данные, все указано в сообщении 4, там же и файл

[vba]
Код
ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
[/vba]

если активен лист "РСИ" не работает, если лист "Специалисты" работает, в общем надо, что бы работало при активном листе "РСИ"

Автор - combat
Дата добавления - 15.10.2015 в 19:41
Roman777 Дата: Четверг, 15.10.2015, 22:40 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, Добрый день!
Я не знаю что вы пытаетесь сделать когда пишите:
ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value

Я обычно добавляю данные так (сразу не заметил что у Вас Рендж):

[vba]
Код
Private Sub UserForm_Initialize()
For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
Next i
End Sub
[/vba]
Честно говоря, точно сам не знаю почему Ваш способ не работает, сам сталкивался... это связано именно, что Вы пытаетесь вставить данные через Range, но Range, который на другом, неактивном листе.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 15.10.2015, 22:56
 
Ответить
Сообщениеcombat, Добрый день!
Я не знаю что вы пытаетесь сделать когда пишите:
ComboBox1.List = Worksheets("Специалисты").Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value

Я обычно добавляю данные так (сразу не заметил что у Вас Рендж):

[vba]
Код
Private Sub UserForm_Initialize()
For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
Next i
End Sub
[/vba]
Честно говоря, точно сам не знаю почему Ваш способ не работает, сам сталкивался... это связано именно, что Вы пытаетесь вставить данные через Range, но Range, который на другом, неактивном листе.

Автор - Roman777
Дата добавления - 15.10.2015 в 22:40
Roman777 Дата: Пятница, 16.10.2015, 09:57 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, кстати, вчера потом ток сообразил, что Ваш вариант тоже скорее всего рабочий, просто Вы забыли сказать, с какого листа берёте ячейки:
[vba]
Код
ComboBox1.List = Worksheets("Специалисты").Range("A1", Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp)).Value
[/vba]


Много чего не знаю!!!!
 
Ответить
Сообщениеcombat, кстати, вчера потом ток сообразил, что Ваш вариант тоже скорее всего рабочий, просто Вы забыли сказать, с какого листа берёте ячейки:
[vba]
Код
ComboBox1.List = Worksheets("Специалисты").Range("A1", Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp)).Value
[/vba]

Автор - Roman777
Дата добавления - 16.10.2015 в 09:57
combat Дата: Пятница, 16.10.2015, 19:43 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Роман, я не сомневался, что Вы мне очередной раз поможете, и еще раз вам большое спасибо
работает только первый вариант, при втором дает ошибку на запуск формы 2

[vba]
Код
Dim i As Variant
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
    ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
    Next i
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "B").End(xlUp).Row
    ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value
    Next i
[/vba]

т.к. у меня выбор из двух списков, код сделал вот так...
 
Ответить
СообщениеРоман, я не сомневался, что Вы мне очередной раз поможете, и еще раз вам большое спасибо
работает только первый вариант, при втором дает ошибку на запуск формы 2

[vba]
Код
Dim i As Variant
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
    ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
    Next i
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "B").End(xlUp).Row
    ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value
    Next i
[/vba]

т.к. у меня выбор из двух списков, код сделал вот так...

Автор - combat
Дата добавления - 16.10.2015 в 19:43
Roman777 Дата: Пятница, 16.10.2015, 20:14 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, я думаю что второй мб опять где-то неправильно был применён... сразу замечу, что если у Вас данные в одинаковых строках в столбце "А" и "B", можно было бы обойтись и одним циклом. И вообще
[vba]
Код
Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
[/vba] - просто определяет последнюю из заполненных строк для столбца "А" и думаю, что лучше всего не пересчитывать его на каждом шаге цикла, а запихнуть в переменную (предварительно посчитав 1 раз) и потом уже использовать из памяти, так что сам себя поправлю:
[vba]
Код
Dim i as long
Dim i_n as long
  i_n = Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
  For i=1 to i_n
     ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
     ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value ' если для столбцов "А" и "B" данные лежат в одних и тех же строках, иначе надо делать второй цикл, как вы делали выше.
  Next i
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 16.10.2015, 20:15
 
Ответить
Сообщениеcombat, я думаю что второй мб опять где-то неправильно был применён... сразу замечу, что если у Вас данные в одинаковых строках в столбце "А" и "B", можно было бы обойтись и одним циклом. И вообще
[vba]
Код
Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
[/vba] - просто определяет последнюю из заполненных строк для столбца "А" и думаю, что лучше всего не пересчитывать его на каждом шаге цикла, а запихнуть в переменную (предварительно посчитав 1 раз) и потом уже использовать из памяти, так что сам себя поправлю:
[vba]
Код
Dim i as long
Dim i_n as long
  i_n = Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
  For i=1 to i_n
     ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
     ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value ' если для столбцов "А" и "B" данные лежат в одних и тех же строках, иначе надо делать второй цикл, как вы делали выше.
  Next i
[/vba]

Автор - Roman777
Дата добавления - 16.10.2015 в 20:14
RAN Дата: Пятница, 16.10.2015, 20:23 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Мууученики! :D
[vba]
Код
With Worksheets("Специалисты")
ComboBox1.List = .Range(.Cells(1,"A"), .Cells(.Rows.Count, "A").End(xlUp)).Value
ComboBox2.List = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМууученики! :D
[vba]
Код
With Worksheets("Специалисты")
ComboBox1.List = .Range(.Cells(1,"A"), .Cells(.Rows.Count, "A").End(xlUp)).Value
ComboBox2.List = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
[/vba]

Автор - RAN
Дата добавления - 16.10.2015 в 20:23
Roman777 Дата: Пятница, 16.10.2015, 21:07 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
RAN, Вы правы...) Почему-то сразу в глаза не бросилось)
combat, Советую всё-таки, вопросы, не относящиеся к самой теме создавать в отдельной теме. Ибо правила...
А по вопросу, я бы на Вашем месте поставил название отдела напротив каждого работника... А потом уже по условию, при выборе начальника (или любого работника отдела), сверять его отдел с отделами всех остальных, и только те, где отделы совпадают, добавлять в комбобокс)))


Много чего не знаю!!!!
 
Ответить
СообщениеRAN, Вы правы...) Почему-то сразу в глаза не бросилось)
combat, Советую всё-таки, вопросы, не относящиеся к самой теме создавать в отдельной теме. Ибо правила...
А по вопросу, я бы на Вашем месте поставил название отдела напротив каждого работника... А потом уже по условию, при выборе начальника (или любого работника отдела), сверять его отдел с отделами всех остальных, и только те, где отделы совпадают, добавлять в комбобокс)))

Автор - Roman777
Дата добавления - 16.10.2015 в 21:07
combat Дата: Пятница, 16.10.2015, 22:47 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Где-то рядом, но пока решение не нашел

[vba]
Код
Dim i As Variant
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
    ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
    Next i
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "B").End(xlUp).Row
    ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value
    Next i
[/vba]

думаю связать так: при выборе из ComboBox1 первой строки, назначить второй столбец ComboBox2, при выборе ComboBox1 второй строки, назначить третий столбец ComboBox2 и так далее и как сделать не пойму...
 
Ответить
СообщениеГде-то рядом, но пока решение не нашел

[vba]
Код
Dim i As Variant
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "A").End(xlUp).Row
    ComboBox1.AddItem Worksheets("Специалисты").Cells(i, "A").Value
    Next i
    For i = 1 To Worksheets("Специалисты").Cells(Rows.Count, "B").End(xlUp).Row
    ComboBox2.AddItem Worksheets("Специалисты").Cells(i, "B").Value
    Next i
[/vba]

думаю связать так: при выборе из ComboBox1 первой строки, назначить второй столбец ComboBox2, при выборе ComboBox1 второй строки, назначить третий столбец ComboBox2 и так далее и как сделать не пойму...

Автор - combat
Дата добавления - 16.10.2015 в 22:47
RAN Дата: Пятница, 16.10.2015, 22:57 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Правильно! Зачем искать там, где потерял, когда там, где светло удобнее.
К сообщению приложен файл: 0982607.jpg (35.1 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПравильно! Зачем искать там, где потерял, когда там, где светло удобнее.

Автор - RAN
Дата добавления - 16.10.2015 в 22:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Корректный перенос текста по строкам (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!