簡體   English   中英

Excel VBA:Vlookup函數返回類型不匹配錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM