2015-08-14 223 views
0

我有一个工作簿与多个工作表。间歇性错误:对象不支持此属性或方法

Private Sub CommandButton1_Click() 

    Call PivotColor(Sheet3, "1Up", "1Down", 30, 6) 

End Sub 

,并在此他的功能“PivotColor”后面的代码:

Sub PivotColor(Sheetname As Worksheet, UpArrow As String, DownArrrow As String, Columnreference As Integer, Rowreference As Integer) 

If (Sheetname.Cells(Rowreference, Columnreference) >= 0) Then 

    ' Select RED Arrow 
    Sheetname.Shapes.Range(Array(DownArrrow)).Select 

    ' Hide the Red Arrow 
    With Selection.ShapeRange.Fill 
     .Visible = msoTrue 
     .Transparency = 1 
     .Solid 
    End With 


' Otherwise it means the value of the cells is negative... 
Else 

    ' Select RED Arrow 
    Sheetname.Shapes.Range(Array(DownArrrow)).Select 

    ' Display the Red Arrow 
    With Selection.ShapeRange.Fill 
     .Visible = msoTrue 
     .Transparency = 0 
     .Solid 
    End With 

End If 
End Sub 
在Sheet3中我使用按钮1时,有一个按钮(名为Button1),这是用来运行下面的代码工作良好

现在,如果我在第二个工作表(名为sheet2)中创建一个新按钮(名为button2)并将相同的代码关联到该工具,则会出现错误“对象不支持此属性或方法”。

Private Sub CommandButton2_Click() 

    Call PivotColor(Sheet3, "1Up", "1Down", 30, 6) 

End Sub 

如果我点击“调试”,它强调了这一行:

With Selection.ShapeRange.Fill 

所以基本上,这里的想法是要执行应该发生在工作表Sheet 3的过程,但是从Sheet2中启动它。

我不明白它不起作用...任何想法?

+0

当您点击调试时,您能看到是否选择了向下箭头吗?它被选中了吗? – HarveyFrench

+0

我认为它被选为“调试”按钮突出显示[Sheetname.Shapes.Range(Array(DownArrrow))之后的下一个代码行。 – SkorPPio

回答

0

对我来说,你的代码看起来没问题。

我会尝试下面的代码,而不是你的线,虽然我wouldn;吨期望这有所作为。

“选择红色箭头 ”隐藏红箭

With Sheetname.Shapes.Range(Array(DownArrrow)).ShapeRange.Fill 
    .Visible = msoTrue 
    .Transparency = 1 
    .Solid 
End With 

此外, 在Sheet2中是存在的,在所谓的“工作表Sheet”模块级声明的变量,如果因此被抓住这个,而不是使用“表Sheet 3 “工作表对象。 - 只是一个想法。

+0

我仍然有相同的错误信息。调试突出显示这一行:[使用Sheetname.Shapes.Range(Array(DownArrrow))。ShapeRange.Fill] – SkorPPio

+0

如何确保它使用“Sheet3”工作表对象(在Sheet2代码中)? – SkorPPio

2

您使用.SelectSelection可能会产生混淆。当您单击Sheet3上的按钮时,您在Sheet3(ActiveSheet)上。单击Sheet2上的按钮时不是这样。尝试编码而不使用.Select

Sub PivotColor(Sheetname As Worksheet, UpArrow As String, DownArrrow As String, Columnreference As Integer, Rowreference As Integer) 

    With Sheetname 
     ' Show/Hide the Red Arrow 
     With .Shapes(DownArrrow).ShapeRange.Fill 
      .Visible = msoTrue 
      .Transparency = Abs(.Cells(Rowreference, Columnreference) >= 0) 
      .Solid 
     End With 
    End With 

End Sub 

单个形状不需要整个.Shapes.Range(Array(...))代码。我通过将布尔结果直接计入.Transparency property = s值来收紧代码。

+0

对不起,但即使使用此代码,我仍然有相同的错误消息。调试是突出显示这一行:['显示/隐藏红色箭头 With .Shapes(DownArrrow).ShapeRange.Fill] ... – SkorPPio

+0

我期望上述解决此问题。忽略我的代码。 – HarveyFrench

相关问题