自动化FillDown无法正常工作

时间:2013-01-04 11:42:08

标签: excel vba

代码目前看起来像这样:

Sub PriceChange()
Dim ws As Worksheet
Dim i As Long

For Each ws In ThisWorkbook.Worksheets

  If Not ws.Name = "Cover" Then
  i = Range("G" & Rows.Count).End(xlUp).Row


ws.Range("K13").Formula = "=IF(AND(J13<>0,J14<>0),IFERROR(J14/LOOKUP(2,1/(J$13:J13<>0),J$13:J13)-1,""Bad""),""Bad"")"
'Set sourceRange = ws.Range("K13")
Range("K14").Select
Range("K14").Copy
    Selection.AutoFill Destination:=Range("K14:K" & Range("G65536").End(xlUp).Row)
'Set fillRange = ws.Range("K14:K" & i)
'sourceRange.AutoFill Destination:=fillRange
ws.Range("H13").Formula = "=IF(AND(G13<>0,G14<>0),IFERROR(G14/LOOKUP(2,1/(G$13:G13<>0),G$13:G13)-1,""Bad""),""Bad"")"
'    Set sourceRange = ws.Range("H13")
    Range("H14").Select
    Selection.AutoFill Destination:=Range("H14:H" & Range("G65536").End(xlUp).Row)

'Set fillRange = ws.Range("H14:H" & i)
'sourceRange.AutoFill Destination:=fillRange
    End If
    Next ws

End Sub

我已经留下了已注释掉的部分,因为它使用了这些部分。我不得不改变一些公式,现在填充只填充顶行(即它不起作用)。我想让它填满整个范围(动态)。我得到的最接近的是前2行,但我开始绕圈子。

关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:0)

为了表现,请不要select列...您可以参考range object

来完成工作

请尝试以下方法:

'--change the sheet accordingly

Sheets1(1).Range("K15").Formula = Sheets(1).Range("K14").Formula
Sheets(1).Range("K15").AutoFill Destination:=Sheets(1).Range("K15:K" & i)

您可以添加以下Sub routine来测试您的工作表。也许您的loop存在问题。 OffsetResize是改进代码的更好提示。你甚至可能不会使用With ..

Sub fillFormulasDown()
Dim wkSheet As Worksheet
Dim lRow As Long

    Application.ScreenUpdating = False
    '--if you have a password use this line
    Set wkSheet = Sheets(1)
    'wkSheet.Unprotect Password:="urpassword"
    '--otherwise use this line
    wkSheet.Unprotect

    lRow = wkSheet.Range("G" & wkSheet.Rows.Count).End(xlUp).Row
    '--test with a small formula
    wkSheet.Range("K13").Formula = "=IF(J13<>0,1,0)"

      With wkSheet.Range("K14")
        .Formula = Range("K13").Formula
        .AutoFill Destination:=.Offset(0, 0).Resize(lRow)
      End With

    wkSheet.Unprotect
    Application.ScreenUpdating = True
End Sub