我有一个代码片段,我不明白为什么它失败了。我收到“应用程序定义的错误或对象定义的错误”。我尝试对范围进行硬编码,但它确实起作用,但是我甚至对“命名范围”进行了硬编码,但仍然失败。
例如:这不起作用
If regexp.test(strInput) Then
Set clloffset = rcell.Offset(0, 1)
Call GetColLet(rcell)
'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
ActiveWorkbook.ActiveSheet.Range(FormulaCol).Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)
但这确实可以,我无法理解!
If regexp.test(strInput) Then
Set clloffset = rcell.Offset(0, 1)
Call GetColLet(rcell)
'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
ActiveWorkbook.ActiveSheet.Range("L24:L39").Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)
注意:我曾尝试同时使用(FormulaCol)
和("FormulaCol")
,但我不确定何时在命名范围内使用""
,但两者均无效。然后,我尝试对("L24:L39")
进行硬编码。而且有效。感谢您帮助解决此问题。
答案 0 :(得分:1)
在Excel中访问范围的主要方法有三种:
我不会真的花时间解释这些,但是这里有一些例子:
ThisWorkbook.Sheets("Name").Range("A1:B2")
ActiveWorkbook.ActiveSheet.Range("C3:E50")
Sheet1.Cells(1,3) 'Range("C1")
注释
ThisWorkbook
是对包含代码的工作簿的引用。与ActiveWorkbook
的重要区别在于它们并不总是同一工作簿(主要是打开2个以上的工作簿时)。
Sheet1
是工作表的代号。工作表代码名称只能用于ThisWorkbook
中包含的工作表。如果要引用其他工作簿中的工作表,则必须使用名称或索引来访问它。
这就像原始代码中的FormulaCol
。变量可以在本地或全局作用域级别的代码(Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
)中声明,也可以作为参数(Function Sample(rangeVariable as Range) : End Function
)传递到例程中。
与范围变量进行交互可被视为使用替换,例如:
Set FormulaCol = Sheet1.Range("L24:L39")
FormulaCol.Formula = ""
代替
Sheet1.Range("L24:L39").Formula = ""
与命名范围进行交互类似于与硬编码范围进行交互。假设命名范围“ Test”引用Sheet1上的Range(“ B2:C3”),它将通过以下方式与之交互:
Sheet1.Range("Test")
但是,在可以通过VBA引用命名范围之前,必须首先在工作簿中进行设置。可以通过几种不同的方式完成此操作:
随即打开一个窗口,您可以在其中选择命名范围的名称,然后选择其引用的范围。