【问题标题】:Excel VBA issue with Ranges "Application-defined or object-defined error"范围“应用程序定义或对象定义错误”的 Excel VBA 问题
【发布时间】:2014-12-30 16:32:15
【问题描述】:

我是 VBA 的新手,使用的是 excel 2013。我整天都在为这个错误绞尽脑汁!标有星号的行出现
“应用程序定义或对象定义错误”

我的功能应该做两件事...
1) 给当前单元格一个值
2)改变另一个单元格的填充颜色

#1 没有问题,但#2 不断出错
这是我目前正在使用的代码...
我从 excel 的单元格中调用它,给它公式:=ScoreIt()

Function ScoreIt()

Dim TotalVal As Integer, LRVal As Integer, LYVal As Integer, LGVal As Integer
TotalVal = 0
LRVal = 0
LYVal = 1
LGVal = 2

Dim CurrentRow As String, BedCell As String, Beds As Integer
CurrentRow = ActiveCell.Row
BedCell = Range("K" & CurrentRow).Address(False, False)
Beds = Range(BedCell).Value

If (Beds < 2) Or (Beds > 5) Then
    TotalVal = TotalVal + LRVal
    ** Range(BedCell).Interior.ColorIndex = 38 **
ElseIf (Beds = 2) Or (Beds = 5) Then
    TotalVal = TotalVal + LYVal
    ** Range(BedCell).Interior.ColorIndex = 36 **
ElseIf (Beds = 3) Or (Beds = 4) Then
    TotalVal = TotalVal + LGVal
    ** Range(BedCell).Interior.ColorIndex = 35 **
End If

ScoreIt = TotalVal

End Function



谢谢

【问题讨论】:

  • 为什么不将BedCell 设为Range 对象,然后调用set BedCell = Range("K" &amp; CurrentRow),然后使用BedCell.Interior.ColorIndex = 38
  • 我已经尝试过了,它也不起作用,BedCell 返回单元格中的值而不是单元格的地址/位置。然后我尝试将 .Address(False, False) 添加到它的末尾,但这只是以类型不匹配错误结束。

标签: excel vba range


【解决方案1】:

工作表公式,即使是 UDF 公式,也无法更改范围对象的属性或返回值/更改另一个范围对象中的属性。函数的返回值仅限于调用它的单元格。

我建议重新设计您的代码,并将其拆分为一个用于返回值的函数,以及一个用于颜色更改的私有子。

以下是 Microsoft 支持网站的摘录:

工作表单元格中的公式调用的用户定义函数不能 更改 Microsoft Excel 的环境。这意味着这样一个 函数不能执行以下任何操作:

-在电子表格中插入、删除或格式化单元格。

-更改另一个单元格的值。

-向工作簿移动、重命名、删除或添加工作表。

-更改任何环境选项,例如计算模式或屏幕视图。

-向工作簿添加名称。

-设置属性或执行大多数方法。

用户定义函数的目的是允许用户创建一个 未包含在随附函数中的自定义函数 微软 Excel。 Microsoft Excel 中包含的功能也不能 改变环境。函数可以执行计算 将值或文本返回到输入它们的单元格。 任何环境变化都应通过使用视觉 基本子程序。

你可以在这里找到完整的文章:http://support.microsoft.com/kb/170787

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多