ActiveCell.End.next的问题

时间:2014-06-17 17:16:59

标签: excel-vba syntax compiler-errors vba excel

我在VB中为我的列重组程序编写比较器函数。该程序将采用一张表,根据参考表重新组织它的列。我目前正在努力解决的问题是:假设,如果要重新组织的工作表中的列(在参考表中)不存在怎么办?如果我希望我的所有表格都是统一的,我就不能删除整个列。所以我打算做的是创建名称给定的列。

Alternative = InputBox(Sheet2Header & _
" not found. Please enter the name of the column you would like to substitute " _
& "Or Press Cancel to Create a new Column to fill in the gap.")
Do
    If Alternative = "" Then
        Set comparator = ActiveCell.End(xlToRight).Next
        comparator.Activate
        ActiveCell.Value = Sheet2Header
        Exit Function
    End If
    With Rows(1)
        Set found = .Find(what:=Alternative, After:=Cells(1, 1), lookat:=xlWhole)
    End With
    If found Is Nothing Then
        Alternative = InputBox("Column Name incorrect, Try again")
    Else: Exit Do
    End If
Loop

这是我的Do循环。如果要排序的工作表中不存在列名,它会要求您使用自己的列名写入并查看工作表中是否存在该列名称(例如,员工ID可能列为PersonID,因此它解释了那个)

如果你按下取消,它应该转到最后一列。下一个(第一个空格)并将返回范围设置为等于该单元格,插入值,然后退出该函数。

我遇到的问题是:     设置比较器= ActiveCell.End(xlToRight).Next 它适用于第一列不存在的情况,它适用于第二列本身不存在,但一旦它到达第三列它就会给我:

Run-time error '1004'
Microsoft Excel cannot find the data you're searching for.

(或该机器人的机器人)

If you are certain the data exists in the current sheet, check what 
you typed and try again.

我很抱歉文字的墙,但我想尽可能详细地给你一些帮助我解决这个问题的细节。有人有什么想法吗?

编辑:我解决了问题

我不需要再解决这个问题,我想通了。如果其他人遇到类似问题并且可以从我的努力中学习,我不会删除它。如果您的activeCell是ActiveCell.End(xlToRight),那么即使作为参考,您也无法声明ActiveCell.End(xlToRight)。所以我做的是添加了一个if子句:

If Alternative = "" Then
    If ActiveCell <> Cells(1, 1).End(xlToRight) Then
        ActiveCell.End(xlToRight).Select
    End If
    Set comparator = ActiveCell.Next
    comparator.Activate
    ActiveCell.Value = Sheet2Header
    Exit Function
End If

并将比较器设置为等于ActiveCell.Next

0 个答案:

没有答案