【发布时间】:2014-10-31 13:05:41
【问题描述】:
我的目标是尝试遍历 Excel 2010 工作表中的一组单元格,并在同一个工作表中更改另一个单元格的值。这是我尝试用 VBA 做到这一点的尝试。当我尝试更改定义 moCost 的单元格时,出现“类型不匹配”错误。
另外,我假设当我更改(使用工作表更改事件)我的工作表单元格中的任何一个变量的值时,我使用了 Set 它将更改 moCostAfford si 的值,对吗?只是想确认一下。
任何帮助/指导将不胜感激。
这是我的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("I4:K42")) Is Nothing Then
On Error GoTo haveError
Application.EnableEvents = False
Dim moCost As Range, moCostAmount As Range, moCostManual As Range, moCostAfford As ValueChange
Dim cell As Range, affordabilityRowValues As Range
Set moCost = Range("A13")
Set moCostAmt = Range("B13")
Set moCostManual = Range("B14")
Set moCostAfford = Range("C13")
Set affordabilityRowValues = Intersect(Target, Me.Range("I4:K42"))
For Each cell In affordabilityRowValues.Cells
If cell.Offset(0, 1) = moCost And cell.Offset(0, 2) = moCostAmount And moCostManual = "0" Then
moCostAfford = cell.Offset(0, 3).Value
Else
moCostAfford = moCostAmount
End If
Next
Set affordabilityRowValues = Nothing
Set moCostAfford = Nothing
Set moCostManual = Nothing
Set moCostAmount = Nothing
Set moCost = Nothing
Application.EnableEvents = True
End If
Exit Sub
haveError:
MsgBox Err.Description
Application.EnableEvents = True
End Sub
【问题讨论】:
-
首先,在模块顶部键入 Option Explicit。这将警告您任何尚未声明或拼写错误的变量(提示:至少有一个)。之后,检查变量类型和您为 moCostAffordValue 使用的属性。我从未使用过 ValueChange 类型,但似乎 Value 不是该类型的有效属性,或者需要一个参数。
-
moCost是一个范围,但您没有在Set moCost = Application.Cells.Value("A13")行中设置范围,它看起来像Set moCost = Range("A13"),或者如果A13有一个单元格地址,那么Set moCost = Range(Range("A13").Value)其他人类似 -
谢谢,伙计们!我会进行这些更正,并希望消除错误。
-
@Melinda:你所做的是正确的。但是有一个小变化,使用 Set moCost = Application.Cells(13, 1)。而不是指定范围 A13 使用行、列格式。
-
有什么原因不能在B13中简单地使用
=VLOOKUP(A13, J4:K42, 2, FALSE)?