I have a macro that produces a dynamic number of new workbooks by copying a worksheet in the original workbook.
In Step-Through mode, values in the copied worksheet are correctly adjusted in the loop based on two inputs and are populated in the new worksheets.
When run normally, all new workbooks contain the original values.
I understand using .Select
is bad. I don't know how to work around this.
Sub create_jvs()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim achWS, refWS As Worksheet
Dim refRng, strtCell As Range
Dim j, fRow, lRow As Integer
Set refWS = wb.Sheets("References")
Set achWS = wb.Sheets("ACHLinkage")
'get first and last row of constraint range in ACHLinkage
fRow = 2
lRow = achWS.Columns("AB").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows,
LookIn:=xlValues).Row
'loop to produce separate ach jvs
For j = -29 To (-29 + (lRow - fRow)) Step 1
ThisWorkbook.Sheets("References").Activate 'select the ref worksheet
refWS.Range("R31").Select 'select the first reference cell
'update formula 1
ActiveCell.FormulaR1C1 = "=IF(ACHLinkage!R[" & j & "]C[10] = """", """",
IF(ACHLinkage!R[" & j & "]C[10]=""N"",ROUNDDOWN(References!R30C19*ACHLinkage!R[" & j &
"]C[11],2),ROUNDUP(References!R30C19*ACHLinkage!R[" & j & "]C[11],2)))"
ActiveCell.Offset(1).Select
'update formula 2
ActiveCell.FormulaR1C1 = "=IF(ACHLinkage!R[" & j - 1 & "]C[10] = """", """",
IF(ACHLinkage!R[" & j - 1 & "]C[10] = ""N"", ROUNDDOWN(References!R28C19*ACHLinkage!R[" &
j - 1 & "]C[11],2), ROUNDUP(References!R28C19*ACHLinkage!R[" & j - 1 & "]C[11],2)))"
ActiveCell.Offset(1).Select
'update formula 3
ActiveCell.FormulaR1C1 = "=IF(ACHLinkage!R[" & j - 2 & "]C[10] = """", """",
IF(ACHLinkage!R[" & j - 2 & "]C[10]=""N"",ROUNDDOWN(USERFORM!R26C6*ACHLinkage!R[" & j - 2
& "]C[11],2),ROUNDUP(USERFORM!R26C6*ACHLinkage!R[" & j - 2 & "]C[11],2)))"
ActiveCell.Offset(1).Select
'update formula 4
ActiveCell.FormulaR1C1 = "=IF(ACHLinkage!R[" & j - 3 & "]C[10] = """", """",
IF(ACHLinkage!R[" & j - 3 & "]C[10]=""N"",ROUNDDOWN(USERFORM!R26C7*ACHLinkage!R[" & j - 3
& "]C[11],2),ROUNDUP(USERFORM!R26C7*ACHLinkage!R[" & j - 3 & "]C[11],2)))"
ActiveCell.Offset(1).Select
'update formula 5
ActiveCell.FormulaR1C1 = "=IF(ACHLinkage!R[" & j - 4 & "]C[10] = """", """",
IF(ACHLinkage!R[" & j - 4 & "]C[10]=""N"",ROUNDDOWN(USERFORM!R26C8*ACHLinkage!R[" & j - 4
&
"]C[11],2),ROUNDUP(USERFORM!R26C8*ACHLinkage!R[" & j - 4 & "]C[11],2)))"
ThisWorkbook.Sheets("ACH JV").Copy 'copy jvWS to new wb
Next j
End Sub