Still getting run time error "Selection too large". I replaced my code with
yours, even changed the variable, now dimensioned as <long> rather than
<string>, though I didn't think that was a problem. The following is my
code exact, including the formulas I am trying to populate (formulas use
VLookup to another sheet in same workbook).
I can only get this method to work if I copy into a range that's limited to
about 1000 rows, with each copy. So, with my present row count of 2285,
it's taking 3 lines of code to accomplish this.
Sub RePopulateCells()
'This code will replinish the forumla in columns A
Dim lngLastRow As Long
lngLastRow = Range("A2").End(xlDown).Row
Range("A2
" & lngLastRow).ClearContents 'CLEAR CELL CONTENTS OF _
COLUMNS A
lngLastRow = Range("G2").End(xlDown).Row 'DETERMINE LAST ROW _
TO WHICH FORMULA WILL BE FILLED
'WRITE FORMULA TO CELLS
Range("A2").FormulaR1C1 =
"=UPPER(IF(ISERROR(VLOOKUP(RC[7],JobNotes!C[1]:C[5],2,FALSE)),""No"",IF(VLOO
KUP(RC[7],JobNotes!C[1]:C[5],2,FALSE)<>"""",VLOOKUP(RC[7],JobNotes!C[1]:C[5]
,2,FALSE),""No""))) & "" "" & RC[32]"
Range("B2").FormulaR1C1 =
"=IF(ISERROR(VLOOKUP(RC[6],JobNotes!C[0]:C[4],3,FALSE)),"""",IF(VLOOKUP(RC[6
],JobNotes!C[0]:C[4],3,FALSE)<>"""",VLOOKUP(RC[6],JobNotes!C[0]:C[4],3,FALSE
),""""))"
Range("C2").FormulaR1C1 =
"=UPPER(IF(ISERROR(VLOOKUP(RC[5],JobNotes!C[-1]:C[3],4,FALSE)),"""",IF(VLOOK
UP(RC[5],JobNotes!C[-1]:C[3],4,FALSE)=""Yes"",""Yes"","""")))"
Range("D2").FormulaR1C1 =
"=IF(ISERROR(VLOOKUP(RC[4],JobNotes!C[-2]:C[2],5,FALSE)),"""",IF(VLOOKUP(RC[
4],JobNotes!C[-2]:C[2],5,FALSE)<>"""",VLOOKUP(RC[4],JobNotes!C[-2]:C[2],5,FA
LSE),""""))"
'Range("A2
2").Copy Destination:=Range("A3", "D" & lngLastRow)
'THE ABOVE LINE WILL RETURN A RUN TIME ERROR
'THE FOLLOWING 3 LINES ARE THE ONLY WAY I CAN DO THIS _
WITHOUT GETTING A RUN TIME ERROR
Range("A2
2").Copy Destination:=Range("A3
1000")
Range("A1000
1000").Copy Destination:=Range("A1001
2000")
Range("A2000
2000").Copy Destination:=Range("A2001", "D" & lngLastRow)
Range("A2").Select 'BACK TO TOP OF SHEET
Calculate
End Sub
D.S.
JE McGimpsey said:
Selecting a range is almost never necessary. Unfortunately, it's how the
macro recorder does everything, so it tends to be the mode of choice for
beginning VBA programmers.
For instance, if I tried to record the process that you're doing, the
recorder would produce this (BTW - I didn't get any errors regarding the
paste range, so I'm not sure what's causing your problem):
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 1/18/2004 by J.E.
'
'
Range("A2
2").Select
Selection.Copy
Range("A2
65536").Select
Selection.PasteSpecial Paste:=xlFormulas, _
Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub
this can be much more efficiently written by addressing the range
objects directly:
Public Sub Macro1()
Range("A2
2").Copy Destination:= _
Range("A3
65536")
End Sub
To look at your code:
Dim strLastRow As String
Range("A2").End(xlDown).Select
strLastRow = ActiveCell.Row
'Range("A2
2").Copy
'Range("A3
" & strLastRow).PasteSpecial xlPasteFormulas
'Application.CutCopyMode = False
You could write it without the selects as
Dim lngLastRow As Long
lngLastRow = Range("A2").End(xlDown).Row
Range("A2
2").Copy
Range("A3
" & lngLastRow).PasteSpecial xlPasteFormulas
Application.CutCopyMode = False
In any case, the code I gave you earlier using Autofill doesn't depend
on Selections, so if you're getting an error that the paste area is too
large, it's at another point in your code.