以下代码返回错误1004

问题描述:

我想在代码中使用工作表的名称来选择一个范围。我有37张,我不想写代码37次。以下代码返回错误1004

Sub relatorio() 
    Dim ws As Worksheet, GI As Integer, J As Integer 
    J = 0 
    For Each ws In ActiveWorkbook.Worksheets 
     J = J + 1 
     If ws.Name = "Brasil" Then 
      i = (8 * 0) + 4 And GI = (13 * 0) + 271 
     End If 
     If ws.Name <> "Dados" Then 

      'the error occur in the next line. 
      Worksheets(ws.Name).Shapes.Range(Array("TRI")).Select 
      Selection.Formula = "=Dados!a2" 
      Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri" 
      Selection.ShapeRange.TextFrame2.TextRange.Font.Size = 9 

     End If 
    Next 

End Sub 

我不知道该怎么办

Worksheets(ws.Name).可以ws.更换。
留给你:

ws.Shapes.Range(Array("TRI")).Select 

你有一个名为“TRI”,它是示数出在工作表上的形状,或者是该板本身隐藏?

,以避免错误床单被隐藏,并避免选择每个形状,我建议这样的:

with ws.Shapes.Range(Array("TRI")).Select 
    .Formula = "=Dados!a2" 
    .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri" 
    .ShapeRange.TextFrame2.TextRange.Font.Size = 9 
end with 
+0

是的形状被命名为TRI –

有几件事情在你的颂歌回事。

首先,该行:

i = (8 * 0) + 4 And GI = (13 * 0) + 271 

...最有可能的是不是你做何意。它现在就像一个孤立的布尔标准。如果您尝试将值分配给iGI,最好将它放在两行上。

i = (8 * 0) + 4 
GI = (13 * 0) + 271 

接下来的事情会是你使用ws。从Worksheets collectionFor Each...Next Statement将其分配到Worksheet object后,您可以直接使用它。您不需要使用它的名称作为参考点。

Sub relatorio() 
    Dim ws As Worksheet, GI As Integer, J As Integer 
    J = 0 
    For Each ws In ActiveWorkbook.Worksheets 
     with ws 
      J = J + 1 
      If .Name = "Brasil" Then 
       i = (8 * 0) + 4  'not at all clear what you are trying to do here 
       GI = (13 * 0) + 271 'not at all clear what you are trying to do here 
      End If 
      If .Name <> "Dados" Then 

       'the error occur in the next line. 
       'the recorded code for selecting a shape object goes overboard; this is all you should require 
       with .Shapes("TRI") 
        .Formula = "=Dados!a2" 
        .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri" 
        .ShapeRange.TextFrame2.TextRange.Font.Size = 9 
       end with 
      End If 
     end with 
    Next ws 

End Sub 
+0

谢谢。如何让公式在每个ws中改变。 –

+0

J = 0 对于每个WS在ActiveWorkbook.Worksheets 与WS J = J + 1 如果请将.Name = “巴西” 那么 I =(8 * 0)+ 4 GI =(13 * 0)+ 271 结束如果 如果请将.Name “Dados”,则与.Shapes ( “TRI”) .Formula = “= Dados!A(I)”“我想第i在每个WS .ShapeRange.TextFrame2改变.TextRange.Font.Name =“Calibri” .ShapeRange.TextFrame2.TextRange.Font.Size = 9 –