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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2015, 11:15   #1
Random13
 
Регистрация: 05.02.2015
Сообщений: 5
Лампочка Макрос MS Excel

Приветствую. Есть следующее задание: "Сгенерировать 20 случайных событий с интенсивностью 5 событий в час с помощью макроса MS Excel."
Есть и ответ, но я не знаю, правильный он или нет:
Код:
Option Explicit
Sub Макрос1()
Dim x As Integer
Dim y As Integer
Dim z As Integer '-кол-во событий в час
Dim StartTime
Let z = 5
Randomize
Application.EnableEvents = True
Application.DisplayAlerts = False
For x = 1 To 20 Step 1
'назначаем время очередной итерации цикла
    Let StartTime = Timer
'выбираем произвольное событие
    Let y = Rnd * 12
    Select Case y
        Case 1
            Sheets.Add
        Case 2
            ActiveSheet.Name = "qwerty" & x * y
        Case 3
            Range("A1").Interior.ColorIndex = 3
        Case 4
            Columns("A:A").Select
        Case 5
            Columns("A:A").Insert Shift:=xlToRight
        Case 6
            Columns("A:A").Delete Shift:=xlToLeft
        Case 7
            Rows("2:2").Select
        Case 8
            Rows("2:2").Insert Shift:=xlDown
        Case 9
            Rows("2:2").Delete Shift:=xlUp
        Case 10
            Range("A1").Select
        Case 11
            Range("A1").FormulaR1C1 = "qwerty"
        Case 12
            Range("A1").ClearContents
    End Select
    Debug.Print Time & " итерация номер " & x & " событие номер " & y
'замораживаемся перед след.итерацией на 1/5 часа * 60  секунд
    Do While Timer < StartTime + Int(60 / z * 60)
      DoEvents
    Loop
 Next x
Application.EnableEvents = False
Application.DisplayAlerts = True
End Sub
...
Это правильный ответ? И, если нет, то можете ли помочь с правильным?



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.02.2015 в 14:24.
Random13 вне форума Ответить с цитированием
Старый 07.02.2015, 12:30   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Наверное, не совсем.
1. По условию событий 20, а в программе - 12.
2. Вызывает сомнения реализация ожидания.

У меня нет Exel - всегда пользуюсь LibOffice. Но на работе, через 20 лет после института, встала задача, каждые 5 секунд в ячейку поступают данные от DDE, нужно сдвигать данные, чтобы строить график. Посидев в сети я наваял следующее.
Код:
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub ShiftDown()

    On Error GoTo Errors

    Dim vArrayLen   As Long         'длина массива с результатом
    Dim vRange      As Range        'диапазон с результатом
    
    Dim vLastTime   As Date
    
    Dim x, y As Long
    Dim i           As Long
    
    
Application.OnTime Now + TimeValue("00:00:05"), "ShiftDown"
    
    
    vLastTime = Time
    
    
    Worksheets.Item("Source").Activate
    
    vArrayLen = Range("A6").Value

    Worksheets.Item("Array").Activate
    
    Set vRange = Range(Cells(1, 1), Cells(vArrayLen, 1))
Rem Сдвиг
    For y = 1 To vRange.Columns.Count
      For x = vRange.Rows.Count To 1 Step -1
        Debug.Print vRange(x, y)
        If x > 1 Then
          vRange(x, y) = vRange(x - 1, y).Value
        End If
        Debug.Print vRange(x, y)
      Next x
    Next y

    GoTo Ends:
Errors:
    MsgBox ("Ну ты блин, Тикурила, Даешь")
Ends:
End Sub
Для тебя здесь нужное - организация временного интервала.

PS А, вообще, практика - критерий истинности.
FPaul вне форума Ответить с цитированием
Старый 07.02.2015, 14:05   #3
Random13
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
Для тебя здесь нужное - организация временного интервала.
А... как ее сделать?

Проблема в том, что я вообще ничего не понимаю в MS Excel. Это случайно попавшее ко мне задание. "Решение", приведенное в первом сообщении, было найдено в гугле, но я не особенно доверяю ему.

Последний раз редактировалось Random13; 07.02.2015 в 14:07.
Random13 вне форума Ответить с цитированием
Старый 07.02.2015, 14:55   #4
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Код:
Application.OnTime Now + TimeValue("00:00:05"), "ShiftDown"
Где в TimeValue ставится период до следующего события, а событие - вызов подпрограммы ShiftDown (так зовут мой макрос).

Моя проблема с MS Office ещё страшнее - у меня его нет - дорого. Но при возникновении задачи я взял поисковик и стал пробовать все варианты в Exel (что на работе) до решения задачи.

Повторю - попробуй хотя бы то, что у тебя есть. Заодно узнаешь - подходит или нет.
FPaul вне форума Ответить с цитированием
Старый 07.02.2015, 17:58   #5
Random13
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
Моя проблема с MS Office ещё страшнее - у меня его нет - дорого.
...У меня тоже.
Random13 вне форума Ответить с цитированием
Старый 07.02.2015, 18:30   #6
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Вот ещё вариант появления событий тыц.
Он слегка напоминает мой, но запуск производится автоматически.
Двадцать событий реализуй по аналогии с твоим кодом, но в количестве 20. События придумай сам - переключение активного листа-ячейки, закраска, выделение ячейки-строки-столбца-области, появление\исчезновение надписи и прочее (поищи по форумам ответы на простые вопросы "а как сделать...").

Со всеми примерами на компе с ёкселем - там делов на 1-2 часа.
FPaul вне форума Ответить с цитированием
Старый 07.02.2015, 20:56   #7
Random13
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
Вот ещё вариант появления событий тыц.
Он слегка напоминает мой, но запуск производится автоматически.
Двадцать событий реализуй по аналогии с твоим кодом, но в количестве 20. События придумай сам - переключение активного листа-ячейки, закраска, выделение ячейки-строки-столбца-области, появление\исчезновение надписи и прочее (поищи по форумам ответы на простые вопросы "а как сделать...").

Со всеми примерами на компе с ёкселем - там делов на 1-2 часа.
Я ужасающий нуб и вообще (Воообщееее...) ничего не понимаю. И у меня нет Excel, чтобы проверить результат, что является еще одной проблемой. На 1-2 часа? Может быть, кто-то смог бы сделать это задание за деньги?
Random13 вне форума Ответить с цитированием
Старый 10.02.2015, 18:17   #8
Random13
 
Регистрация: 05.02.2015
Сообщений: 5
По умолчанию

Так что, никто не может ничего подсказать? В одной теме мне сказали, что приведенный в первом посту макрос верный, в другой - что это не так. Я не могу проверить это самостоятельно, у меня даже Excel нет.
Random13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос (Excel) Ashas Microsoft Office Excel 2 31.01.2013 12:43
макрос в Excel MMMarinka Microsoft Office Excel 10 22.06.2012 11:13
Макрос Excel smit1 Помощь студентам 2 28.01.2012 23:15
макрос в Excel KNIGHT-SP Помощь студентам 1 15.08.2011 00:49
макрос в Excel Zcomp Microsoft Office Excel 2 15.09.2010 00:49