将活动工作表设置为范围时"Object Required"



我已经尝试了我能找到的所有解决方案。

我正在尝试做的是为选定范围运行一个函数(活动表( 我什至无法进入循环部分,因为它在第 5 行出错(arc = ActiveSheet.Row.Count(。它抛出的错误是"需要对象"。我尝试了几种不同的解决方案,但没有运气。我是excel vba的菜鸟(我的背景是 vb.net 和c#(。我将非常感谢在正确的方向上推动出了什么问题。提前致谢:)

Sub TestV2()
Dim rng As Range
Dim selectedRange As Range
Dim arc As Range
Set arc = ActiveSheet.Rows.Count
Set selectedRange = ActiveSheet.Rows.Count
For Each rng In selectedRange.Cells
If Application.CalculationState = xlDone Then
FireValidate
End If
Next rng
End
End Sub

您收到此错误是因为您声明了arc as Range但您正在尝试为其分配Long编号。

Set关键字在 VBA 中是分配对象引用所必需的。

Set arc = ActiveSheet.Rows.Count
Set selectedRange = ActiveSheet.Rows.Count

arcselectedRange都声明为As Range,这是一个对象类型 - 所以Set关键字是正确的。

问题出在赋值运算符右侧的表达式上:ActiveSheet.Rows.Count计算结果为Long整数,该整数不是对象类型。ActiveSheet.Rows.Count得到ActiveSheet上的行数,...无论当前处于活动状态的特定工作表如何,都应该是相同的数字(所有工作表的行数都相同(。

因此,对象必需:您不能合法地将Range对象引用分配给Long整数值;您需要右侧表达式来计算对象引用

蒂姆·威廉姆斯的回答展示了如何正确地将selectedRange分配给Application.Selection,假设当前选择的是Range对象(如果不是这种情况,则会发生类型不匹配错误(。

我正在尝试做的是为选定范围运行一个函数(活动表(

ActiveSheet不会返回所选范围- 它为您提供当前处于活动状态的工作表

我是excel vba的菜鸟(我的背景是 vb.net 和c#(

您也可以从 VB.NET 或 C# 引用 Excel 对象模型,如果您更熟悉这些更强大的 .net 语言,则可以通过 Visual Studio Tools for Office (VSTO( 自动执行 Excel,但对象模型的行为将相同。

如果您只想要当前选择,则:

Set selectedRange = Selection

您可以尝试按如下方式修改代码:

Sub TestV2()
Dim rng As Range
For Each rng In Selection
If Application.CalculationState = xlDone Then
FireValidate
End If
Next rng
End Sub

希望对您有所帮助。

代码中有三个错误:

.1.密钥错误。直接使用ActiveSheet.Rows.Count可能会遇到"对象必需"异常,相反,您可以使用以下工作代码:

Dim ws As Worksheet
Set ws = ActiveSheet
'MsgBox ws.Rows.Count
Set arc = ws.Rows.Count
  1. 正如hod所说(这不是关键问题,但需要修复(,

您收到此错误是因为您将 arc 声明为 Range,但您正在尝试为其分配一个 Long 数字。

  1. 正如威廉所指出的,如果要操作所选范围,则可以直接使用"设置所选范围=选择"。

子测试V2((

Dim rng As Range
Dim selectedRange As Range
Set selectedRange = Selection
For Each rng In selectedRange.Cells
If Application.CalculationState = xlDone Then
'FireValidate
'MsgBox "OK"
End If
Next rng    
End Sub

我认为大多数时候我们只需要UsedRange.Rows,而不是Rowsall。

当前工作表的ActiveSheet.UsedRange.Rows.Count

工作表("工作表名称"(。特定工作表的 UsedRange.Rows.Count

最新更新