2015-08-15 76 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])" 

希望幫助!

相關問題