gpt4 book ai didi

vba - 使用 find 方法查找下一个可用的空白行

转载 作者:行者123 更新时间:2023-12-03 02:28:43 24 4
gpt4 key购买 nike

A 列的标签号根据该标签号的前缀而变化。例如:

  • 35C-1234
  • 此处为空白行
  • 35C-1236
  • 35C-1237
  • 35TC-1234
  • 35TC-1235
  • 此处为空白行
  • 35TC-1237

我希望宏做的是在用户输入标签号前缀后找到第一次出现的空白行。在这种情况下,如果用户想要查找标签编号前缀“35TC”的空白行,则将选择标签编号“35TC-1235”之后的空白行,而不是标签编号“35C-1234”之后的空白行”。我得到了查找空白行的代码,但是,我在这段代码中实现 .Find() 函数时遇到了麻烦,非常感谢对此的任何帮助!

正在使用的代码:

Private Sub Worksheet_Activate()    
Dim msg As String
Dim result As Integer
Dim x As String
msg = "Would you like to find the next available tag number?"
result = MsgBox(msg, vbYesNo)

If result = vbYes Then
x = Application.InputBox("Enter the part reference ")
'need to work on the find function here
Cells.Find(What:=c, Lookin:=range("A"))

NextFree = Range("A:A").Cells.SpecialCells(xlCellTypeBlanks).Row
Range("A" & NextFree).Select
Else
Cancel = True
End If
End Sub

编辑问题:

通过下面两个答案的帮助,我已经能够在用户声明前缀后获取空格。我现在遇到两个问题,其中 1)如果声明的前缀没有空白行,则代码将跳转到下一个可用的空白行,即使它有不同的前缀。我希望它可以转到包含前缀的最后一个标签,并输出一条消息,声明前缀没有任何空白行,而不是发生这种情况。 2)我还刚刚添加了一个新的前缀“35CA”。现在,当我去搜索“35C”时,其中包含“35CA”前缀。我如何保留它才能只提供与我搜索的内容相关的结果?

enter image description here

在这种情况下,如果我搜索“35C”,代码将跳转到“35CA-1600-K02”之后的空白处。这是发生上述两个问题的示例。

最佳答案

换一种方式...

Sub FindBlankRow()
Dim Rng As Range, eRng As Range
Dim lr As Long
Dim str As String
str = InputBox("Enter the part reference ")
lr = Cells(Rows.Count, 1).End(xlUp).Row + 1
On Error Resume Next
Set Rng = Range("A2:A" & lr).SpecialCells(xlCellTypeBlanks)
If Not Rng Is Nothing Then
For Each eRng In Rng.Areas
If InStr(LCase(eRng.Cells(1).Offset(-1, 0)), LCase(str)) > 0 Then
eRng.Cells(1).Select
Exit For
End If
Next eRng
End If
End Sub

编辑答案:

Sub FindBlankRow()
Dim Cell As Range
Dim str As String, firstcell As String
str = InputBox("Enter the part reference ")
If str = "" Then Exit Sub
If Right(str, 1) <> "-" Then str = str & "-"
With Range("A:A")
Set Cell = .Find(str, lookat:=xlPart, MatchCase:=False)
If Not Cell Is Nothing Then
firstcell = Cell.Address
Do
If Cell.Offset(1, 0) = "" Then
Cell.Select
Exit Sub
ElseIf InStr(LCase(Cell.Offset(1, 0)), LCase(str)) = 0 Then
Cell.Select
MsgBox "No blank cell was found below a code with prefix " & str & ".", vbExclamation
Exit Sub
End If
Set Cell = .FindNext(Cell)
Loop While Not Cell Is Nothing And firstcell <> Cell.Address
End If
End With
End Sub

关于vba - 使用 find 方法查找下一个可用的空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45258616/

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