【发布时间】:2021-10-25 13:17:19
【问题描述】:
我有一个宏,它通过复制原始工作簿中的工作表来生成动态数量的新工作簿。
在逐步模式下,复制的工作表中的值会根据两个输入在循环中正确调整,并填充到新工作表中。
正常运行时,所有新工作簿都包含原始值。
我知道使用.Select 是不好的。我不知道如何解决这个问题。
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
【问题讨论】:
-
ACH JV 是否有引用参考文献的公式?
-
是的,ACH JV 中的公式直接引用了更新后的参考公式。我认为在参考表上创建一个实际范围并简单地将这些值放在 ACH JV 表中会更容易,因为这些值不相邻并且不能是一个范围。