Vba 是否需要在后添加事件。复制以包括整个范围?

Vba 是否需要在后添加事件。复制以包括整个范围?,vba,excel,Vba,Excel,我有一个过程,可以循环浏览SharePoint服务器上的大量文件并合并它们。我注意到一些数据丢失了,当特定的文件是当前源文件时,我会逐步执行代码 我发现,当我使用.Copy时,它并没有复制我指定的整个数据范围。它停在一个隐藏的行,在那里数据被过滤。我注意到,如果我在跨过复制行之后停止了该过程,那么在我停止后,其余的数据将立即在复制范围内。所以我试着在复印行后面放一个DoEvents,这似乎奏效了 简化示例: 此代码复制B13:BY1270(由于过滤器,第一个连续范围的末尾位于隐藏行之前) 此代码

我有一个过程,可以循环浏览SharePoint服务器上的大量文件并合并它们。我注意到一些数据丢失了,当特定的文件是当前源文件时,我会逐步执行代码

我发现,当我使用.Copy时,它并没有复制我指定的整个数据范围。它停在一个隐藏的行,在那里数据被过滤。我注意到,如果我在跨过复制行之后停止了该过程,那么在我停止后,其余的数据将立即在复制范围内。所以我试着在复印行后面放一个DoEvents,这似乎奏效了

简化示例:

此代码复制B13:BY1270(由于过滤器,第一个连续范围的末尾位于隐藏行之前)

此代码复制B13:BY1270和B1274:BY1375(两个独立的连续范围,不包括隐藏的筛选行)


我的问题是,这背后的逻辑是什么?为什么在没有
事件的情况下忽略
范围(“B1500”).End(xlUp).Rows.row
中的行号?为什么一个简单的单行复制命令需要暂停?

@roryap:如果使用得当,在VBA中使用DoEvents是没有害处的。Mike,
Range(“B1500”).End(xlUp)。Rows.Row
不会被忽略。实际情况是,当您指定
DoEvents
时,您给了代码足够的时间将该范围放置在剪贴板中:)如果排除
DoEvents
,则代码会将该范围复制到隐藏行之前,但不会复制到隐藏行之后。是不是当涉及的范围超过1个时,复制需要额外的处理时间?@royap糟糕的建议。遵循“永不使用变体”的原则。纯粹的垃圾。
Range("B13:BY" & Range("B1500").End(xlUp).Rows.Row).Copy
Range("B13:BY" & Range("B1500").End(xlUp).Rows.Row).Copy
DoEvents