MS Excel 2003 - 处理形状时在Excel VBA中简单取消选择问题

时间:2009-11-04 02:41:07

标签: excel vba excel-vba excel-2003

所以我有一个excel工作簿,里面有一个全局映射方案。所以我对excel中的每个国家都有一个形状。根据区域选择,相对于数据/查询,它将以各种方式遮蔽区域/国家。

所以我知道如何根据颜色,渐变阴影等来操纵每个形状....

我不知道怎么做是“取消选择”子程序末尾的形状。我的代码看起来像这样(非常简单)

sheet1.shapes( “国家或地区名称”)。选择 selection.shaperange.fill.solid selection.shaperange.fill.visible = true selection.shaperange.fill.forecolor.rgb = RGB(110110110) selection.shaperange.fill.onecolorgradiend msogradienthorizo​​ntal,2,0.45

好吧,从一个形状/国家/地区到另一个形状/地区,“取消选择”并不是那么重要,因为焦点会跳跃,但最后却是????

我已经猜到/试了很多东西但是没有运气

谢谢!

3 个答案:

答案 0 :(得分:3)

你的来源最后一行有一个拼写错误,... gradiend - > ...梯度

selection.shaperange.fill.onecolorgradienT msogradienthorizontal, 2, 0.45

“取消选择”形状对象的一种非常简单的方法是添加这行代码

sheet1.[A1].select

这会将焦点移动到工作表中的单元格A1,从而远离对象。非常粗鲁,我不推荐它。我也不建议像上面提出的那样“保存当前选择”,因为我们不知道光标是在单元格中还是在另一个(范围)对象中。

更好的方法是在整个脚本中完全避免“选择”。将你的形状设置为一个对象并操纵该对象(注意:我在sheet3中使用我测试中的第一个可用对象进行模拟),即

Sub test()
Dim MyShape As Shape
    Set MyShape = Sheet3.Shapes(1) ' or whatever shape according to the user input
    With MyShape.Fill
        .Solid
        .Visible = True
        .ForeColor.RGB = RGB(110, 110, 110)
        .OneColorGradient msoGradientHorizontal, 2, 0.45
    End With
End Sub

更好的是,如果您正在处理一个为您提供形状名称的列表,请执行以下操作

Sub Test()
    '
    ' get the shape's name into ShapeName
    ' ...

    ColorShape Sheet3.Shapes(ShapeName)

    ' ...

End Sub

Sub ColorShape(MyShape As Shape)
    With MyShape.Fill
        .Solid
        .Visible = True
        .ForeColor.RGB = RGB(110, 110, 110)
        .OneColorGradient msoGradientHorizontal, 2, 0.45
    End With
End Sub

希望这会有所帮助 祝你好运MikeD

答案 1 :(得分:2)

你能不能简单地记录被选中的原始单元格?

Dim oCell as Range
set oCell = activecell

'' Do stuff here

oCell.activate

更新:此位代码记录当前选择,然后在选择范围(“A4”)后重新选择它。在不知道你的工作簿中有什么样的形状的情况下,我无法验证这是否有效,但到目前为止我已经测试了它。

Set mySel = Application.Selection
[A4].Select
mySel.Select

答案 2 :(得分:0)

我遇到了类似的问题,我需要在单击形状后隐藏它。我的解决方案是使用SendKeys逃避选择

SendKeys "{Esc}"