首页 > 解决方案 > VBA Selection.Find 返回偏移单元格

问题描述

我的代码有问题。我试图通过使用 find 函数来识别正确的行号将值插入“数据库”。当我运行代码时,查找函数返回下一个行号,即。serchname 在第 300 行,但数据插入在第 301 行。

我使用的代码如下:

For Each Cell In Workbooks(controlfile).Sheets("Lab").Range("B9:B56")
    If Cell.Value <> "" Then
        
'Range("N" & latestRow).Value = Right(DataArray(1), 4) & Right(DataArray(2), 4)
'Range("N" & latestRow).NumberFormat = "00000000"
        
        
        
        
        søgeOrd = Right(Cell.Value, 4) & Right(Cell.Offset(0, 1), 4)
        Workbooks(controlfile).Sheets("Lab").Range("A1").Value = søgeOrd
        Workbooks(controlfile).Sheets("Lab").Range("A1").NumberFormat = "00000000"
        LinjeL = Cell.Row
        FGM = Workbooks(controlfile).Sheets("Lab").Range("F" & LinjeL).Value
        STA = Workbooks(controlfile).Sheets("Lab").Range("I" & LinjeL).Value
        BMK = Workbooks(controlfile).Sheets("Lab").Range("J" & LinjeL).Value
        VK = Workbooks(controlfile).Sheets("Lab").Range("L" & LinjeL).Value
        DP = Workbooks(controlfile).Sheets("Lab").Range("M" & LinjeL).Value
        SNB = Workbooks(controlfile).Sheets("Lab").Range("N" & LinjeL).Value
        Workbooks(controlfile).Sheets("Lab").Range("A1").ClearContents
        
        
        
        
        'find søgeord i database og indsæt de værdier som er fundet i lab
       
        Workbooks(FileName).Sheets("Database").Activate
        Columns("N:N").Select
        Set cellD = Selection.Find(What:=Workbooks(controlfile).Sheets("Lab").Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
        
        If Not cellD Is Nothing Then LinjeD = cellD.Row
               
       
        If Range("E" & LinjeD).Value <> "" Then
        
        'kopier alle data til fejllog hvis der allerede er data
        Range("A" & LinjeD).Select
        ActiveCell.EntireRow.Copy
        Workbooks(FileName).Worksheets("Fejllog").Activate
        LastLine = Workbooks(FileName).Sheets("Fejllog").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
        Range("A" & LastLine).PasteSpecial
        
        Application.CutCopyMode = False
        
        
        Workbooks(FileName).Sheets("Database").Activate
        
        Range("E" & LinjeD).Value = FGM
        Range("H" & LinjeD).Value = STA
        Range("I" & LinjeD).Value = BMK
        Range("O" & LinjeD).Value = Format(Now, "dd.mm.yyyy")
        Range("P" & LinjeD).Value = VK
        Range("Q" & LinjeD).Value = DP
        Range("R" & LinjeD).Value = SNB
        
        Workbooks(controlfile).Sheets("Lab").Activate
        
        Else
        
        Range("E" & LinjeD).Value = FGM
        Range("H" & LinjeD).Value = STA
        Range("I" & LinjeD).Value = BMK
        Range("O" & LinjeD).Value = Format(Now, "dd.mm.yyyy")
        Range("P" & LinjeD).Value = VK
        Range("Q" & LinjeD).Value = DP
        Range("R" & LinjeD).Value = SNB
        
         Workbooks(controlfile).Sheets("Lab").Activate

        End If
        
    End If
Next Cell

任何输入将不胜感激,谢谢。

标签: excelvbaerror-handling

解决方案


我找到了解决方案。

在搜索开始之前,我错误地清除了用作搜索名称的单元格的内容。这导致搜索一个空单元格。

感谢大家的投入,并帮助我清理我的代码 :)

令人惊奇的是,您可以花费数小时查看某件事,却发现答案就在您面前。


推荐阅读