2012-10-30 85 views
1

这是一个冗长的查询,因为我包含失败的代码。宏不会删除所有空白单元格

问题:当我完成将文本文件导入为excel时,我的工作表包含一些“空白”单元。我已经在其他地方成功地使用了下面的代码,但这次它不适合我。

Range("b1:AZ60").Select 
Selection.SpecialCells(xlCellTypeBlanks).Select 
Selection.Delete shift:=xlToLeft 

我搜索了网页,发现了一些建议的解决方案(如下)。我试过在上面的代码之前运行下面4个代码段的每一个,以清除所谓的空白单元格的内容,但到目前为止没有任何工作。

Number 1 -------------------------------------------- -------------

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

For Each C In rng 
    If Trim(C) = "" Then 
    C.ClearContents 
    End If 
Next C 

我已经更换了微调以上c.value但没有

If C.Value <> "" Then 

2号-------- ------------------------------------------

For Each aCell In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants) 
    If Not aCell.Value Like "*[! ]*" Then aCell.ClearContents 
Next 

Number 3 ------------------------------------------- ------

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 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 

也许这是值得做的,我从导入的文本文件,但这些都没有满意的工作,因为我仍然有一些空白单元格。任何帮助将非常感激!!

+1

你可以发布你的文本文件的样本吗? –

+0

或包含“空白”单元格的excel文件的示例 – nutsch

+1

或者您是否尝试过进入任何空白单元格以查看导致它们显示空白但不是的字符? –

回答

0

不知道如果我应该任何回答我的问题是这样,但我的代码,我上面有位搞砸周围,并用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 
0

找出你在这些“空白”单元中有哪些字符。

选择一个单元格,并运行下面的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:=chr(32), Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False

+0

Chip Pearson在他的网站上有一个名为[CellView](http://www.cpearson.com/excel/cellview.aspx)的有用插件,它将标记字符 – brettdj

+0

Hi @nutsch。我试过你的代码。 Msgbox没有报告任何细胞和一系列的32个为其他人。 32我发现是一个空间的ASCII符号。我认为trim函数可以处理空格吗? – Brackers