为什么某些方法/属性要求某个工作表处于活动状态,而其他方法/属性则不需要



为什么我在 VBA 中使用的某些方法和属性要求某个工作表处于活动状态,而其他方法和属性则不需要?

无论 wks 是否处于活动状态,以下示例都有效:

wks.Range("A1").Value = 1

以下示例仅在 wks 处于活动状态时才有效,否则会引发错误:

wks.Range("A1:A70").Insert

编辑:我认为这与插入功能有关,但从加里的学生回答来看,它没有。触发我问这个问题的确切代码是:

'Cut range from source row
Dim lSourceRow As Long
Dim lSourceStartColumn As Long
Dim lSourceEndColumn As Long
lSourceRow = t.Row
lSourceStartColumn = loSource.Range.Column
lSourceEndColumn = loSource.Range.Column + loSource.ListColumns.Count - 1
wksSource.Range(wksSource.Cells(lSourceRow, lSourceStartColumn), wksSource.Cells(lSourceRow, lSourceEndColumn)).Cut
'Select target worksheet for insert method
wksTarget.Activate
'Insert range into target row
Dim lTargetRow As Long
Dim lTargetStartColumn As Long
Dim lTargetEndColumn As Long
lTargetRow = loTarget.DataBodyRange.Row + loTarget.ListRows.Count
lTargetStartColumn = loTarget.Range.Column
lTargetEndColumn = loTarget.Range.Column + loTarget.ListColumns.Count - 1
wksTarget.Range(Cells(lTargetRow, lTargetStartColumn), Cells(lTargetRow, lTargetEndColumn)).Insert

现在我明白为什么了。这一定是因为我没有在单元格前面加上工作表对象。它应该是:

wksTarget.Range(wksTarget.Cells(lTargetRow, lTargetStartColumn), wksTarget.Cells(lTargetRow, lTargetEndColumn)).Insert

由此得出的结论:

欢迎阅读本文的更有经验的人关闭此线程,因为问题比我想象的要大。

否则,回到最初的问题,我很好奇:是否有任何 VBA 命令需要某个工作表才能激活,或者我永远不必在我的代码中使用worksheet.Select?我想知道,因为我知道我以前遇到过这个"问题"。但也许那时和现在一样,我在代码中犯了一个错误。

您还有其他一些不相关的错误。 在没有保护的情况下,以下内容可以正常工作:

Sub dural()
    Sheets("Sheet2").Select
    Sheets("Sheet1").Range("A1").Insert
End Sub

最新更新