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

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

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

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

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

прикладываю файл
...
Рейтинг: 0 / 0
28.06.2011, 16:37
    #37327546
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
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
28.06.2011, 17:00
    #37327595
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
прилагаю также саму форму VBA
...
Рейтинг: 0 / 0
28.06.2011, 18:27
    #37327763
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
Namik, вообще то не сложно ответить и то что Вы спрашиваете, но...
Открыл Ваш файл, запустил Вашу форму, что потом жмём КомандБуттон 1, 2 или 3???
Построение странное
...
Рейтинг: 0 / 0
28.06.2011, 19:22
    #37327834
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
Button 3

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

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

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

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

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

вот строка

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
28.06.2011, 22:39
    #37327960
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
Namik,

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

который, как видно, уже нетрудно разбить Split-ом по разделителю @
...
Рейтинг: 0 / 0
28.06.2011, 22:53
    #37327980
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
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
28.06.2011, 23:04
    #37327988
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
Нет я не это имел ввиду, я кажется достаточно ясно выразил мысль. Если тебе не нужны буквы, скобки, пробелы - так убери их ДО Split-а. Я предлагал это сделать непосредственно в документе, но не знаю, приемлемо ли это в твоем случае.
...
Рейтинг: 0 / 0
28.06.2011, 23:07
    #37327989
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
наверное я не могу выразить свою мысль

спасибо

но это не то

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

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

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

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
29.06.2011, 10:10
    #37328282
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Split строки в заданном диапозоне
Namikя Вас прекрасно понял
Да нифига ты не понял, ну читай же внимательно

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

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

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

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

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

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

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

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

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

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

прошу Вас

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

Код: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Split строки в заданном диапозоне / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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