Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гуревич Александр Львович
Статус: 10-й класс
Рейтинг: 520
∙ повысить рейтинг »
Megaloman
Статус: Бакалавр
Рейтинг: 517
∙ повысить рейтинг »
Botsman
Статус: Специалист
Рейтинг: 516
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Номер выпуска:933
Дата выхода:24.09.2009, 17:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:363 / 92
Вопросов / ответов:3 / 3

Вопрос № 172312: Здраствуйте Уважаемые эксперты. У меня снова проблема с VBА. А именно не могу понять как организовать следуюзие действия более оптимально.(см. Приложение) Задача вот в чем. С С2 по Е12 нужно ячейки заполнить случайными числами. Это в екселе. П...


Вопрос № 172330: Здравствуйте, уважаемые эксперты! Нужна помощь в написании небольшого макроса для Microsoft Word. Задача состоит в следующем: в документе Word размещено очень большое количество формул, созданных во встроенном редакторе формул MS Equation 3.0. Необхо...
Вопрос № 172335: Добрый день Уважаемые эксперты. Как можно сократить, возможно с использованием процедуры код написанный на VBA(см. приложение) ...

Вопрос № 172312:

Здраствуйте Уважаемые эксперты. У меня снова проблема с VBА. А именно не могу понять как организовать следуюзие действия более оптимально.(см. Приложение)
Задача вот в чем. С С2 по Е12 нужно ячейки заполнить случайными числами. Это в екселе.
Пробовал так :
ActiveSheet.Range("C2:E12") = Int(Rnd * 200)
Все заполняется одинаковыми числами. Тоесть генератор срабатывает всего раз. Пожалуйста помогите оптимизировать и разобраться.

Отправлен: 18.09.2009, 22:46
Вопрос задал: Dimon4ik, 4-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Витер Александр Анатольевич, 9-й класс :
Здравствуйте, Dimon4ik.
Даже не знаю, что пояснять. В вашем варианте нужно делать так:
Код:
Sub gener()
Dim oCell As Range 'переменная для перебора ячеек
Dim oRng As Range 'Переменная для всего диапазона

Set oRng = ActiveSheet.Range("C2:E12") 'Определяем диапазон
Randomize 100 'инициализируем генератор случайных чисел
'Перебираем все ячейки, записывая в них случайное число от 0 до 199
For Each oCell In oRng.Cells
oCell = Int(Rnd * 200)
Next oCell
End Sub

-----
Лучше день потерять - потом за пять минут долететь!

Ответ отправил: Витер Александр Анатольевич, 9-й класс
Ответ отправлен: 19.09.2009, 03:21

