检查用户输入是否已存在于第1行的

时间:2019-05-23 14:22:07

标签: excel vba

我目前正在编写一个宏,以在所有工作表中插入新的列。它已经起作用了,这只是对其进行了微调。我希望我的宏检查在此之前的另一列中是否已经存在用户输入(以命名新列)。如果存在,我想弹出一个窗口,用户可以选择在其中创建新列或输入其他名称(返回InputBox)。

我很确定我必须使用循环和If分支,但是我不太确定它的精确程度。

第1行:

Do While ende = False
    Name = InputBox("Name der neuen Spalte")
    Anzahl_Col = Cells.CurrentRegion.Columns.Count

    For i = 1 To Anzahl_Col
        If InStr(1, ActiveSheet.Range(i, 1).Value, Name) > 0 Then
            Retry = MsgBox("Diese Spalte existiert bereits, trotzdem fortfahren?", vbOKCancel)
            If Retry = vbOK Then
                Exit For
            ElseIf Retry = vbCancel Then GoTo Line1

            End If
        Else
            Exit For
        End If
    Next i

        If StrPtr(Name) = 0 Then
            MsgBox ("Abgebrochen!")
            Exit Sub

        ElseIf Name = "" Then
            MsgBox ("Bitte etwas eingeben")

        Else
            Exit Do

        End If
Loop

预期结果

用户选择一个名称,如果该名称已经存在,则会询问他是否要继续还是输入另一个名称。

实际结果

runtime error 1004 application or object-defined error

1 个答案:

答案 0 :(得分:0)

欢迎来到。

您似乎快懂了...问题出在使用Range对象的方式上:

If InStr(1, ActiveSheet.Range(i, 1).Value, Name) > 0 Then

根据需要详细了解Range here。请在下面查看如何使用Cells来实现相同的目的:

If InStr(1, ActiveSheet.Cells(1, i).Value, Name) > 0 Then

PS:总是突出显示错误所在的行也总是很好,但是我认为那是哪里出错了。