vba - 我一生都无法弄清楚导致此不匹配错误 VBA Excel 的原因是什么?

标签 vba excel vlookup type-mismatch

我有这个导致不匹配错误的代码,我无法弄清楚为什么我之前在不匹配错误的情况下让它工作,并且试图修复它我无法让它恢复工作。合并表中的值都是数字。基本上我想做的是当一个值输入到一个单元格中时,会有一个 VLookup将被执行以将一个值输入到相邻的单元格中,一旦我得到这个工作,同一行中有更多的单元格。如果你们中的任何人渴望解决某些问题,请告诉我!

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim LooupValue As String
    Dim sfx As Long
    Set KeyCells = Columns(1)
    LooupValue = ActiveCell.Value
    sfx = Application.VLookup(LooupValue, Worksheets("Merge").Range("D:BD"), 2, False)

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then

        Range(Target.Address).Offset(0, 1).Value = sfx

    End If
End Sub

编辑:感谢@Marcucciboy2、@MathieuGuindon 和@BigBen 的成功帮助,我做了更多的研究并在下面发布了解决我问题的方法。

最佳答案

Dim sfx As Long
sfx = Application.VLookup(LooupValue, Worksheets("Merge").Range("D:BD"), 2, False)


如果 vlookup产量 xlErrNA#N/A ,则 VBA 无法将其结果强制转换为 Long ,你得到的正是:类型不匹配错误 - 因为 xlErrNAError值,不能隐式转换为 String , 一个 Long ,或任何东西。唯一可以包含此数据的类型是 Variant .
Dim result As Variant
result = Application.VLookup(LooupValue, Worksheets("Merge").Range("D:BD"), 2, False)

Dim sfx As Long
If Not IsError(result) Then 
    sfx = CLng(result)
Else
    'lookup yielded no match
End If

此外,看起来这是一个不一样的:

LooupValue = ActiveCell.Value

ActiveCell可能与 Target 不是同一个单元格,即被修改的单元格。你可能需要这个:
LookupValue = Target.Value

我还建议制作不合格的Range (与 RowsColomnsNamesCells 相同)调用显式限定 - 因为完全相同的代码根据其写入位置的不同表现不同。通过使用 Me 限定它们,您正在使您的代码更加明确。说明它做了什么并按照它所说的做的代码总是更好的代码。
Worksheets("Merge")是一种气味:如果工作表存在于 ThisWorkbook在编译时,给它一个代号(即设置它的 (Name) 属性)并直接使用该标识符:
result = Application.VLookup(LooupValue, MergeSheet.Range("D:BD"), 2, False)

如果工作表仅在运行时存在(例如,它位于由宏打开的工作簿中),那么您应该在打开该文件的位置附近引用该工作簿,例如Set book = Application.Workbooks.Open(path) - 使用该引用来限定 Worksheets成员调用,而不是隐式引用 ActiveWorkbook .

查找范围D:DB当您只查找列 E 中的值时,该值过多。 .如果硬编码 2是否留下来,我将查找范围设为 D:E .

关于vba - 我一生都无法弄清楚导致此不匹配错误 VBA Excel 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51048988/

相关文章:

excel - 无法识别已发布的 Excel 宏

excel - 在 Excel VBA 中获取使用 "Save As"时使用的路径(从模板创建的文档!)

c# - 它只导入 mysql 数据库中的 1 行

excel - 如何根据两列查找值(列值不唯一)

java - 如何使用apache poi从excel读取数据并将数据存储到String[][]数组中?

excel - Excel 中的模糊匹配查找

sql - 从 Access VBA 执行 SQL Server Pass-Through 查询

vba - 使用变量引用类属性?

vba - Vlookup 和 ISERROR

excel - 将函数的文本公式转换为 'real' 公式