gpt4 book ai didi

excel - 模拟按键效果

转载 作者:行者123 更新时间:2023-12-04 20:39:30 25 4
gpt4 key购买 nike

我已将宏分配给一个矩形,该矩形将转到我的工作簿中的下一张表。

我正在尝试为这个矩形添加一个向下和向上的效果。

当我使用这段代码时,矩形只被按下然后下一张被激活,如果我返回到上一张,矩形被释放。

我需要的是在进入下一张之前按下矩形然后释放。

Dim MyButton As Shape
Dim oHeight, oWidth, cHeight, cWidth As Double
Dim oTop, oLeft As Long

Public Sub PressButton()
Set MyButton = ActiveSheet.Shapes(Application.Caller)

With MyButton
'Record original button properties.
oHeight = .Height
oWidth = .Width
oTop = .Top
oLeft = .Left
'Button Down (Simulate button click).
.ScaleHeight 0.9, msoFalse
.ScaleWidth 0.9, msoFalse
cHeight = .Height
cWidth = .Width
.Top = oTop + ((oHeight - cHeight) / 2)
.Left = oLeft + ((oWidth - cWidth) / 2)
End With

'Set MyButton variable to Nothing to free memory.
Set MyButton = Nothing
End Sub

Public Sub ReleaseButton()
Set MyButton = ActiveSheet.Shapes(Application.Caller)

With MyButton
'Button Up (Set back to original button properties).
.Height = oHeight
.Width = oWidth
.Top = oTop
.Left = oLeft
End With

'Set MyButton variable to Nothing to free memory.
Set MyButton = Nothing
End Sub

Public Sub NextPage()
PressButton
Application.Wait (Now + TimeSerial(0, 0, 1))
ReleaseButton

Dim ws As Worksheet

Set ws = ActiveSheet

Do While Not ws.Next.Visible = xlSheetVisible
Set ws = ws.Next
Loop

With ws.Next
.Activate
.Range("A1").Select
End With
End Sub

最佳答案

您最好使用“命令按钮”:形状和矩形对象并不真正支持您需要的事件驱动的“单击时”功能:调用关联的宏几乎就是它们所做的一切。

但是,您很可能会被该形状作为您的界面(在 64 位环境中对 ActiveX 命令按钮的支持非常差),所以这里是...

背景:如何使按钮看起来像一个按钮:

大多数形状都具有“阴影”属性,光源从 45 度角(从左上角)转换的外部阴影会产生“凸起”效果。相反,从相反角度(从右下角的光源)转换的内部阴影会产生“下沉”效果。

实际上,两者的内部阴影就足够了:只需更改角度即可。

在 VBA 中,形状阴影的光源“角度”以 X 和 Y 偏移量的形式给出,45 度对应于 1.14142:

Dim oShape As Excel.Shape
Dim oShadow As Excel.ShadowFormat

Set oShape = ActiveSheet.Shapes(i)
Set oShadow = oShape.Shadow

' Shadow cast by light from above-right at 45 degrees for a 'raised' effect:
oShadow.OffsetX = Sqr(2)
oShadow.OffsetY = Sqr(2)

' Shadow cast by light from above-right at minus 45 degrees for a 'sunken' effect:
oShadow.OffsetX = -Sqr(2)
oShadow.OffsetY = -Sqr(2)

...这就是您单击“向上”和单击“向下”按钮状态的代码。

我强烈建议您使用内置对话框来设置形状的填充颜色和阴影的大小、透明度和模糊度。供您引用,下面列出了我用于智能“半扁平”浅灰色按钮的设置 - 但我不建议您在 VBA 代码中设置它们,因为这些格式不会按照您期望的顺序应用,并且该按钮看起来不像您可以使用 UI 对话框构建的“干净”形状:
    ' Light-grey button with a slightly darker 'softened' border
oShape.Fill.ForeColor.RGB = &HD8D8D8
oShape.Line.ForeColor.RGB = &HC0C0C0
oShape.Line.Weight = 2
oShape.Line.Transparency = 0.75

