2016-12-23 12 views
2

Я пытаюсь создать макрос, чтобы высвечивать визуальный сигнал, когда пользователь открывает книгу, основываясь на некоторых условиях, описывающих состояние рабочей книги.Вспышка во всплывающем окне Excel

Что бы я хотел сделать, это заполнить весь экран/область ячейки/тему границы excel цветом, который не влияет на форматирование ячейки или содержимое чего-либо (это только временно). Мой текущий подход заключается в создании формы для заполнения экрана и, при необходимости, изменения цвета заливки.

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
'allows for pauses in the millisecond range 

Sub Flash_routine() 
    Dim FillCol As Long 
    FillCol = RGB(255, 186, 49) 

     ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 2000, 1000).Select 
    For x = 1 To 2 'phase ie. lightingup, empty 
     If x = 1 Then 
      IncVal = 0.5 
     Else 
      IncVal = 0.05 
     End If 

     For i = 0 To 1 Step IncVal 
      With Selection.ShapeRange.Fill 
       .Visible = msoTrue 
       .ForeColor.RGB = FillCol 
       If x = 1 Then 
        .Transparency = 1 - i 
       Else 
        .Transparency = i 
       End If 
       .Solid 
      End With 
      Sleep 50 
      'dictates time between successive shape fills 
      ActiveWindow.SmallScroll down:=3 
      ActiveWindow.SmallScroll up:=3 
      'refreshes screen view 

     Next i 
    Next x 

     Selection.Delete 
End Sub 

Макрос вызывается в Workbook_Open случае

Однако есть несколько проблем, которые я был бы признателен за помощь с;

  • Прежде всего, это правильный подход или есть какое-то приложение оттенка экрана, о котором я не знаю?

  • Предполагая, что это - моя форма не заполняет экран. У меня было впечатление, что AddShape(msoShapeRectangle, 0, 0, 2000, 1000) поместит мою фигуру в верхний левый угол (0,0), но на самом деле она немного поместится вниз (столбец 1, 3 ряда вниз от того места, где сейчас выглядит мое окно, например, если я смотрю на F13:X55 это верхний угол расположен в F16, а объект покрывает остальные ячейки, но не верхние 3 ряда)

  • Как мне обратиться к форме? Я не знал, как я оставил его как Selection.ShapeRange.Fill, но я знаю, что выбор плох. Практика VBA
  • Наконец, прокручивается лучший способ обновления окна? по какой-то причине он иногда даже не работает, и весь макрос бежит без меня.

Я знаю, что это очень много мелких точек, если требуется совсем другой подход, они могут даже не иметь значения! Также, если изменить тему excel от зеленого до нового цвета и постепенно вернуться снова, это будет действительно потрясающе. Спасибо за решение или любые общие советы для новорожденного VBAer!

ответ

2

Я считаю, что вы ищете управление формой, как это:

UPDATE: Теперь, используя код и Sleep функции ... Это работает для меня и является довольно удивительным!

Sub Flash_routine() 
Dim FillCol As Long 
FillCol = RGB(255, 186, 49) 

Dim w As Worksheet 
Set w = ActiveSheet 
Dim s As Shape 

Set s = w.Shapes.AddShape(1, 1, 1, 2000, 2000) 
For x = 1 To 2 'phase ie. lightingup, empty 
    If x = 1 Then 
     IncVal = 0.5 
    Else 
     IncVal = 0.05 
    End If 

    For i = 0 To 1 Step IncVal 
     With s.Fill 
      .Visible = msoTrue 
      .ForeColor.RGB = FillCol 
      If x = 1 Then 
       .Transparency = 1 - i 
      Else 
       .Transparency = i 
      End If 
      .Solid 
     End With 
     Sleep 50 
     'dictates time between successive shape fills 
     DoEvents 
     DoEvents 
     'refreshes screen view 

    Next i 
Next x 

    s.Delete 
End Sub 

Очевидно только набросок того, как это работает, сначала я определить s As Shape затем создать форму в Set s, так что вы можете ссылаться на s позже, чтобы изменить его.

Попробуйте и не стесняйтесь возвращаться. Вы можете использовать s.Delete, чтобы удалить фигуру после того, как ваш таймер/условия были выполнены.

Использование 2 DoEvents (по какой-то причине он работал только с двумя из них для меня) заставляет экран обновлять свои изменения без прокрутки.

Я использовал Application.Wait, так как я просто более знаком с ним.

FYI - Прямоугольник - это форма 1, что избавляет вас от необходимости печатать его полностью.Я положил форму 1 точки в горизонтальной и вертикальной, чтобы получить ее в первой точке листа. Я не уверен, можете ли вы использовать полноэкранный оттенок, но, возможно, вы можете повлиять на непрозрачность фигур, если это необходимо.

+0

Все еще получая 3 недостающих ряда, я думаю, что это может быть до свитка 3 – Greedo

+0

Ах, только что увидел ваше обновление, я постараюсь сделать события и посмотреть, все ли я получаю пустые строки. – Greedo

+0

Ха-ха, без проблем повезло. Я довольно устал, поэтому мне пришлось отредактировать, поскольку я увидел ваши дополнительные вопросы после отправки ответа ... Ой. Я счастлив поиграть с этим больше, если вам нужно, поскольку на данный момент у меня нет большой работы. –

Смежные вопросы