2017-03-28 102 views
1

我正尝试使用VBA将动态公式添加到单元格。我已经看过几篇文章,但我无法弄清楚我做错了什么。 “对象__工作表失败”的“方法范围”中出现运行时错误“1004”。我究竟做错了什么?如何使用VBA将动态公式添加到单元格引用?

Sub AddFormulas() 

Dim LastNumberRow As Integer 

Set countBase = Sheet7.Range("CU2") 
colCount = Sheet7.Range(countBase, countBase.End(xlToRight)).Columns.Count 

Dim startCount As Integer 
startCount = 98 

    For i = 1 To colCount 

     If IsNumeric(Cells(2, startCount + i)) Then 
      Sheet7.Range(3, i).Formula = "=Sheet6!" & Cells(3, startCount + i).Address & "*" & "Sheet7!" & Cells(3, colCount + startCount).Address   
     Else 
      'Do some stuff 
     End If 
    Next i 
End Sub 

我从下面的评论中添加了建议的更改,但没有获得文件资源管理器弹出窗口。我已经改变了我的代码有以下变化:

If IsNumeric(Sheet7.Cells(2, startCount + i)) Then 
      Set bSum = Sheet7.Cells(3, colCount + startCount) 
      Set bSpr = Sheet6.Cells(3, startCount + i) 

      Sheet7.Cells(3, i).Formula = "=Sheet6!" & bSpr.Address() & "*" & "Sheet7!" & bSpr.Address() 
+1

'Sheet7.Range(3, i).Formula'应该是Sheet7.Cells(3,i).Formula' –

+1

为此,请确保您在IsNumeric():'Sheet7.Cells(2,startCount + i)中引用了正确的工作表。 '或'Sheet6.Cells(2,startCount + i)' –

+1

另外,你期望'Cells(3,startCount + i)'和'Cells(3,colCount + startCount)'是什么表格?您应该在之前添加工作表名称/索引,例如'Sheet7.Range()'。 – BruceWayne

回答

0

我得到了它使用此解决方案的工作:

Sub Formulas() 
'Adds the formulas to the worksheet 

Dim rLastCell As Range 

Set countBase = Sheet6.Range("CU2") 

'Starts at cell CU2 and counts the number of columns to the right that are being used 
colCount = Sheet6.Range(countBase, countBase.End(xlToRight)).Columns.Count 


Dim startCount As Integer 
startCount = 98 'This is column CT 

    For i = 1 To colCount 

     'Checks to see if the value in row 2 starting at CU is a number, if it is it adds the index-match formula 
     If IsNumeric(Sheet7.Cells(2, startCount + i)) Then 
      bSpr = Sheet6.Cells(3, startCount + i).Address(True, False) 

      Sheet6.Cells(3, startCount + i).Formula = "=INDEX(ORIG_MAT_DATA_ARRAY,MATCH($W3,MAT_RLOE_COLUMN),MATCH(" _ 
      & bSpr & ",MAT_CY_HEAD))" & "/" & "INDEX(ORIG_MAT_DATA_ARRAY,MATCH($W3,MAT_RLOE_COLUMN),MATCH(""Total"",ORIG_MAT_CY_HEAD,0))" 

     End If 

     'Checks to see if the value in row 2 starting at CU is the word "Total", if it is it adds the sum formula 
     If Sheet6.Cells(2, startCount + i) = "Total" Then 
      startCol = Cells(3, startCount + 1).Address(False, False) 
      endCol = Cells(3, startCount + (colCount - 1)).Address(False, False) 

      Sheet6.Cells(3, colCount + startCount) = "=SUM(" & startCol & ":" & endCol & ")" 
     End If 
    Next i 

End Sub 
1

尝试用替换Sheet7.Range(3, i).Formula = ...Sheet7.Cells(3, i).Formula = ...

相关问题