Excel VBA:Vlookup函数返回types不匹配错误

运行此代码时出现types不匹配错误:

Private Sub Worksheet_Change(ByVal Target As Range) Dim Lastrow1 As Long Dim val As Variant Lastrow1 = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row With Sheets("Sheet1") Lastrow1 = .Range("A" & Rows.Count).End(xlUp).Row For I = 1 To Lastrow1 If (.Cells(I, "A") <> "") Then **val = Application.WorksheetFunction.VLookup(Weekday(I, "A"), day_name, 2, 0)** Cells(I, "B") = val End If Next I End With End Sub 

以下是具有以下值的表数组day_name

 1 Sunday 2 Monday 3 Tuesday 4 Wednesday 5 Thursday 6 Friday 7 Saturday 

有没有人有任何build议如何避免这个错误?

Weekday()用于从date值中获取星期几。

所以你应该使用Weekday(.Range("A" & I))来得到单元格的值。

不知道你的数据,很难说,但也许你想

 Weekday(Cells(I, "A")) 

在函数中

编辑: 显示一个有点不同的方法

如果我想让单元格与列A中的某个单元格相邻,则可以包含文本forms的星期几,也可以包含空格,然后写下事件macros,如下所示。 根据数据如何进入单元格,可能需要进行一些更改。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim rRangeToCheck As Range Dim C As Range Set rRangeToCheck = Worksheets("sheet1").Columns(1) If Not Intersect(rRangeToCheck, Target) Is Nothing Then Application.EnableEvents = False For Each C In Intersect(rRangeToCheck, Target) If IsDate(C) Then C.Offset(0, 1) = Format(C, "dddd") Else C.Offset(0, 1) = "" End If Next C End If Application.EnableEvents = True End Sub 

现在,如果数据是手动input到单元格中,上面的工作。 但是,如果单元格内容是公式的结果,则目标将是包含公式先例的单元格,甚至是在不同的工作表上。 那些将需要一个不同的方法。