gpt4 book ai didi

excel - VBA选择。查找返回偏移量单元格

转载 作者:行者123 更新时间:2023-12-03 08:38:45 25 4
gpt4 key购买 nike

我的代码有问题。我试图通过使用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
任何输入将不胜感激,谢谢。

最佳答案

我重新编写了您的代码,以消除对Selection对象的使用。

Private Sub Snippet()

Dim WsDb As Worksheet
Dim ClmN As Range
Dim cellID As Range
Dim What As Variant
Dim LineID As Long

What = Workbooks(controlfile).Sheets("Lab").Range("A1").Value
Set WsDb = Workbooks(Filename).Sheets("Database")
Set ClmN = WsDb.Columns("N:N")
Set cellD = ClmN.Find(What:=What, After:=ActiveCell, _
LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

If Not cellD Is Nothing Then LinjeD = cellD.Row
End Sub
现在,通过声明一个变量来观察在其上进行搜索的工作表的定义。现在,该代码将在后台平稳运行,而不会出现屏幕闪烁。
现在您可以责怪我破坏对 ActiveCell的引用。我真的吗激活“数据库”选项卡时,代码中哪个单元处于 Activity 状态?可能是任何人或没有。现在该代码将崩溃,因为 ActiveCell不在 ClmN范围内。显然,您需要在该范围内指定一个单元格以开始搜索。 cellID范围是否从发现 What的位置以外的其他行开始?我对此表示怀疑,您也没有主张。您说在LineID以外的其他位置插入了一行。这是正常现象,与插入行的操作有关,与您发布的代码无关。从逻辑上讲,新行应代替您指定的行。因此,cellId.Row现在将比以前低一行。但是,我错了很多遍了。因此,我总是测试哪一行是旧的,哪一行是新的。这并不困难-总是一样。

关于excel - VBA选择。查找返回偏移量单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64114235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com