' Use the shape's shadow to give a 'raised button' effect:
oShadow.Style = msoShadowStyleInnerShadow
oShadow.Visible = True
oShadow.Blur = 2
oShadow.Size = 100
oShadow.Transparency = 0.5

' Shadow cast by light from above-right at 45 degrees for a 'raised' effect:
oShadow.OffsetX = Sqr(2)
oShadow.OffsetY = Sqr(2)

您也可以使用 3-D 效果对话框,但是对于大多数形状(包括您的矩形),这可以通过“凿子”效果来实现:我没有找到任何预定义的“凸起”或“凹陷”形状的 3D 样式。

主要编辑:

猜猜谁在寻找替换的工作 全部 在 64 位 Office 推出之前,所有战术电子表格工具上的 Active-X 控制按钮使它们无法操作?

所以你的问题确实变得非常非常有趣。这就是我正在做的事情:

用于使用 Excel“形状”对象调用 VBA 宏而不是 ActiveX 控件的通用“按钮单击”代码。

这是我使用的而不是 ActiveX 按钮:文本标签、矩形和图像,使用功能区上的“插入”菜单放置到工作表中。

这些对象都是 Excel 的“形状”,它们都可以与命名宏相关联,并且它们具有共同的“阴影”效果,用作“凸起按钮”3D 效果。

下面的示例是从嵌入工作表中的形状的图像(数据库的 32*32 图标,带有问号)调用函数。我给这个 ersatz 控制按钮起了一个有意义的名字,我把宏命名为 [Name]_Click() ,因为我正在替换现有的“点击”事件过程。

所以这个宏是工作表上的一个公共(public)子例程,用 标识。代码 name, - 用户可以“重命名”工作表,更改用户可读的标签,但他们不会重命名底层 VBA 类模块 - 它显示为 MySheetCodeName.img_TestDefaultDSN_Click()右键单击形状时,在“分配宏”列表中。

..这就是为什么它是公共(public)的(不是私有(private)的,因为 ActiveX 控件的自动创建的事件过程 stub 将是):私有(private)子在“分配宏”列表中不可见。
Public Sub img_TestDefaultDSN_Click()

ClickDown Me.Shapes("img_TestDefaultDB")
ShowDBStatus "EOD_Reports_DSN"
ClickUp Me.Shapes("img_TestDefaultDB")

End Sub


这会在常规代码模块中调用一对通用的“Click Down”和“Click Up”子例程:
Public Function ClickDown(objShape As Excel.Shape)
On Error Resume Next

'Recast the button shadow from bottom-right to top-left:
With objShape.Shadow
.Visible = msoFalse
.OffsetX = -1.2
.OffsetY = -1.2
.Visible = msoTrue
.Blur = 1
.Size = 99
.Transparency = 0.75
.Style = msoShadowStyleInnerShadow
.Obscured = msoFalse
End With

'Darken the button face slightly:
If objShape.Type = msoPicture Then
With objShape.PictureFormat
.Brightness = .Brightness - 0.01
End With
Else
With objShape.Fill
.Visible = msoTrue
.ForeColor.Brightness = .ForeColor.Brightness - 0.01
End With
End If

End Function


Public Function ClickUp(objShape As Excel.Shape)
On Error Resume Next

'Restore the button face to it's default brightness:
With objShape.Shadow
.Visible = msoFalse
.OffsetX = 1.2
.OffsetY = 1.2
.Visible = msoTrue
.Blur = 1
.Size = 99
.Transparency = 0.75
.Style = msoShadowStyleInnerShadow
.Obscured = msoFalse
End With

'Restore the button shadow to bottom-right:
If objShape.Type = msoPicture Then
With objShape.PictureFormat
.Brightness = .Brightness + 0.01
End With
Else
With objShape.Fill
.Visible = msoTrue
.ForeColor.Brightness = .ForeColor.Brightness + 0.01
End With
End If

End Function

您可能对“控制按钮”的外观有自己的偏好,但这对我有用。

请注意,如果“单击向上”紧随其后,则永远不会看到“单击向下”效果:即使“ sleep ”或“应用程序等待”语句将它们分开 - 只有在用户有真实代码时才会看到它 -可检测到的耗时或模态对话框。

关于excel - 模拟按键效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com