0

代码当前如下所示:

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 行,但我开始绕圈子了。

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

4

1 回答 1

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
于 2013-01-04T12:04:05.333 回答