powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Split строки в заданном диапозоне
25 сообщений из 25, страница 1 из 1
VBA Split строки в заданном диапозоне
    #37327120
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемые господа

при наличии времени прошу Вас помочь

есть файл Word с такой структурой

1) Вопрос теста Chr(11))
A) Ответ 1 Chr(11)
B) Ответ 2 Chr(11)
C) Ответ 3 Chr(11)
D) Ответ 4 Chr(11)
E) Ответ 5 Chr(11)

вот таким кодом я разбиваю всю конструкцию и получаю в переменные отдельные строки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim s As String
Dim a() As String

kolvospiska = ActiveDocument.ListParagraphs.Count
 
i = i +  1 
 
If i >  23  Then
MsgBox "Конец"
Else

s = ActiveDocument.ListParagraphs(i).Range
a = Split(s, Chr( 11 ))

l1.Caption = a( 0 )          ' Вопрос теста 
l2.Caption = a( 1 )          ' Ответ 1 
l3.Caption = a( 2 )          ' Ответ 2 
l4.Caption = a( 3 )          ' Ответ 3
l5.Caption = a( 4 )          ' Ответ 4 
l6.Caption = a( 5 )          ' Ответ 5 

End If

как видно из кода ограничителем Split является Chr(11)

подскажите пожалуйста как изменить этот код так

чтобы в первую переменную садились данные находящиеся между "1)" и Chr(11)
во вторую переменную данные находящиеся между "A)" и "B)"
в третью ... между "B)" и "C)"
в четвертую ... между "C)" и "D)"
в пятую ... между "D)" и "E)"
в шестую ... между "E)" и Chr(11)



С Уважением
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327151
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,
>садились данные находящиеся между "1)" и Chr(11)
кто ж его посадит, он же файл, прикладывайте файл
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327185
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,

Убить предварительно эти самые "1)", "А)" и т.п.

можно сделать это вордовым посиком/заменой
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327527
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю Вас за ответы

прикладываю файл
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327546
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
дело в том что при такой записи теста

1) Вопрос теста Chr(11))
A) Ответ 1 Chr(11)
B) Ответ 2 Chr(11)
C) Ответ 3 Chr(11)
D) Ответ 4 Chr(11)
E) Ответ 5 Chr(11)

вариант который есть у меня устраивает


но дело в том что учитель может написать тест так, что разобьет ответ одного варианта на две строки
вот например так

1) Вопрос теста Chr(11))
A) Ответ 1 Chr(11)
продолжение ответа 1 Chr(11)
B) Ответ 2 Chr(11)
C) Ответ 3 Chr(11)
D) Ответ 4 Chr(11)
E) Ответ 5 Chr(11)

а при таком раскладе не весь текст сядет в переменную

поэтому и надо чтобы программа брала текст между теми позициями которые я указал

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327595
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прилагаю также саму форму VBA
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327763
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik, вообще то не сложно ответить и то что Вы спрашиваете, но...
Открыл Ваш файл, запустил Вашу форму, что потом жмём КомандБуттон 1, 2 или 3???
Построение странное
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327834
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Button 3

Ципихович Эндрю
построение - ну это же черновой вариант - т.е. весь путь работы
я в начале получал данные в msgbox потом d Label

может я как то не правильно выражаю свою мысль
мне то и нужно чтобы из строки которую получает переменная S ( вытащить нужные данные между указанным диапазоном)

С Уважением
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327853
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,
Debug.Print s помогает:
Великая Отечественная Война началась в:A) 1945 г.B) 1914 г.C) 1928 г.D) 1999 г.E) 2000 г.PO) 1945 г.
Что надо вытащить??
1945 г.
так?? то есть три первых знака откинуть???
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327861
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NamikShocker.Pro
но дело в том что учитель может написать тест так, что разобьет ответ одного варианта на две строки
вот например так

Берешь и заменяешь последовательность:
<chr(11)><конец абзаца><любая буква><скобка><пробел>
на какой-нить символ, скажем @
а потом делаешь split по нему.
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327950
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю Вас за ответы

Ципихович Эндрю

вот строка

1) Великая Отечественная Война началась в:A) 1945 г.B) 1914 г.C) 1928 г.D) 1999 г.E) 2000 г.PO) 1945 г.

как в переменную1 вытащить все что между 1) и : т.е. (Великая Отечественная Война началась в)
в переменную2 вытащить все что между A) и B) т.е. 1945 г.
и т.д.

я же не знаю сколько символов будет не нужно в следующем тесте

но я знаю четко структуру теста - которую я указал выше

Shocker.Pro
Вы имеет ввиду вставлять вместо Chr(11) например "A)"

но и это не дает желаемый результата
может я не правильно Вас понял

подскажите кодом - если Вам не трудно

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,

Неправильно понял.
После того, как ты сделаешь замену, про которую я сказал, получишь примерно следующий результат:
@Ответ 1 Chr(11)
продолжение ответа 1@Ответ 2@Ответ 3@Ответ 4@Ответ 5

который, как видно, уже нетрудно разбить Split-ом по разделителю @
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327980
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro

я изменил свой код

посмотрите пожалуйста Вы так имели ввиду ?

Dim s As String
Dim a() As String

kolvospiska = ActiveDocument.ListParagraphs.Count

i = i + 1

If i > 23 Then
MsgBox "Конец"
Else
s = ActiveDocument.ListParagraphs(i).Range
g = Replace(s, Chr(11), "@")

a = Split(g, "@")


l1.Caption = a(0)
l11.Caption = a(1)
l2.Caption = a(2)
l3.Caption = a(3)
l4.Caption = a(4)
l5.Caption = a(5)
Rem MsgBox a(6)

End If
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327988
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет я не это имел ввиду, я кажется достаточно ясно выразил мысль. Если тебе не нужны буквы, скобки, пробелы - так убери их ДО Split-а. Я предлагал это сделать непосредственно в документе, но не знаю, приемлемо ли это в твоем случае.
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37327989
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверное я не могу выразить свою мысль

спасибо

но это не то

С Уважением
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328008
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты-то смог, и я понимаю, что тебе надо
Но ты не хочешь вникнуть в мое предложение. Но я не знаю, как тебе его разжевать.

Нажми в документе
Ctrl+H
В поле "Найти" напиши " ^l^$) " (кавычки не надо, в конце пробел, обрати внимание)
В поле "Заменить" напиши "@"
Нажми "Заменить все"

Результат обрабатывай Split-ом с разделителем @
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328093
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда это
Нажми в документе
Ctrl+H
В поле "Найти" напиши "^l^$) " (кавычки не надо, в конце пробел, обрати внимание)
В поле "Заменить" напиши "@"
Нажми "Заменить все"
делаете, макрорекодер на записи
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328273
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемые

Shocker.Pro
Ципихович Эндрю

я Вам очень благодарен за помощь
я Вас прекрасно понял

но прошу Вас просмотреть то что получается

прошу Вас сравнить

вот тест

1) Великая Отечественная Война началась в:
A) 1945 г.
B) 1914 г.
C) 1928 г.
D) 1999 г.
E) 2000 г.

вот его деление по Вашей методике

1) Великая Отечественная Война началась в:@) 1945 г.@) 1914 г.@) 1928 г.@) 1999 г.@) 2000 г.

все нормально - то что надо - каждая строка садится на свое место

теперь прошу Вас посмотреть второй вариант написания теста


1) Великая Отечественная Война началась в:
продолжение вопроса теста
A) 1945 г.
B) 1914 г.
C) 1928 г.
D) 1999 г.
E) 2000 г.

вот его деление по Вашей методике

1) Великая Отечественная Война началась в:@родолжение вопроса теста@) 1945 г.@) 1914 г.@) 1928 г.@) 1999 г.@) 2000 г.

прошу Вас обратить внимание на то что при перовом разбиении текста у нас получается 6 строк

при втором 7 строк
и естественно строки смешиваются и не садятся на свои места а последняя строка будет пропущена


С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328282
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namikя Вас прекрасно понял
Да нифига ты не понял, ну читай же внимательно

оригинал1) Великая Отечественная Война началась в:
продолжение вопроса теста
A) 1945 г.
B) 1914 г.
C) 1928 г.
D) 1999 г.
E) 2000 г.
посл обработки1) Великая Отечественная Война началась в: @ родолжение вопроса теста@) 1945 г.@) 1914 г.@) 1928 г.@) 1999 г.@) 2000 г.
ну вот объясни, откуда взялась красная собака????
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328285
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, ну понятно
оттуда же, откуда и скобки после собаки в ответах теста

вот для чего я второй день объясняю, что требуется сделать?
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328306
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro

скажите пожалуйста как одновременно дать команду на замену

"A)" "B)" "C)" "D)" "E)" на символ "@"

пробовал так g = Replace(s, "A)" "B)" "C)" "D)" "E)", "@") - выдает ошибку

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328311
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
replace(replace(replace(....)))
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328349
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое Вам спасибо

все работает как надо

вопрос закрыт

если кому интересно вот конечный код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub CommandButton4_Click()
Dim s As String
Dim a() As String

kolvospiska = ActiveDocument.ListParagraphs.Count
 
i = i +  1 
 
If i >  23  Then
MsgBox "Конец"
Else
s = ActiveDocument.ListParagraphs(i).Range
g = Replace(s, "A)", "@")
g = Replace(g, "B)", "@")
g = Replace(g, "C)", "@")
g = Replace(g, "D)", "@")
g = Replace(g, "E)", "@")

a = Split(g, "@")

l1.Caption = a( 0 )
l11.Caption = a( 1 )
l2.Caption = a( 2 )
l3.Caption = a( 3 )
l4.Caption = a( 4 )
l5.Caption = a( 5 )
Rem MsgBox a(6)


End If

End Sub

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328403
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik, или тут не всё или зачем нужно: i = i + 1
Цикла нет, когда же увидим:
If i > 23 Then
MsgBox "Конец"
?????????
...
Рейтинг: 0 / 0
VBA Split строки в заданном диапозоне
    #37328436
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да Вы правы

прошу Вас

теперь все считает правильно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub CommandButton4_Click()
Dim s As String
Dim a() As String

kolvospiska = ActiveDocument.ListParagraphs.Count
 
i = i +  1 
 
If i > kolvospiska Then
MsgBox "Конец"
Else
s = ActiveDocument.ListParagraphs(i).Range
g = Replace(s, "A)", "@")
g = Replace(g, "B)", "@")
g = Replace(g, "C)", "@")
g = Replace(g, "D)", "@")
g = Replace(g, "E)", "@")

a = Split(g, "@")

l1.Caption = a( 0 )
l11.Caption = a( 1 )
l2.Caption = a( 2 )
l3.Caption = a( 3 )
l4.Caption = a( 4 )
l5.Caption = a( 5 )
Rem MsgBox a(6)


End If

End Sub

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Split строки в заданном диапозоне
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]