Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If-Else语句仅适用于Excel VBA用户窗体中的最后一行数据_Excel_Vba_If Statement_Userform_Data Entry - Fatal编程技术网

If-Else语句仅适用于Excel VBA用户窗体中的最后一行数据

If-Else语句仅适用于Excel VBA用户窗体中的最后一行数据,excel,vba,if-statement,userform,data-entry,Excel,Vba,If Statement,Userform,Data Entry,我正在努力解决一些听起来很简单的问题,但是我的代码有问题 在文本框1中键入“序列号”时,如果序列号与工作表中“RMA”列中的现有字段匹配,则文本框2中的“RMA编号”将自动填充 如果不匹配,我希望textbox2清除或说“不匹配” 我做了If-Then-Else类型的代码,但它似乎只适用于目前的最后一个条目 我需要在我的代码中更改什么,以便它可以匹配所有条目,并在序列号不匹配时清除 'Autopopulate RMA# with Serial Number Private S

我正在努力解决一些听起来很简单的问题,但是我的代码有问题

在文本框1中键入“序列号”时,如果序列号与工作表中“RMA”列中的现有字段匹配,则文本框2中的“RMA编号”将自动填充

如果不匹配,我希望textbox2清除或说“不匹配”

我做了If-Then-Else类型的代码,但它似乎只适用于目前的最后一个条目

我需要在我的代码中更改什么,以便它可以匹配所有条目,并在序列号不匹配时清除

    'Autopopulate RMA# with Serial Number

     Private Sub SN_TextBox1_Change()


     Dim serial1_id As String
     serial1_id = UCase(Trim(SN_TextBox1.Text))
     lastrow = Worksheets("RMA Tracker").Cells(Rows.Count, 1).End(xlUp).Row


       For i = 1 To lastrow
          If UCase(Worksheets("RMA Tracker").Cells(i, 4).Value) = serial1_id Then
          RMA_TextBox1.Text = Worksheets("RMA Tracker").Cells(i, 1).Value
    
    
          Else
    
           RMA_TextBox1.Value = ""
   
    
    
          End If
    

       Next i


      End Sub



我认为您可以使用
Find()
方法来满足您的需求。下面的代码将从RMA列
(D:D)
中找到
TextBox1
值。如果找到匹配项,它将从
列A:A
返回值,用于将行匹配到
文本框2
。如果没有匹配项,它将显示
no match
消息至
TextBox2

Private Sub CommandButton1_Click()
Dim RMA As String
Dim Rng As Range

RMA = Me.TextBox1
    If Trim(RMA) <> "" Then
        With Sheets("RMA Tracker").Range("D:D") 'D:D for column 4
        Set Rng = .Find(What:=RMA, _
                     After:=.Range("A1"), _
                     Lookat:=xlWhole, _
                     LookIn:=xlFormulas, _
                     SearchOrder:=xlByRows, _
                     SearchDirection:=xlPrevious, _
                     MatchCase:=False)
            If Not Rng Is Nothing Then
                Me.TextBox2 = Rng.Offset(0, -3)
            Else
                Me.TextBox2 = "No Match"
            End If
        End With
     End If
End Sub
Private子命令按钮1\u单击()
作为字符串的Dim RMA
变暗Rng As范围
RMA=Me.TextBox1
如果修剪(RMA)“,则
第4列有表格(“RMA跟踪器”)。范围(“D:D”)'D:D
设置Rng=.Find(What:=RMA_
之后:=.范围(“A1”)_
看:=xlother_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
匹配案例:=假)
如果不是,那么Rng什么都不是
Me.TextBox2=发动机偏移量(0,-3)
其他的
Me.TextBox2=“不匹配”
如果结束
以
如果结束
端接头

在UserForm文本框中查找值
  • 要显示多个结果,必须在
    RMA_TextBox1
    的属性中将
    MultiLine
    设置为
    True
代码

Private Sub SN_TextBox1_Change()
    
    Const wsName As String = "RMA Tracker"
    Const FirstRow As Long = 1
    Const RMACol As Variant = "A"
    Const IdCol As Variant = "D"
    Const IfNot As String = "No Match"
    Dim wb As Workbook: Set wb = ThisWorkbook
    
    Dim ws As Worksheet: Set ws = wb.Worksheets(wsName)
    Dim LastRow As Long: LastRow = ws.Cells(ws.Rows.Count, IdCol).End(xlUp).Row
    
    Dim SerialID As String: SerialID = Trim(SN_TextBox1.Value)

    Dim i As Long, Result As String
    For i = FirstRow To LastRow
        If StrComp(ws.Cells(i, IdCol).Value, SerialID, vbTextCompare) = 0 Then
            If Result <> "" Then
                Result = Result & vbLf & ws.Cells(i, RMACol).Value
            Else
                Result = ws.Cells(i, RMACol).Value
            End If
        End If
    Next i
    
    If Result <> "" Then
        RMA_TextBox1.Value = Result
    Else
        RMA_TextBox1.Value = IfNot
    End If
    
End Sub
Private Sub-SN\u TextBox1\u Change()
Const wsName As String=“RMA跟踪器”
常量第一行长度=1
Const RMACol As Variant=“A”
Const IdCol As Variant=“D”
常量ifnotas String=“不匹配”
将wb设置为工作簿:设置wb=ThisWorkbook
将ws设置为工作表:设置ws=wb.Worksheets(wsName)
将LastRow变长:LastRow=ws.Cells(ws.Rows.Count,IdCol).End(xlUp).Row
作为字符串的Dim SerialID:SerialID=Trim(序号TextBox1.Value)
暗i为长,结果为字符串
对于i=第一行到最后一行
如果StrComp(ws.Cells(i,IdCol).Value,SerialID,vbTextCompare)=0,则
如果结果为“”,则
结果=结果、vbLf和ws.单元格(i、RMACol).值
其他的
结果=ws.Cells(i,RMACol).Value
如果结束
如果结束
接下来我
如果结果为“”,则
RMA_TextBox1.Value=结果
其他的
RMA_TextBox1.Value=IfNot
如果结束
端接头

这很有效!非常感谢你。我也感谢你的迅速答复。