excel - 为什么当我们这样写时范围对象不会自动生成 worksheets(1).range ("A1")

标签 excel vba

Workbooks(test.xlsm).Worksheets("AAA").Range("a1").Copy 
Workbooks(Practice.xlsm).Sheets("AAA").Range("c1")

为什么在上述查询中 Range 对象不会像工作表自动生成那样自动生成 在编写上述代码时在工作簿对象之后。

最佳答案

非常好的问题。这是我对它的理解,我认为这是正确的,但...它可能不是正确的:D

这可以用“早期绑定(bind)”和“后期绑定(bind)”概念来解释。在后期绑定(bind)中,对象在运行时解析,而不是提前解析,因此 Intellisense 对于后期绑定(bind)对象不可用。

在 VBE 中分别输入这 2 个单词,您将看到此内容

enter image description here

Workbooks 对象是早期绑定(bind)(As Workbook),Worksheets 对象是后期绑定(bind)(作为对象)。

那么我们如何绕过它呢?只需声明您的对象即可。例如

Sub Sample()
    Dim wb As Workbook
    Dim ws As Worksheet '<~~ EARLY BINDING

    Set wb = Workbooks("Test.xlsm")
    Set ws = wb.Worksheets("AAA")
End Sub

现在您将获得智能感知

enter image description here

关于excel - 为什么当我们这样写时范围对象不会自动生成 worksheets(1).range ("A1"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789045/

相关文章:

excel - VBA运行时错误9 : Subscript out of range

php - 使用 %CC%88 解码字符串 - 使用 PHP 编码?

vba - 根据 2 个不同的字符串值删除行

excel - 范围选择错误

excel - 需要有关 Excel 中的中值 If 的帮助

平均值的 Excel 宏

excel - 将工作簿设置为只读

vba - 从另一个工作簿中的范围更改多个工作表中单元格的值

vba - 在 Excel 脚本中用点替换逗号

java - 将数据从 Java 导出到 MS Excel 的最佳方式