【发布时间】:2020-11-30 07:25:00
【问题描述】:
我有两个电子表格(OriginalData 和模板),我试图弄清楚如何创建一个 vba 代码,仅当模板中列中的特定单元格时才会将数据从 OriginalData 工作表拉入模板工作表工作表为空白。数据将填充到模板工作表上的另一列中,而不是替换原来的空白单元格。我还需要遍历数据范围内的每个空白单元格。我知道我可以使用 VLOOKUP 公式,但我试图尽可能地自动化这个过程,而不必每次都输入公式。
到目前为止,这是我能够提出的,但它不起作用,现在我被卡住了,所以任何帮助将不胜感激。我对 VBA 编码还是比较陌生,所以请放轻松。
Dim shOrg As Worksheet: Set shOrg = ThisWorkbook.Sheets("OriginalData")
Dim shTemp As Worksheet: Set shTemp = ThisWorkbook.Sheets("Template")
Dim CheckCell as Range
LastRowTemp = shTemp.Cells(Rows.Count, 1).End(xlUp).Row + 1
For Each CheckCell in shTemp.Range("B" & LastRowTemp)
If CheckCell.Value = "" Then
Range("C" & CheckCell).Value = Application.VLookup(CheckCell,shOrg.Range("A2:E"),5,FALSE)
End If
Next CheckCell
End Sub
【问题讨论】:
-
尝试将
Range("C" & CheckCell).Value更改为Range("C" & CheckCell.Row).Value。您也可以使用CheckCell.Offset(0, 1).Value。 -
它没有用。首先,它要求我定义 LastRowTemp,但我忘记了,所以我将 LastRowTemp 调暗为 Long。然后,当我运行宏时,我得到一个“运行时错误'1004':对象'_Worksheet'的方法'Range'失败,调试器将我带到 Range("C" & CheckCell.Row).Value = Application.VLookup(CheckCell, shOrg.Range("A2:E"), 5, False).
-
.Range("A2:E")不是一个范围。需要在E后面指定行号。 -
但是如果我需要从 E 列中的多行中提取数据,那么我该如何实现呢?我是否需要创建一个像 LastRowTemp 这样的变量,但除了 OriginalData 工作表的 LastRowOriginal 之外?当我使用宏记录器查看 VLOOKUP 是如何发挥作用时,这就是我所看到的,那么我将如何将其合并到我现有的代码中呢? ActiveCell.FormulaR1C1 ="=VLOOKUP(RC[-3],OriginalData!C[-3]:C[1],5,FALSE)"