2009-11-04 24 views
1

所以我有一个有全局映射方案的excel工作簿。所以我对excel中的每个国家都有一个塑造。根据区域选择,相对于数据/查询,它将以各种方式遮蔽区域/国家/地区。MS Excel 2003 - 在Excel中处理形状时简单的取消选择问题

所以我知道如何处理每个形状的颜色,渐变底纹等方面....

我不知道该怎么办是“取消选择”形状的子结束常规。我的代码看起来是这样的(真正简单)

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

确定,所以从一个形状/国家/地区到另一个“非选择”不是一个大问题的,因为焦点跳跃,但最后????

我已经猜到了/尝试了一堆东西,但可惜没有运气

的感谢!

回答

3

你有一个错字在你的源最后一行,... gradiend - > ...梯度

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

“去选择”的方式非常简单形状的对象会添加这行代码

sheet1.[A1].select 

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

下面的方法是避免在您的脚本中完全“选择”。 ASIGN您的形状的物体和操纵该对象(注:我在工作表Sheet 3模拟了在我的测试中第一个可用的对象),即

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 

希望这有助于 好运拾音

+0

甜!这将有很大帮助。那么更多的问题是:如何将形状分配为对象?它是否已经是一个对象,因为它已被命名?所以最后一个例子是我已经在考虑通过基于相关过程调用它的过程来调用function/subs。哇,这对我来说解释很多,因为我的小代码看起来太过于冗余了!谢谢! :D – Justin 2009-11-04 21:56:13

+0

将形状分配给对象: 第一个示例:显式地从“形状列表”中指定指定的形状.... Set Set MyShape = Sheet3.Shapes(1)...而不是可以引用的数字索引通过名字在字符串变量中 第二个示例:通过Sub Test()将名为“ShapeName”的对象从名为“Shapes()”的形状列表中移交到Sub ColorShape时隐式地执行。 它始终是相同的机制:对象排列在列表中,并且您通过索引或名称引用它们。适用于形状,工作表,单元格区域等等。 希望有帮助。祝你好运MikeD – MikeD 2009-11-06 13:09:18

2

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

Dim oCell as Range 
set oCell = activecell 

'' Do stuff here 

oCell.activate 

更新:这段代码记录当前选择,然后重新选择选择范围(“A4”)之后。如果不知道工作簿中有哪些形状,我无法验证这是否可行,但它与我所测试的结果一致。

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

如果当前选择不是一个单元格范围内,但其他形状的对象?在这种情况下,选择移动到所选单元格,然后选择移至最近的形状对象 – MikeD 2009-11-04 14:10:49

+0

您指的是什么形状对象?我创建了一个文本标签,选中它,然后运行以下代码:Set mySel = Application.Selection [A4]。选择mySel。选择 – JakeTheSnake 2009-11-04 15:24:35

+0

afaiu(理解)贾斯汀在他的一张纸上有很多形状,他可以选择其中一个形状而不是一个单元格,因此我们无法总结它是一个被选中的单元格。你的代码会让他回到最后选中的单元格,然后他的表单中的一个形状被选中了 – MikeD 2009-11-04 17:27:00