MS Excel 2003 – 处理形状时,在Excel VBA中简单的取消select问题

所以我有一个Excel工作簿,其中有一个全球的映射计划。 所以我对excel的每一个国家都有一个塑造。 根据区域select,相对于数据/查询,它将以各种方式遮蔽区域/国家。

所以我知道如何操纵颜色,渐变阴影等方面的每个形状….

我不知道该怎么做是在子程序结束时“取消select”形状。 我的代码看起来像这样(真正简单)

sheet1.shapes(“CountryName”)。select selection.shaperange.fill.solid selection.shaperange.fill.visible = true selection.shaperange.fill.forecolor.rgb = rgb(110,110,110)selection.shaperange.fill.onecolorgradiend msogradienthorizo​​ntal,2 ,0.45

好吧,从一个形状/国家/地区到另一个“取消select”并不是什么大事,因为重点跳跃,但在结束?

我猜/试了一堆东西,但唉,没有运气

谢谢!

你的源代码最后一行有错字,… gradiend – > …渐变

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

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

 sheet1.[A1].select 

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

下面的方法是在你的脚本中完全避免“select”。 把你的形状赋值给一个对象并操作该对象(注意:我在sheet3中用我testing中的第一个可用对象进行了模拟),即

 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

你不能简单地logging被选中的原始单元格吗?

 Dim oCell as Range set oCell = activecell '' Do stuff here oCell.activate 

更新:该位代码logging当前select,然后在select范围(“A4”)后重新select它。 不知道你的工作簿中有什么样的形状,我不能证实这是可行的,但是到目前为止我已经testing过了。

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