2017-01-09 28 views
1

已被卡住了一段时间。我希望有人能帮助我与我目前的问题,并指出我为什么我有错误Excel VBA。向现有单元添加1年

必选对象424错误

Here是我工作的表,这里是我当前的代码:

注:(me.cmbveh.value是我的VBA窗体上的组合框)

Dim v_name As String 
Dim add_date As Date 

v_name = Me.cmbveh.Value 
add_date = Application.WorksheetFunction.VLookup(v_name, Sheets("Vehicle Database").Range("F14:R33"), 13, False) 

Application.WorksheetFunction.VLookup(v_name, Sheets("Vehicle Database").Range("F14:R33"), 13, False).Select 
ActiveCell.Value = DateSerial(Year(add_date) + 1, Month(add_date), Day(add_date)) 

错误在这行代码指向:

Application.WorksheetFunction.VLookup(v_name, Sheets("Vehicle Database").Range("F14:R33"), 13, False).Select 

我想在这里做的是,如果在我的组合框中的值对我表一个比赛,我希望能够1年的“登记期满日期”一栏增加。 任何帮助,将不胜感激!

+0

我假设你的代码是你的User_Form代码中,在此情况下被它放在哪里? 'ComboBox_Change'? –

+0

@ShaiRado它是私人小组CommandButton1_Click() 谢谢 –

+0

@ShaiRado请告诉我,如果你需要额外的信息。真的需要这个帮助。 –

回答

0

既然您知道您期望将您的cmbveh组合框值与F列中的值进行比较,您可以使用Application.Match找到与组合框中的值相匹配的行号。之后,您可以获得行参考(向其添加13,因为您的范围从第14行开始,而不是第1行),并从列“R”(您存储“注册过期日期”的位置)读取值。

最后,使用DateAdd函数添加1年到存在的日期(通过选择"yyyy"作为区间参数)。

代码

Option Explicit 

Private Sub CommandButton1_Click() 

Dim v_name As String 
Dim add_date As Date 

Dim MatchRow As Variant 

v_name = Me.cmbveh.Value 

With Sheets("Vehicle Database") 
    ' first test to see if Match criteria was met (found in Column F) 
    If Not IsError(Application.Match(v_name, .Range("F14:F33"), 0)) Then 
     MatchRow = Application.Match(v_name, .Range("F14:F33"), 0) '<-- get row number 
     .Range("R" & MatchRow + 13).Value = DateAdd("yyyy", 1, .Range("R" & MatchRow + 13).Value) 
    End If 
End With 

End Sub 
+0

它的工作原理!请解释我未来的参考代码:) 非常感谢! –

+0

@KelvinJhonCamua查看编辑过的帖子,我在顶部添加了解释,并在代码中添加了一些注释 –

+0

非常感谢您的支持。如果我问另一个问题,你介意吗?它与这个问题有关。这是关于我的公式不断在测试后改变数值。 –