我已经尝试了我能找到的所有解决方案。
我正在尝试做的是为选定范围运行一个函数(活动表( 我什至无法进入循环部分,因为它在第 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
arc
和selectedRange
都声明为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
- 正如hod所说(这不是关键问题,但需要修复(,
您收到此错误是因为您将 arc 声明为 Range,但您正在尝试为其分配一个 Long 数字。
- 正如威廉所指出的,如果要操作所选范围,则可以直接使用"设置所选范围=选择"。
子测试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。