2015-07-20 2 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» на листе, что она erroring на, или сам лист скрыт?

, чтобы избежать ошибок с листами прячась, и избегать того, чтобы выбрать каждую форму, я хотел бы предложить следующее:

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 

... скорее всего, не делать то, что вы хотели. Он работает как осиротевший логический критерий, как сейчас. Лучше оставить его на две линии, если вы пытаетесь присвоить значения i и GI.

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

Следующая вещь будет вашим использованием ws. Как только вы присвоите это Worksheet object от Worksheets collection через For Each...Next Statement, вы можете использовать его напрямую. Вам не нужно использовать его имя в качестве контрольной точки.

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 For Each WS В ActiveWorkbook.Worksheets с WS J = J + 1 Если .Name = "Бразилия" Тогда я = (8 * 0) + 4 = Г.И. (13 * 0) + 271 End If Если .Name <> "Dados" Тогда с .Shapes ("TRI") .Formula = "= Dados! а (я)«Я хочу, чтобы я изменить в каждом WS .ShapeRange.TextFrame2 .TextRange.Font.Name = "Calibri" .ShapeRange.TextFrame2.TextRange.Font.Size = 9 –

Смежные вопросы