我尝试了所有可以找到的解决方案。
我想做的是为选定范围运行一个功能(ActiveSheet) 我什至无法进入循环部分,因为它在第5行(arc = ActiveSheet.Row.Count)出错。它引发的错误是“ Object Required”。我尝试了几种在线找到的解决方案,但都没有走运。我是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
答案 0 :(得分:3)
由于声明了arc as Range
,但您正在尝试为其分配一个Long
号,因此您收到此错误。
答案 1 :(得分:2)
在VBA中,必须使用Set
关键字才能分配对象引用。
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
整数值;您需要使用右侧的表达式来求出对象引用。
Tim Williams' answer显示了如何正确地将selectedRange
分配给Application.Selection
,假设当前选择的是Range
对象(类型不匹配否则将发生错误。
我想做的是为选定范围(ActiveSheet)运行一个函数
ActiveSheet
不会返回所选范围-它会为您提供当前处于活动状态的工作表。
我是excel vba的完全菜鸟(我的背景是vb.net和c#)
您也可以从VB.NET或C#引用Excel对象模型,如果对这些功能更强大的.net语言更满意,则可以通过Visual Studio Tools for Office(VSTO)自动执行Excel-但是对象模型将行为相同。
答案 2 :(得分:1)
如果只需要当前选择,则:
Set selectedRange = Selection
答案 3 :(得分:1)
您可以尝试如下修改代码:
Sub TestV2()
Dim rng As Range
For Each rng In Selection
If Application.CalculationState = xlDone Then
FireValidate
End If
Next rng
End Sub
希望它对您有所帮助。
答案 4 :(得分:0)
您的代码中存在三个错误:
.1。 关键错误。直接使用 ActiveSheet.Rows.Count 可能会遇到“ Object Required”异常,相反,您可以使用以下工作代码:
Dim ws As Worksheet
Set ws = ActiveSheet
'MsgBox ws.Rows.Count
Set arc = ws.Rows.Count
您收到此错误是因为您将arc声明为Range,但您正在尝试为其分配Long数。
Sub TestV2()
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 ,而不需要全部 Rows 。
当前工作表的ActiveSheet.UsedRange.Rows.Count 。
工作表(“工作表名称”)。UsedRange.Rows.Count用于特定工作表。