首页 > 解决方案 > 检查用户输入是否已经存在于第 1 行的填充单元格中

问题描述

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

我很确定我必须使用循环和 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

标签: excelvba

解决方案


欢迎来到 SO。

看起来你几乎明白了......问题在于你使用 Range 对象的方式:

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

如果需要,请Range 在此处阅读更多信息。请参阅下面如何使用Cells来实现相同的目的:

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

PS:总是很好地突出显示错误所在的行,但我认为这是出错的地方。


推荐阅读