Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 04:31   #1
piatka
 
Регистрация: 13.05.2010
Сообщений: 5
По умолчанию Перемещение абзацев внутри ячейки

В Word таблица из двух столбцов - тест. Во втором столбце в каждой ячейке варианты ответов, каждый вариант в отдельном абзаце (количество вариантов различное в разных вопросах). Необходимо перемешать абзацы (варианты) внутри каждой ячейки, т.к. правильные варианты указаны на вершине списка. Вопросов 2500.
Помогите, пожалуйста, советом.
piatka вне форума Ответить с цитированием
Старый 14.05.2010, 22:19   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

  1. Абзацы в ячейке, содержащей ответы, загнать в массив
  2. Содержимое ячейки с ответами удалить
  3. Генерировать случайное число от 0 до количества элементов в массиве (т.е. количества вариантов), исключая повторение
  4. Добавлять абзацы из массива в ячейку, удаляя их при этом из массива.
Добавлено позже
Оказалось всё не так сложно. Потребовалось всего 15 минут.
Код:
Sub MixAnswers()
  Dim arAnswers() As String 'абзацы с ответами
  Dim oTbl As Table 'таблица с тестом
  Dim oCell As Cell 'ячейка с ответами
  Dim n As Integer 'счётчик ответов
  
  Set oTbl = Selection.Tables(1) 'Таблица в которой находится курсор
  Set oCell = oTbl.Cell(1, 2) 'Первая ячейка второго столбца
  
  Do Until oCell Is Nothing 'Делать, пока не выйдем из таблицы
    'Ответы из абзацев в массив
    arAnswers = Split(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2), vbCr)
    oCell.Range.Delete 'Удаление содержимого ячейки
    Do
      'Генерация случайного номера абзаца в заданных пределах
      Do
        n = GenRndNumber(0, UBound(arAnswers))
      Loop Until arAnswers(n) <> ""
      'Вставляем в ячейку вариант ответа
      oCell.Range.InsertAfter arAnswers(n)
      oCell.Range.InsertParagraphAfter
      arAnswers(n) = "" 'Очищаем данный вариант ответа, чтобы он не повторялся
    Loop While Join(arAnswers, "") <> "" 'Делать, пока в массиве есть непустые строки
    If oCell.RowIndex + 1 <= oTbl.Rows.Count Then
      Set oCell = oTbl.Cell(oCell.RowIndex + 1, 2) 'Следующая ячейка
    Else
      Set oCell = Nothing
    End If
    DoEvents 'Не зависать!
  Loop
End Sub

'Функция для генерации случайного целого числа в заданных пределах
Function GenRndNumber(Lower%, Upper%) As Integer
  Randomize
  GenRndNumber = Int((Upper% - Lower% + 1) * Rnd + Lower%)
End Function
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 14.05.2010 в 23:53.
viter.alex вне форума Ответить с цитированием
Старый 15.05.2010, 22:57   #3
piatka
 
Регистрация: 13.05.2010
Сообщений: 5
По умолчанию

Гениально. Спасибо огромное, буду пробовать!
piatka вне форума Ответить с цитированием
Старый 15.05.2010, 23:22   #4
piatka
 
Регистрация: 13.05.2010
Сообщений: 5
По умолчанию

Все получилось, без запинки! Не знаю, как благодарить!
piatka вне форума Ответить с цитированием
Старый 16.05.2010, 22:39   #5
piatka
 
Регистрация: 13.05.2010
Сообщений: 5
По умолчанию

Alex, можно вопрос?
Не поняла почему -2:
arAnswers = Split(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2), vbCr)
piatka вне форума Ответить с цитированием
Старый 17.05.2010, 07:07   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Потому, что текст в ячейке таблицы всегда заканчивается двумя символами: абзаца (Chr(13)) и конца ячейки (Chr(7))
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 18.05.2010, 18:57   #7
piatka
 
Регистрация: 13.05.2010
Сообщений: 5
По умолчанию

Смутно догадывалась.., восхищаюсь - знать такие тонкости!!!
piatka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый файл. Подсчитать в нем количество слов, символов, абзацев. Xeon332 Помощь студентам 3 24.12.2009 01:23
Передвинуть текст внутри ячейки таблицы RamireZ HTML и CSS 4 14.09.2009 15:19
"плавают" ячейки таблицы, если она внутри fieldset barbiturat HTML и CSS 1 26.11.2008 14:01
Сочетания клавиш внутри ячейки Konstantin_Z Microsoft Office Excel 4 22.08.2008 16:40
Перемещение рисунков внутри формы Marsik Помощь студентам 10 01.11.2007 09:48