Vba 等待application.run完成

Vba 等待application.run完成,vba,excel,Vba,Excel,我试图在一个文件上写一个宏,打开另一个工作簿,运行宏获取一些数据,将数据复制到第一个工作簿,然后关闭第二个工作簿 但是,我遇到了一个问题,因为似乎在第二个工作簿中的宏仍在运行时执行了范围选择,因此选择了整个列: i、 e.ws2.Range(StartCell,ws2.Cells(LastRow,“A”)))。选择下面代码中的字符串将选择整个列,而不仅仅是有数据的单元格 'run macro in IB API file to get portfolio data Application.Run

我试图在一个文件上写一个宏,打开另一个工作簿,运行宏获取一些数据,将数据复制到第一个工作簿,然后关闭第二个工作簿

但是,我遇到了一个问题,因为似乎在第二个工作簿中的宏仍在运行时执行了范围选择,因此选择了整个列:

i、 e.
ws2.Range(StartCell,ws2.Cells(LastRow,“A”)))。选择下面代码中的
字符串将选择整个列,而不仅仅是有数据的单元格

'run macro in IB API file to get portfolio data
Application.Run "TwsDde.xls!Sheet15.subscribeToPorts"

'select data in column A from IB API file
Dim LastRow As Long
Dim StartCell As Range
Set StartCell = Range("A8")
LastRow = ws2.Cells(ws2.Rows.Count, StartCell.Column).End(xlDown).Row
ws2.Range(StartCell, ws2.Cells(LastRow, "A")).Select

以前有没有人遇到过这个问题,或者对如何解决这个问题有什么想法?

您对
LastRow
的计算是错误的。它应该是
xlUp
而不是
xlDown

您对
LastRow
的计算是错误的。它应该是
xlUp
而不是
xlDown

应用程序。Run
应返回被调用宏(此处为
subscribeToPorts
)返回的值,因此它本身不是异步调用。宏中是否有异步调用?被调用的宏是由代理开发的,它所做的只是将数据从我的公文包中获取到Excel中。您对如何解决这个问题有什么建议吗?
应用程序.Run
应该返回被调用宏返回的值(此处为
subscribeToPorts
),因此它本身不是异步调用。宏中是否有异步调用?被调用的宏是由代理开发的,它所做的只是将数据从我的公文包中获取到Excel中。你对如何解决这个问题有什么建议吗?还有一个问题:它指的是
StartCell.Column
,它指的是
Set StartCell=Range(“A8”)
,它与
Set StartCell=ActiveSheet.Range(“A8”)完全相同,应该是
Set StartCell=ws2.Range(“A8”)
安全无问题地工作。最好不要使用工作表,并且使用每个
.Range
.Rows
、Columns
、Cells
等引用特定的工作表。我使用xlDown是因为我想从A8向下选择和复制所有内容,这是错误的吗?我已尝试更改StartCell.Column,但这无法解决问题是的,那么您犯了一个错误。要实现您所说的,您应该执行
LastRow=StartCell.End(xlDown).Row
(这意味着“从
StartCell
转到数据块的末尾,并从该单元格中获取行号”)。您现在的意思是什么“在sheet
ws2
from单元格中,行号等于工作表中所有行的数量,列号等于
StartCell
的列号,向下取该单元格的行号。”“.非常感谢!你知道是什么导致了另一个错误吗?i、 e.使用application.run运行宏需要几秒钟来填写工作表中的数据,但选择过程发生在填写数据之前。因此,我选择了从A8开始的所有单元格……还有一个问题:它指的是
StartCell.Column
,它指的是
Set StartCell=Range(“A8”)
,它与
Set StartCell=ActiveSheet.Range(“A8”)
完全相同,应该是
Set StartCell=ws2.Range(“A8”)
安全无问题地工作。最好不要使用工作表,并且使用每个
.Range
.Rows
、Columns
、Cells
等引用特定的工作表。我使用xlDown是因为我想从A8向下选择和复制所有内容,这是错误的吗?我已尝试更改StartCell.Column,但这无法解决问题是的,那么您犯了一个错误。要实现您所说的,您应该执行
LastRow=StartCell.End(xlDown).Row
(这意味着“从
StartCell
转到数据块的末尾,并从该单元格中获取行号”)。您现在的意思是什么“在sheet
ws2
from单元格中,行号等于工作表中所有行的数量,列号等于
StartCell
的列号,向下取该单元格的行号。”“.非常感谢!你知道是什么导致了另一个错误吗?i、 e.使用application.run运行宏需要几秒钟来填写工作表中的数据,但选择过程发生在填写数据之前。所以我选择了从A8开始的所有单元格。。。