Excel 如何等待另一个宏完成生成值?

Excel 如何等待另一个宏完成生成值?,excel,vba,Excel,Vba,在我的主宏中运行的宏生成我需要复制到另一个Excel文件的值 我的主宏不会等待生成完成,而是将空单元格粘贴到其他文档中 如果我单步执行,代码将按预期工作,但按“run”时不会 我找到了这个问题的几个答案,但没有一个适合我 我尝试了睡眠和等待的方法。它们停止整个宏,甚至停止生成值的宏 我尝试在生成宏的末尾添加DoEvents,或者在主宏中调用生成宏时添加DoEvents。这些变化没有效果 建议的复制没有帮助。由于性能问题,请尽量避免激活和选择。当您单步执行代码时,它应该按照预期工作,因为selec

在我的主宏中运行的宏生成我需要复制到另一个Excel文件的值

我的主宏不会等待生成完成,而是将空单元格粘贴到其他文档中

如果我单步执行,代码将按预期工作,但按“run”时不会

我找到了这个问题的几个答案,但没有一个适合我

我尝试了睡眠和等待的方法。它们停止整个宏,甚至停止生成值的宏

我尝试在生成宏的末尾添加DoEvents,或者在主宏中调用生成宏时添加DoEvents。这些变化没有效果


建议的复制没有帮助。

由于性能问题,请尽量避免
激活
选择
。当您单步执行代码时,它应该按照预期工作,因为select/activate能够在执行下一行之前完成。 尚未测试下面的代码,但我希望您了解使用的
原理

有关select的更多示例,请参见

更新:

'In case of multiple columns we create an array
Dim dData(1) as Variant 
Set wbThis = ActiveWorkbook
strName = ActiveSheet.Name
Set wbTarget = 
Workbooks.Open("D:\Users\user37\Desktop\exportas\Information.xlsm")
With wbTarget.Worksheets("Information")
'Copies column 1 and 2
    data(0) = Application.Transpose(Range(Cells(1,1),Cells(1,1).End(xlDown)).Value2)
    data(1) = Application.Transpose(Range(Cells(2,1), Cells(2,1).End(xlDown)).Value2)
End With

'Once again we copy the data from column 1 and 2
With wbTarget.Worksheets("SO Lines")
    data(0) = Application.Transpose(Range(Cells(1,1),Cells(1,1).End(xlDown)).Value2)
    data(1) = Application.Transpose(Range(Cells(2,1),Cells(2,1).End(xlDown)).Value2)
End With

通过转到“生成宏->数据->连接”并禁用每个查询的回溯刷新,问题得以解决

您可以给出一个您尝试过的“此问题的几个答案”的示例,并扩展到“它们不起作用”吗?可能的链接复制没有帮助…我已经尝试了sleep和wait方法,它们只是停止整个宏,甚至停止生成值的宏。还尝试在生成宏的末尾添加DoEvents,或者在主宏中调用生成宏时添加DoEvents。更改没有任何效果,因此代码仍然不会等待生成完成感谢您的回答,但宏仍然会在宏完成生成值之前打开文件Sablonai.xlsm扫描显示excel文档是如何排列的?在此之前和之后,如果我能更清楚地理解当前结果,我已经完成了一个程序,它可能会解决您的问题。这部分代码是错误的,您使用wbTarget.Worksheets(“SO行”),但在With语句后面有一个:ActiveSheet.Range(“E4”).Copy,它不一定指向wbTarget.Worksheets(“所以行”)。要使其以这种方式工作,请更改为:。范围(“E4”)。复制您是指数据生成excel文档还是结束文档?因为结束文档只是一个要粘贴的空白区域in@jkpieterse我想是的,这也应该包括在activesheet.pasteSpecial中吗?
Set wbThis = ActiveWorkbook
strName = ActiveSheet.Name
Set wbTarget = 
Workbooks.Open("D:\Users\user37\Desktop\exportas\Information.xlsm")
With wbTarget.Worksheets("Information")
    ActiveSheet.Range("B2").Value = myValue
    Application.Run ("'Information.xlsm'!ExportData")
With wbTarget.Worksheets("SO Lines")
    .Range("E4").Copy
End With

Set wbTarget = Workbooks.Open("D:\Users\user37\Desktop\exportas\Sablonai.xlsm")
With wbTarget.Worksheets("Duomenys")
    With ActiveSheet.Range("A1")
        .PasteSpecial
    End With
End With
'In case of multiple columns we create an array
Dim dData(1) as Variant 
Set wbThis = ActiveWorkbook
strName = ActiveSheet.Name
Set wbTarget = 
Workbooks.Open("D:\Users\user37\Desktop\exportas\Information.xlsm")
With wbTarget.Worksheets("Information")
'Copies column 1 and 2
    data(0) = Application.Transpose(Range(Cells(1,1),Cells(1,1).End(xlDown)).Value2)
    data(1) = Application.Transpose(Range(Cells(2,1), Cells(2,1).End(xlDown)).Value2)
End With

'Once again we copy the data from column 1 and 2
With wbTarget.Worksheets("SO Lines")
    data(0) = Application.Transpose(Range(Cells(1,1),Cells(1,1).End(xlDown)).Value2)
    data(1) = Application.Transpose(Range(Cells(2,1),Cells(2,1).End(xlDown)).Value2)
End With