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

时间:2014-11-27 14:31:12

标签: excel vba excel-vba

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

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

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

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

wks.Range("A1:A70").Insert
编辑:我认为这与插入功能有关,但从Gary的学生的回答来看,它没有。引发我提问的确切代码是:

'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

现在我理解为什么。这一定是因为我没有在工作表对象前面加上Cell。它应该是:

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

结论:

欢迎更有经验的人阅读本文,因为问题不是我想象的那样。

否则,回到最初的问题,我很好奇:是否有任何VBA命令要求某个工作表处于活动状态,或者我是否永远不必在我的代码中使用worksheet.Select?我想知道,因为我知道我之前遇到过这个“问题”。但也许那时我在我的代码中犯了一个错误。

1 个答案:

答案 0 :(得分:1)

你还有一些与其他无关的错误。在没有保护的情况下,以下工作没有错误:

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