簡體   English   中英

Excel VBA-將值粘貼到的查找單元格

[英]Excel VBA- Lookup cell to paste value to

我正在嘗試構建一個宏,該宏通過查找行值和查找列值,然后使用該值來確定要粘貼到的單元格,從而將值插入到表的特定單元格中。 我對VBA還是很陌生,所以我不確定自己在做什么。

這是我到目前為止的內容:

Name=Sheets("Input").Range("C5")
Week=Sheets("Input").Range("C19")
copyCell=Sheets("Input").Range("C18")

pasteCell = Application.Index(Sheets("Resources").Range("B2:AZ50"),Application.Match(Week,Sheets("Resources").Range("A2:A50"),0),Application.Match(Name,Sheets("Resources").Range("B1:AZ1"),0))

copyCell.Copy
pasteCell.PasteSpecial PasteValues

我一直在獲取運行時錯誤對象,但我不確定自己在做什么錯...

任何幫助,將不勝感激!

更新

這也是要粘貼單元格的表(該表不是真實表,只是為了在表中隱藏名稱的一個示例,但它看起來完全一樣,只是真實表從第一行開始)。

在此處輸入圖片說明

這是輸入頁面:

在此處輸入圖片說明

注意:此后,我在周變量周圍添加了更多代碼:

If WorksheetFunction.CountA(Sheets("Input").Range("C19")) = 0 Then
Week = Sheets("Input").Range("C20").Value
Else
Week = Sheets("Input").Range("C19").Value
End If

非常感謝你們提供的幫助!

在沒有看到更多代碼的情況下,我假設您已將copyCellpasteCell聲明為Type Variant (如果未聲明, 則為 Variant類型)。

這將引發您描述的錯誤。

通過正確地聲明變量並在分配對象變量時使用Set關鍵字來解決該問題。

此外,如果未聲明NameWeek也會引發424 Object Required錯誤。 它們應為String數據類型,並使用range .Value方法進行分配。 如果任何一個match函數返回錯誤(找不到匹配項),則該錯誤將持續存在,而無需對代碼進行更多修改。

我認為這會起作用:

Sub Test()
Dim Name As String
Dim Week As Long
Dim copyCell As Range
Dim pasteCell As Range

Name = Sheets("Input").Range("C5").Value
Week = CLng(DateValue(Sheets("Input").Range("C19").Value))
Set copyCell = Sheets("Input").Range("C18")

If Not IsError(Application.Match(Week, Sheets("Resources").Range("A2:A50"), 0)) And _
    Not IsError(Application.Match(Name, Sheets("Resources").Range("B1:AZ1"), 0)) Then

    Set pasteCell = Application.Index(Sheets("Resources").Range("B2:AZ50"), _
        Application.Match(Week, Sheets("Resources").Range("A2:A50"), 0), _
        Application.Match(Name, Sheets("Resources").Range("B1:AZ1"), 0))

    copyCell.Copy
    pasteCell.PasteSpecial PasteValues
Else:
    MsgBox Name & " and/or " & Week & " not found!", vbInformation
End If
End Sub

更新

Excel並不總是知道如何處理日期值。 就是這種情況。 在工作表上,日期值存儲為長整數。 在宏中,我們將其稱為字符串,這可能會引發一些錯誤,包括“ 1004”(無法匹配)。

我對上面的代碼進行了修改,即Dim Week as Long ,然后更改了賦值以確保將值解釋為工作表中的Date ,然后將其解釋為Long整數(分配給此變量時):

Week = CLng(DateValue(Sheets("Input").Range("C19").Value))

現在,如果您的日期並非全部都是實際日期(google ...),這可能並非萬無一失,但實際上這確實經常發生,有些日期輸入為日期(數字格式為日期),而另一些輸入為字符串文字。 在這種情況下,“ Week值仍應正確處理,但查找范圍也應采用相同的格式,以避免再次發生潛在錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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