Оценка ответа: 5
Комментарий к оценке:
Спасибо! Именно то, что надо!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254363 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 172330:

    Здравствуйте, уважаемые эксперты! Нужна помощь в написании небольшого макроса для Microsoft Word. Задача состоит в следующем: в документе Word размещено очень большое количество формул, созданных во встроенном редакторе формул MS Equation 3.0. Необходимо преобразовать все эти формулы в изображения и установить для каждого такого изображения свойство обтекания "В тексте". Создал небольшой макрос, работающий так: после выделения формулы в документе макрос вызывается на исполнение, в результате этого формула "вырезается" из документа и вставляется как EMF-рисунок. Но поскольку формул очень много, нужно автоматизированное решение данного вопроса (т.е. в документе ищутся все формулы, каждая из них преобразуется в рисунок и для преобразованного рисунка устанавливается обтекание "В тексте"). Заранее спасибо!

    Отправлен: 19.09.2009, 11:22
    Вопрос задал: denmmx, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Витер Александр Анатольевич, 9-й класс :
    Здравствуйте, denmmx.
    Предлагаю такой макрос:
    Код:
    Sub ConvertFormulaToPicture()
    Dim oInShp As InlineShape 'Переменная для формул
    Dim i As Long 'Счетчик фигур, имеющих обтекание «в тексте»
    Dim oRng As Range 'Место, где находится фигура

    'Перебираем все фигуры, имеющие обтекание в тексте, начиная с последней
    For i = ActiveDocument.InlineShapes.Count To 1 Step -1
    'запоминаем фигуру в переменную
    Set oInShp = ActiveDocument.InlineShapes(i)
    'Если фигура является объектом MSEquation
    If oInShp.OLEFormat.ClassType = "Equation.3" Then
    'Запоминаем место, где находится фигура
    Set oRng = oInShp.Range
    With oRng
    .Cut 'Вырезаем< br> .PasteSpecial DataType:=wdPasteMetafilePicture 'Вставляем
    'Преобразовуем в фигуру, имеющую обтекание «в тексте»
    ActiveDocument.Shapes(ActiveDocument.Shapes.Count).ConvertToInlineShape
    End With
    End If
    Next i
    End Sub

    -----
    Лучше день потерять - потом за пять минут долететь!

    Ответ отправил: Витер Александр Анатольевич, 9-й класс
    Ответ отправлен: 19.09.2009, 16:26

    Оценка ответа: 5
    Комментарий к оценке:
    Огромное спасибо за макрос, все работает как нужно ;-) !

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254378 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 172335:

    Добрый день Уважаемые эксперты.
    Как можно сократить, возможно с использованием процедуры код написанный на VBA(см. приложение)

    Отправлен: 19.09.2009, 14:30
    Вопрос задал: Dimon4ik, 4-й класс
    Всего ответов: 1
    Страница вопроса »


    Отвечает Megaloman, Бакалавр :
    Здравствуйте, Dimon4ik. Вот два варианта решения:
    1. C массивом
    Код:
    Private Sub CommandButton1_Click()

    Dim What(11)
    What(0) = "Текст 0"
    What(1) = "Текст 1"
    What(2) = "Текст 2"
    What(3) = "Текст 3"
    What(4) = "Текст 4"
    What(5) = "Текст 5"
    What(6) = "Текст 6"
    What(7) = "Текст 7"
    What(8) = "Текст 8"
    What(9) = "Текст 9"
    What(10) = "Текст 10"
    For i = 0 To 10
    If ComboBox1.Value = What(i) Then
    ActiveSheet.Range("c2").Offset(i, 0) = Int(TextBox1)
    ActiveSheet.Range("d2").Offset(i, 0) = Int(TextBox2)
    ActiveSheet.Range("e2").Offset(i, 0) = Int(T extBox3)
    Exit For
    End If
    Next

    End Sub
    2. С подпрограммой
    Код:
    Private Sub CommandButton1_Click()

    If ComboBox1.Value = "Текст 0" Then Call DefRang(0, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 1" Then Call DefRang(1, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 2" Then Call DefRang(2, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 3" Then Call DefRang(3, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 4" Then Call DefRang(4, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 5" Then Call DefRang(5, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = &q uot;Текст 6" Then Call DefRang(6, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 7" Then Call DefRang(7, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 8" Then Call DefRang(8, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 9" Then Call DefRang(9, TextBox1, TextBox2, TextBox3)
    If ComboBox1.Value = "Текст 10" Then Call DefRang(10, TextBox1, TextBox2, TextBox3)

    End Sub
    Sub DefRang(i, t1, t2, t3)
    ActiveSheet.Range("c2").Offset(i, 0) = Int(t1)
    ActiveSheet.Range("d2").Offset(i, 0) = Int(t2)
    ActiveSheet.Range("e2").Offset(i, 0) = Int(t3)
    End Sub
    Если TextBox1, TextBox2, TextBox3 объявить Public, то число аргументов можно резко сократить.
    Конструкцию If ... Then ... ElseIf ... Then не применил в угоду сокращения числа строк но с некоторой потерей эффективности



    -----
    Нет времени на медленные танцы

    Ответ отправил: Megaloman, Бакалавр
    Ответ отправлен: 20.09.2009, 11:15

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254402 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 22.09.2009

    В избранное