首页 > 解决方案 > 对象'_worksheet的方法'范围'失败

问题描述

我在 VBA 中有这段代码,我只是按照关于代码相同代码的教程进行操作,但结果总是显示“对象'_worksheet 的方法'范围'失败”这个代码有什么问题吗?

KktkRow = .Range("B5").Value

    For KktkCol = 1 To 39
    .Range(Sheet4.Cells(1, KktkCol).Value).Value = Sheet4.Cells(KktkRow, KktkCol).Value
    Next KktkCol

标签: excelvba

解决方案


.Range(Sheet4.Cells(1, KktkCol).Value).Value = Sheet4.Cells(KktkRow, KktkCol).Value

With某处有一块不适合Sheet4. 删除Sheet4限定符并保留.点运算符使其看起来像这样(假设With块不是 forSheet4但源值在该表上):

.Range(.Cells(1, KktkCol).Value).Value = Sheet4.Cells(KktkRow, KktkCol).Value

这样,.Cells成员调用将始终针对符合此条件的同一工作表进行.Range.Range每当您使用 inner调用时.Cells,请确保 inner.Cells与 external 位于同一工作表上.Range

当内部调用根本不合格时,这与隐式 ActiveSheet 引用引起的常见问题非常相似:.Cells

.Range(Cells(1, KktkCol).Value).Value = .Cells(KktkRow, KktkCol).Value
       ^^^^^ if the ActiveSheet isn't the same as the parent of .Range ~> error 1004

如果With块不是用于Sheet4但目标单元格是,那么您需要.Range使用它来限定:

Sheet4.Range(Sheet4.Cells(1, KktkCol).Value).Value = Sheet4.Cells(KktkRow, KktkCol).Value

如果With块是 for Sheet4,那么我们缺少上下文。正如约翰科尔曼指出的那样Sheet4.Cells(KktkRow, KktkCol)看起来很可疑(您是在从单元格中读取行号吗?)。


推荐阅读