为什么我在 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