现在有一个问题:就是选 定一个区域,查找区域内符合条件的单元格并删除单元格所在的列,我现在的解决方法如下:
n Error Resume Next'清除指定内容With ActiveSheet.UsedRange Application.ScreenUpdating = False
DoSelection.Find(What:=TextBox1.Text, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
       xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False _
        , MatchByte:=False, SearchFormat:=False).EntireColumn.Delete
 Loop Until Selection.Find(What:=TextBox1.Text) Is Nothing
 Application.ScreenUpdating = TrueEnd With
这样产生的问题是:删除一列后,后面的列会上移,如果上移的列也有符合条件的内容 ,那么上移的列也会删除,产生误删,如何能解决不删除 上移的列。

解决方案 »

  1.   

    选中区域后,ctrl + F,输入要查询的值,点击“查找全部”以后,查询框里会列出所有结果,ctrl + A能选中这些结果,全选以后,右键excel数据表里任意一个选中值->删除->整列看上去你一心想用代码实现,有的时候手工操作比代码要简单很多,如果条件允许还是不要强求了把do while改成for循环,从最后一列往第一列查找
    在最外层定义一个boolean类型的flag,默认为false,标识当前是否正在处理,可以用这个判断Worksheet_SelectionChange是手动触发还是代码触发
    触发Worksheet_SelectionChange时,如果flag=true,不执行代码,如果flag=false的话,把flag设置为true,并执行代码
    EXCEL VBA里涉及到单元格内容的遍历效率很低Dim exing As Boolean
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If exing = True Then Exit Sub
        exing = True
        Dim colIndex As Integer, rowIndex As Integer, colCount As Integer, rowCount As Integer
        colIndex = Selection.Column
        rowIndex = Selection.Row
        For i = (colIndex + colCount - 1) To colIndex Step -1
            'Range(Cells(rowIndex, i), Cells(rowIndex + rowCount - 1, i)).Find(...
        Next i
        exing = False
    End Sub