代码目前看起来像这样:
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行,但我开始绕圈子。
关于我哪里出错的任何想法?
答案 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
存在问题。 Offset
,Resize
是改进代码的更好提示。你甚至可能不会使用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