2015-07-20 123 views
0

我想在代碼中使用工作表的名稱來選擇一個範圍。我有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 

我不知道該怎麼辦

回答

0

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 –

0

有幾件事情在你的頌歌回事。

首先,該行:

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 –