所以我有一个excel工作簿,里面有一个全局映射方案。所以我对excel中的每个国家都有一个形状。根据区域选择,相对于数据/查询,它将以各种方式遮蔽区域/国家。
所以我知道如何根据颜色,渐变阴影等来操纵每个形状....
我不知道怎么做是“取消选择”子程序末尾的形状。我的代码看起来像这样(非常简单)
sheet1.shapes( “国家或地区名称”)。选择 selection.shaperange.fill.solid selection.shaperange.fill.visible = true selection.shaperange.fill.forecolor.rgb = RGB(110110110) selection.shaperange.fill.onecolorgradiend msogradienthorizontal,2,0.45
好吧,从一个形状/国家/地区到另一个形状/地区,“取消选择”并不是那么重要,因为焦点会跳跃,但最后却是????
我已经猜到/试了很多东西但是没有运气谢谢!
答案 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}"