我想让我的程序在由变量定义的特定位置开始计数。我知道您可以使用rn = sh.Cells(9, 1)
,变量rn
现在占据cells(9,1)
的位置。但是当我在count命令中使用变量rn
时,我收到以下错误:
方法'范围'对象' _Worksheet'
失败了
这是我的代码:
Option Explicit
Sub Struc_Equa()
Dim n As Integer
End sub
Sub countN(n)
Dim sh As Worksheet
Dim rn As Range
Dim SheNa As String
SheNa = ActiveSheet.Name
Set sh = ThisWorkbook.Sheets(SheNa)
Set rn = sh.Cells(9, 1)
' The command below does not work
'n = sh.Range(rn, sh.Range(rn).End(xlToRight)).Columns.Count
' I am able to do what I want but in a inefficient way (shown below)
'n = sh.Range("A9", sh.Range("A9").End(xlToRight)).Columns.Count
rn.Activate
MsgBox (n)
End Sub
为什么会发生这种错误?
答案 0 :(得分:1)
试试这个:
n = sh.Range(rn, rn.End(xlToRight)).Columns.Count
它遵循范围([Cell1],[Cell2])语法
请记住,rn
已经是一个完全引用的范围地址,因此您可以直接将其用作 Range 对象的参数。有关Range Syntax的更多信息。
为什么原始代码会失败?
因为基于this article,在范围(arg)语法中, arg 命名范围。
请注意范围对象的默认属性为Value
所以你的代码:
sh.Range(rn).End(xlToRight)
实际上正在评估rn
的值,并为 Range(arg)语法提供 arg 。如果该单元格的值不是有效的单元格或范围地址(或文章中提到的名称),则会引发错误。以上实际评估如下:
sh.Range("value from rn range object").End(xlToRight)
如果您尝试使用有效的单元格或范围名称/地址更改该单元格的值,它将起作用。例如:
With sh
Set rn = .Cells(9, 1)
rn.Value2 = "A9"
n = .Range(rn, .Range(rn).End(xlToRight)).Columns.Count
MsgBox n
End With
简而言之: