Excel 宏不会删除所有空白单元格

Excel 宏不会删除所有空白单元格,excel,excel-2010,vba,Excel,Excel 2010,Vba,这是一个较长的查询,因为我包含了失败的代码 问题是:当我将文本文件导入excel后,我的工作表中包含许多“空白”单元格。我以前在其他地方成功地使用过下面的代码,但这次对我不起作用 Range("b1:AZ60").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete shift:=xlToLeft 我在网上搜索了一下,在下面找到了一些建议的解决方案。在上面的代码之前,我试着运行下面4段代码中的每一段,以清

这是一个较长的查询,因为我包含了失败的代码

问题是:当我将文本文件导入excel后,我的工作表中包含许多“空白”单元格。我以前在其他地方成功地使用过下面的代码,但这次对我不起作用

Range("b1:AZ60").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete shift:=xlToLeft
我在网上搜索了一下,在下面找到了一些建议的解决方案。在上面的代码之前,我试着运行下面4段代码中的每一段,以清除假定空白单元格的内容,但到目前为止没有任何效果

第一-----------------------------

 Set rng = Intersect(Selection, Selection.Parent.UsedRange)

For Each C In rng
   If Trim(C) = "" Then
   C.ClearContents
   End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
    If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
   If IsEmpty(C) Then
   C.Delete shift:=xlToLeft
   Else
   ActiveCell.Select
   End If
Next C
我已经用c值替换了上面的饰件,但什么都没有

If C.Value <> "" Then
三号-------------------------

 Set rng = Intersect(Selection, Selection.Parent.UsedRange)

For Each C In rng
   If Trim(C) = "" Then
   C.ClearContents
   End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
    If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
   If IsEmpty(C) Then
   C.Delete shift:=xlToLeft
   Else
   ActiveCell.Select
   End If
Next C
4号-------------------

 Set rng = Intersect(Selection, Selection.Parent.UsedRange)

For Each C In rng
   If Trim(C) = "" Then
   C.ClearContents
   End If
Next C
For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
    If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents
Next
For Each C In rng
   If IsEmpty(C) Then
   C.Delete shift:=xlToLeft
   Else
   ActiveCell.Select
   End If
Next C
最后,我找到了这个干净的函数,但这似乎不起作用

Set rng = Intersect(Selection, Selection.Parent.UsedRange)

For Each C In rng
    If Not IsError(C) Then
        C.Value = MEGACLEAN(C)
    End If
Next C
              '
              '
              '
End Sub
-----------------------------------------
Function MEGACLEAN(varVal As Variant)
Dim NewVal As Variant
If IsMissing(varVal) Then Exit Function
NewVal = Trim(varVal) 'remove spaces
NewVal = Application.WorksheetFunction.Clean(NewVal) 'remove most unwanted characters
NewVal = Application.WorksheetFunction.Substitute(NewVal, Chr(127), "") 'remove   
ASCII#127
NewVal = Application.WorksheetFunction.Substitute(NewVal, Chr(160), "") 'remove  
ASCII#160
MEGACLEAN = NewVal
End Function

也许这与我从中导入的文本文件有关,但由于我仍有一些空白单元格,所有这些都不能令人满意地工作。任何帮助都将不胜感激

找出这些空白单元格中的字符

选择一个单元格并运行下面的GetSelectionContents宏:

Sub GetSelectionContents()
MsgBox sAnalyseString(selection)
End Sub

Function sAnalyseString(sSTR As String) As String
Dim lLoop As Long, sTemp As String

For lLoop = 1 To Len(sSTR)
    sTemp = sTemp & ", " & Asc(Mid(sSTR, lLoop, 1))
Next

sAnalyseString = Mid(sTemp, 2)

End Function
然后,一旦你有了神秘角色,在运行删除宏之前替换它

Activesheet.usedrange.Replace What:=chr32,Replacement:=,LookAt:=xlPart_ SearchOrder:=xlByColumns,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False

不确定我是否应该回答我自己的问题,但我把上面的代码弄乱了,并将其与我找到的一个mcaro混合,得出了以下代码,速度相当慢,但它似乎对我起到了作用。谢谢你的所有意见

 Set rangetext = Cells.SpecialCells( _
 xlCellTypeConstants, _
 xlTextValues)
 For Each rangesheet In rangetext
 If Trim(rangesheet.Value) = "" Then
 rangesheet.ClearContents
 End If
 Next
Set rangetext = Nothing
Set rangesheet = Nothing




 Range("b1:AZ60").Select
 Set rng = Intersect(Selection, Selection.Parent.UsedRange)
 For Each C In rng
   If IsEmpty(C) Then
   C.FormulaR1C1 = "=0"
   If C.Value = 0 Then
   C.ClearContents
   C.Select
   Selection.SpecialCells(xlCellTypeBlanks).Select
   Selection.Delete shift:=xlToLeft
  End If

  End If
 Next C

你能张贴你的文本文件的样本吗?还是一个Excel文件的样本,包括空白的CysOR,你是否已经尝试进入空白的单元格中,看看里面的字符是什么导致它们出现空白,但不是吗?我打赌有一个回车会把事情搞糟。试着在空白细胞上替换掉CaReige ReutsChink细胞,看看它们是否真的与LeRangeA1在即时窗口中。如果结果不是零,则表示单元格并非真正为空。如果要检查实际文本,请将i=1到lenrangeA1的代码设置为:?ascmidrangeA1,i,1;;:下一步将向您展示字符的ascii值希普·皮尔森在他的网站上有一个有用的插件,名为,它将标记charactersHi@nutsch。我试过你的密码。Msgbox对一些细胞没有报告,而对其他细胞则报告了一系列的32秒。我发现32是一个空格的ASCII符号。我认为修剪功能可以处理空间?