整个Excel窗口中的Flash颜色

我正在尝试创build一个macros,以便在用户打开工作簿时根据描述工作簿状态的某些条件来刷新视觉提示。

我想要做的是用不影响单元格格式或任何内容(仅为临时)的颜色填充整个屏幕/单元格区域/ 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 

该macros由workbook_open事件调用

但是,有几个问题,我会感谢帮助;

  • 首先,这是正确的方法还是有一些我不知道的屏幕色彩应用程序?

  • 假设它是 – 我的形状不填充屏幕。 我在印象AddShape(msoShapeRectangle, 0, 0, 2000, 1000)将我的形状放置在左上angular(0,0),但它实际上被放置一点点(第1列,3行,从我的任何地方窗口正在查看,例如,如果我正在查看F13:X55则将其顶部angular落放置在F16 ,而对象将覆盖其余的单元格,但不包括顶部3行)

  • 我如何参考一个形状? 我不知道如何让它作为Selection.ShapeRange.Fill ,但我知道select是糟糕的VBA练习
  • 最后,滚动更新窗口视图的最佳方式? 由于某些原因,偶尔甚至不能工作,整个macros观运行没有我看到任何东西

我知道这是很多小问题,如果需要完全不同的方法,他们甚至可能不相关! 另外,如果把excel的主题从绿色改为新的颜色,再逐渐回到原来的位置,那真是太时髦了。 感谢您的解决scheme或任何新生儿VBA的一般技巧!

我相信你正在寻找像这样的形状控制:

更新:现在使用你的代码和Sleepfunction…这对我来说是非常棒的!

 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创build这个形状,以便稍后引用s来修改它。

试一试,随时回来。 定时器/条件满足后,可以使用s.Delete删除形状。

使用2个DoEvents(出于某种原因,它只适用于我的两个)强制屏幕更新显示您的更改没有滚动。

我已经使用Application.Wait因为我只是更熟悉它。

仅供参考 – 矩形是形状1,因此可以节省您完整打字的麻烦。 我把水平和垂直的形状1点放在表单的第一个点上。 我不确定是否可以进行全屏色调,但如果需要,也许可以影响形状的不透明度