2015-08-15 79 views
0

任务:更改100个工作表中的总和范围。 每张表具有统一的命名约定,即“Client_” 每张表中的每个表都与工作表具有相同的名称。所以在“Client_Leaf”上有一个名为“Client_Leaf”的表。我一直在ActiveCell.FormulaR1C1行发生错误。这里是我的代码至今:声明变量等于工作表名称,以引用表中的表格

  Sub fixFormulaRanges() 

      Application.ScreenUpdating = False 
      Dim Client As Worksheet 
      Dim ClientTable As ListObject 
      Dim varTableName As Variant 

      For Each Client In ActiveWorkbook.Worksheets 
        With Client 
         If CBool(InStr(1, .Name, "Client_", vbTextCompare)) Then 
          varTblName = .Name 
           Range("f8").Select 
           ActiveCell.FormulaR1C1 = _ 
            "=SUMIF(varTblName & [Sector],RC[-2],varTblName & [Market Value])" 

       Range("F8:F20").Select 
       Selection.FillDown 

        End If 
       End With 
      Next Client 


      End Sub 

回答

0

几件事情:为活跃工作

  1. 下面的语句正在运行:

    Range("f8").Select 
        ... 
    Range("F8:F20").Select 
    

    如果你想它运行您正在操作的特定工作表,您需要将它们更改为:

    .Range("f8").Select 
        ... 
    .Range("F8:F20").Select 
    
  2. 您无法正确连接表格名称到SUMIF()公式中。

    变化:

    ActiveCell.FormulaR1C1 = "=SUMIF(varTblName & [Sector],RC[-2],varTblName & [Market Value])" 
    

    要:

    ActiveCell.FormulaR1C1 = "=SUMIF(" & varTblName & "[Sector],RC[-2]," & varTblName & "[Market Value])" 
    
0

你拥有它写的,用引号括起来的变量的方法,VBA将可以把它看成一个字符串的一部分,将不承认你想使用一个变量。尝试改变你的公式如下:

ActiveCell.FormulaR1C1 = _ 
     "=SUMIF(" & varTblName & "[Sector], RC[-2]," & varTblName & "[Market Value])" 

希望帮助!

相关问题