Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 班次+;宏中的F9和宏刷新速度_Vba_Excel - Fatal编程技术网

Vba 班次+;宏中的F9和宏刷新速度

Vba 班次+;宏中的F9和宏刷新速度,vba,excel,Vba,Excel,我制作了两个链接宏 其中一个生成工作簿中某个工作表的副本。这里的问题是,我需要在所有复制的图纸中按shift+f9来更新我的值。我已经使用了calculate和application.calculate=xl 第二个宏调用第一个宏的值并对其执行操作。这里的问题是,在运行第一个宏并使用shift+f9后,更新所有工作表。如果我使用指定的按钮运行第二个宏,它不会运行,但如果我进入宏并逐步运行它,它会正常运行 我认为这是因为第一个宏的值需要时间刷新,所以出现了这个问题 宏观1: Sub macro1(

我制作了两个链接宏

其中一个生成工作簿中某个工作表的副本。这里的问题是,我需要在所有复制的图纸中按shift+f9来更新我的值。我已经使用了calculate和application.calculate=xl

第二个宏调用第一个宏的值并对其执行操作。这里的问题是,在运行第一个宏并使用shift+f9后,更新所有工作表。如果我使用指定的按钮运行第二个宏,它不会运行,但如果我进入宏并逐步运行它,它会正常运行

我认为这是因为第一个宏的值需要时间刷新,所以出现了这个问题

宏观1:

Sub macro1()
Worksheets("Excel Inputs").Activate
If Sheets("Excel Inputs").Cells(11, "P") = 3 Then
    Sheets("Valuation 02").Delete
    Sheets("Valuation 03").Delete
ElseIf Sheets("Excel Inputs").Cells(11, "P") = 2 Then
    Sheets("Valuation 02").Delete
End If
Length = WorksheetFunction.CountA(Range("B13:B15"))
For i = 1 To Length - 1
    Sheets("Valuation 01").Copy After:=Sheets(4 + i)
    Sheets(4 + i + 1).Name = "Valuation 0" & (i + 1)
    Application.Calculation = xlCalculationAutomatic
Next i
    Sheets("Excel Inputs").Cells(11, "P") = Length
End Sub

有人能帮我吗

通常我会使用
Application.onTime Now+TimeValue(“hh:mm:ss”),“macro2”

解决这类问题。您可以将macro2设置为以一定的延迟运行到macro1

确保在宏1结束时,
Application.calculation=xlCalculationAutomatic
Application.calculativelrebuild

如果此方法不够好,则必须使用单元格或全局变量作为观察者,以确定所有计算是否完成。
例如,在MARC1的末尾,继续使用
Application.onTime
event检查某些单元格值“” 如果还没有完成,递归调用自己


参考资料:

所以,即使您等待很长时间,然后单击按钮,它仍然无法工作?这就是问题所在。。没有。。当它点击该按钮,甚至按F8键(同时进入)太快时,它就会断开。。然后,当我返回excel并检查时,复制的工作表(来自宏1)具有#值。。然后,当我再次按下Shift+f9时,它们会更新为正确的值!宏1:工作表(“Excel输入”)。如果工作表(“Excel输入”)中的单元格(11,“P”)=3,则激活工作表(“估价02”)。删除工作表(“估价03”)。删除其他工作表(“Excel输入”)。单元格(11,“P”)=2,则激活工作表(“估价02”)。如果长度=工作表函数,则删除结束。对于长度为1到长度为-1的工作表(“估价01”)的计数A(范围(“B13:B15”)).Copy After:=工作表(4+i)工作表(4+i+1)。name=“估价0”和(i+1)应用程序。Calculation=xlcalculation自动下一个i工作表(“Excel输入”)。单元格(11,“P”)=长度结束子请参见我的答案,您必须确保以下几点。1.使用
应用程序将所有#值设置为值(数据已从UDF、RTD、工作表函数中准备好)。calculateFull
2。通过定期检查值来了解数据准备就绪的时间。不要使用
Application.Calculation=xlCalculationAutomatic
,而是尝试使用
工作表(4+i+1)。计算
!您是否在后台使用任何计算长时间/刷新的外部函数/数据库?刚刚尝试过。。仍然必须使用shift+f9//我想提到的是,复制的工作表中的公式使用间接函数与复制的工作表的名称。这会是一个问题吗?在excel中强制计算。您可以看到将它们放在宏1的末尾。