VBA excell-如果循环中的其他项不存在';我不能按我需要的那样工作

VBA excell-如果循环中的其他项不存在';我不能按我需要的那样工作,excel,vba,Excel,Vba,我正在设置一个简单的表单,其中包含大约15个字段,这些字段最后被复制并保存在我的数据库中(相同的excel文件,但单独的电子表格)。然后,我需要设计一个程序,使我能够修改现有的记录。 我已经创建了一个可以将数据库中的所有数据回调到表单中,以便对其进行修改并保存。它工作得很好,但我真的不知道在表中不存在搜索记录的情况下,何时将ELSE放在该案例中 Public Sub amend() Dim spec_number As Long Dim licznik As Long Dim x As Long

我正在设置一个简单的表单,其中包含大约15个字段,这些字段最后被复制并保存在我的数据库中(相同的excel文件,但单独的电子表格)。然后,我需要设计一个程序,使我能够修改现有的记录。 我已经创建了一个可以将数据库中的所有数据回调到表单中,以便对其进行修改并保存。它工作得很好,但我真的不知道在表中不存在搜索记录的情况下,何时将ELSE放在该案例中

Public Sub amend()
Dim spec_number As Long
Dim licznik As Long
Dim x As Long
Dim specyfikacje As Worksheet
Dim formularz As Worksheet

Set specyfikacje = Sheets("specifications")
Set formularz = Sheets("form")

spec_number = formularz.Range("b4").Value

If spec_number = "" Then
    MsgBox "Type the specification number in the designated field: B4"
Else
    licznik = 2
    x = 2

    Do Until (specyfikacje.Range("A" & licznik).Value = "") = True
        licznik = licznik + 1
    Loop

    Do Until x > licznik
        If spec_number = specyfikacje.Range("a" & x).Value Then
            formularz.Range("b6") = specyfikacje.Range("b" & x).Value
            formularz.Range("b7") = specyfikacje.Range("c" & x).Value
            formularz.Range("b8") = specyfikacje.Range("d" & x).Value
            formularz.Range("b9") = specyfikacje.Range("e" & x).Value
            formularz.Range("b10") = specyfikacje.Range("f" & x).Value
            formularz.Range("b11") = specyfikacje.Range("g" & x).Value
            formularz.Range("b12") = specyfikacje.Range("h" & x).Value
            formularz.Range("b13") = specyfikacje.Range("i" & x).Value
            formularz.Range("b14") = specyfikacje.Range("j" & x).Value
            formularz.Range("b15") = specyfikacje.Range("k" & x).Value
            formularz.Range("b16") = specyfikacje.Range("l" & x).Value
            formularz.Range("b17") = specyfikacje.Range("m" & x).Value
            formularz.Range("b18") = specyfikacje.Range("n" & x).Value
            formularz.Range("b19") = specyfikacje.Range("o" & x).Value
            formularz.Range("b20") = specyfikacje.Range("p" & x).Value
            formularz.Range("b21") = specyfikacje.Range("q" & x).Value
            formularz.Range("b22") = specyfikacje.Range("r" & x).Value
            formularz.Range("b23") = specyfikacje.Range("s" & x).Value
        Else
            MsgBox "The product you typed in doesn't exist"
        End If
    x = x + 1
    Loop
End If
End Sub

我认为,如果您用以下代码替换代码,它应该可以正常工作:

Dim licznik As Long
Dim x As Long
Dim specyfikacje As Worksheet
Dim formularz As Worksheet

Set specyfikacje = Sheets("specifications")
Set formularz = Sheets("form")

spec_number = formularz.Range("b4").Value

If spec_number = "" Then
    MsgBox "Type the specification number in the designated field: B4"
Else

    licznik = specyfikacje.Cells(specyfikacje.Rows.Count, "A").End(xlUp).Row 'find the last row on Column A on Sheet specifications

    With specyfikacje.Range("A:A")
        Set Rng = .Find(What:=spec_number) 'search column A of specifications for the spec_number
            If Not Rng Is Nothing Then 'if found
                For x = 1 To 18
                    formularz.Range("b" & i + 5) = Rng.Offset(0, i).Value
                Next x
            Else
                MsgBox "The product you typed in doesn't exist"
            End If
    End With
End If
End Sub

那么你已经打印了代码并拍了照片了?@ashleedawg-我的评论真的不是一个聪明的人,我正在考虑一个场景,在这个场景中,打印代码并拍一张照片,然后将照片上传到计算机,而不是简单地复制+粘贴代码。我能想到的唯一一个场景是德语考试(没有什么针对德国人的,只是他们的IT考试是这样的)。@Vityata-好吧,我删除了我的smartass评论(只是开玩笑,对不起!:)-我不明白打印代码与问题有什么关系,但公平地说,首先,没有足够的信息让我理解这个问题。@ashleedawg-看看版本的历史+@Peter-哦,天哪,你真的打印、拍照并上传了你的代码?省得打字吗?但是啊,嗯,嗨!欢迎来到堆栈溢出!我知道你已经有了答案,但不管怎样,请花点时间查看以及和。(如果相关的话),所有这些都将帮助您提出问题,从而帮助我们帮助您解决这些问题!我认为,如果在i=1到18公式z.范围(“B”&i+5)=Rng.偏移量(0,i)的
内使用for循环,可读性会更好一些。取下一个i
@Marcucciboy2点,。。。谢谢更新了我的答案以反映您的评论:)