[英]Excel VBA: Vlookup function returns type mismatch error
運行此代碼時出現類型不匹配錯誤:
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
有誰對如何避免此錯誤有任何建議?
Weekday()用於從日期值獲取工作日。
因此,您應該使用Weekday(.Range("A" & I))
從單元格的值中獲取工作日。
不知道您的數據,很難說,但是也許您想要
Weekday(Cells(I, "A"))
在功能上
編輯: 顯示一些不同的方法
如果我想使該單元格與A列中的某個單元格相鄰,或者以文本形式或空白包含星期幾,則可以編寫事件宏,如下所示。 根據數據如何進入單元格,可能需要進行一些更改。
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
現在,如果將數據手動輸入到單元格中,上述方法將起作用。 但是,如果單元格內容是公式的結果,則目標將是包含公式先例的單元格,甚至是在其他工作表上。 這些將需要某種不同的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.