如何使配方的一部分变化?

时间:2015-07-23 15:29:36

标签: excel vba excel-vba

我试图在工作表更改时只更改代码的一部分,但它不起作用。从一个工作表更改为其他工作表是可以的,但更改的整数在代码中不起作用。随着工作表的改变,我创建了J Integer以在一个单元中增长。因此,图形和形状基于另一个Sheet(Dados),它具有不同行的数据,以便为每个工作表提供信息。

Sub relatorio()
Dim ws As Worksheet, GI As Integer, GF As Integer, J As Integer
J = 0
For Each ws In ActiveWorkbook.Worksheets
    With ws
        J = J + 1
        If .Name = "Brasil" Then
            i = (8 * J) + 4   'the 8 is the amount of lines below I need to catch and the 4 is because the data starts on line 4. 
            GI = (13 * J) + 271
            Gf = (13 * J) + 283    
        End If
        If .Name <> "Dados" Then
            With .Shapes("TRI")
                .Formula = "=Dados!a2"
                .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri"
                .ShapeRange.TextFrame2.TextRange.Font.Size = 9
            End With

从以下步骤开始不起作用。 你能帮我解决这个问题吗?

        With .Shapes("PIT")
            .Formula = "=Dados!E(i)"
            .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri"
            .ShapeRange.TextFrame2.TextRange.Font.Size = 9
        End With
        With .ChartObjects("Gráfico 8")
            ActiveChart.PlotArea.Select
            ActiveChart.FullSeriesCollection(1).Values = "=Dados!$e$(GI):$e$(GF)"
            ActiveChart.FullSeriesCollection(1).XValues = "=Dados!$b$(GI):$c$(GF)"
            ActiveChart.SetElement (msoElementDataLabelTop)
            ActiveChart.FullSeriesCollection(1).DataLabels.Select
            Selection.NumberFormat = "#.##0,0"
        End with
    End if
Next
end sub

2 个答案:

答案 0 :(得分:0)

我在想导致问题的那一行是.Formula` =“= Dados!E(i)”,我打算成为一个变量吗?因为它写的不是。我知道你在上一张纸上分配了它,但是对于这张纸它不是。

也许尝试:.Formula = "=Dados!E(" & i & ")"

答案 1 :(得分:0)

首先,我会得到符合现代工作表范围的变量声明。现在可能没关系,但进入是一个很好的做法。

Dim ws As Worksheet, GI As Long, GF As Long, J As Long

接下来,从字符串常量和数值变量构造单元格范围看起来不正确。当 i 的值 99 时,您正尝试创建类似=Dados!E99而不是=Dados!E(i)的内容。

    With .Shapes("PIT")
        .Formula = "=Dados!E" & i
        ...
    End With
    With .ChartObjects("Gráfico 8")
        ...
        ActiveChart.FullSeriesCollection(1).Values = "=Dados!$e$" & GI & ":$e$" & GF
        ActiveChart.FullSeriesCollection(1).XValues = "=Dados!$b$" & GI & ":$c$" & GF
        ...
    End with