【发布时间】:2018-08-14 11:17:57
【问题描述】:
我想编写一个 Excel 宏:我有一些计算的起始值。有超过 100 个不同的起始数字,我想自动复制右侧单元格中的起始值,其他一些单元格具有读取该值并使用它的公式。这些公式正在从网络上获取一些数据(afaik),在其他一些表格中进行计算,并且需要几秒钟的时间来计算。我正在工作的工作表中的单元格只是链接到其他工作表中的其他单元格,因此公式不直接在“工作表”(工作表#1)中。我不知道这些公式到底是做什么的,它们不是我的。 对于每个起始数字,我想将结果复制到另一张表中。
Private Sub CommandButton1_Click()
Application.Calculation = xlCalculationManual
For i = 2 To Sheets(2).Range("A1048576").End(xlUp).Row
Sheets(1).Cells(5, 3).Value = Sheets(2).Cells(i, 3).Value
Application.CalculateFull
Sheets(2).Cells(i, 4).Value = Sheets(1).Cells(7, 3).Value
Sheets(2).Cells(i, 5).Value = Sheets(1).Cells(8, 3).Value
Sheets(2).Cells(i, 6).Value = Sheets(1).Cells(9, 3).Value
Sheets(2).Cells(i, 7).Value = Sheets(1).Cells(10, 3).Value
Sheets(2).Cells(i, 8).Value = Sheets(1).Cells(11, 3).Value
Sheets(2).Cells(i, 9).Value = Sheets(1).Cells(12, 3).Value
Sheets(2).Cells(i, 10).Value = Sheets(1).Cells(15, 3).Value
Sheets(2).Cells(i, 11).Value = Sheets(1).Cells(16, 3).Value
Next i
Application.Calculation = xlCalculationAutomatic
i = 0
End Sub
所以我从工作表 (2) 中将起始编号(C 列)复制到工作表 (1) 的单元格 (C5) 中。当 Sheet(1) 中的 Cell(C5) 的值发生更改时,Sheet(1).Range(C7:C16) 中的值将被重新计算。 我将新计算的值复制回 Sheet(2),然后复制到正确起始编号的行中。所以 Sheet(1).Range(C7:C16) (两个值除外)在 Sheet(2).Range(Di:Ki) (i,起始编号的索引)。 这会为每个起始编号循环。
所以 Range(C7:C16) 保存了结果。我的问题是,宏不会等待计算完成。范围内的所有单元格(Di:Ki)都获得相同的值(范围内的值(C7:C16)之前我启动宏)。
我尝试了不同的方式,如 Application.CalculateFull 和
Do Until Application.CalculationState = xlDone
DoEvents
Loop
还有一个 Worksheet_Calculate() 子。我也试过 Worksheet_Change() 但它没有获取公式计算。
当我使用基本加法等简单公式时,它确实有效: 例如。 Sheet(1).C7 的公式为 C5+1(起始编号+1),我将进入 Sheet(2)
Starting Number - Result from Sheet(1).C7
1 - 2
2 - 3
3 - 4
也许有人可以帮助我?提前致谢!
【问题讨论】:
-
这似乎是很多计算。您能否不填写所有值然后执行计算,以便它们都可以在一个实例中完成?然后你应该能够获取更新的值
-
您的代码完全符合您提到的问题,即它将 C7:C16 复制到 Sheet(2) 中的所有行,并不是说它不等待计算完成。如果您向我们展示
When I use simple formulas like basic addition etc. it does work的意思,它可能有助于制定答案?另外,您的起始值在哪里,需要将它们复制到哪里才能使公式起作用? -
@Xabier 好的,我会试试的。我的工作表:
Calculation(1) - Results(2) - various otherResults(2) 格式Starting Number - Result 1 - Result 2 - Result++我将 Results(2) 中的起始编号复制到 Calculation(1)。 Calc(1) 中单元格中的新值开始计算。然后我将计算结果从 Calculation(1) 复制到 Results(2) 表的Result x单元格。此程序为每个起始编号。当我只使用1+<starting-number>公式而不是慢速公式时,我将得到结果 1 的起始编号 1 - 1+1=2、起始编号 2 -1+2=3 等。 -
好的,所以你从工作表结果(2)中获取值,在哪个范围/单元格/列上?然后将该值复制到工作表计算(1),再次复制到哪个范围/单元格?你应该在哪里获得新的价值?您在单元格 Calc(1) 中说,但这不是一个可能的范围......抱歉,您需要更具体地说明它,如果您使用所有这些详细信息编辑您的原始问题,那就更好了。
-
@Xabier 我编辑了这个问题,希望现在更清楚一点