我有一个excel文件,其中的所有内容都通过宏进行控制。有时我会将文件从一张纸移到另一张纸,并将这些数据存储为待办事项。
然后我尝试选择空白单元格,如果为true,则删除该行。但是单元格显示为空白,但不是。
因此,我将其从工作表A移到工作表B。工作表A中的数据正在移动并粘贴为工作表B中的值。要移动的数据有两列:列A保留项ID,列B保留日期当项目停止存在时(停止日期)。
在工作表A中,通过一个简单的公式(= + IF(O5 <>“”; O5; N5))填充停产日期,如果没有新的停产日期输入,请从积压中获取。
现在,如果既没有新的“停止日期”输入,也没有任何积压,则该单元格为空白。
当宏将工作表A中的数据复制并粘贴(作为值)到工作表B中时,列B填充有空白单元格(按预期),但由于缺少更好的用词,因此存在一些看不见的内容。几乎就像将要格式化一样,或者遇到非ANSI看不见的隐藏字符时。
如果我选择任何一个空单元格并按Delete键,然后运行“转到特殊...”并空白,则该单元格将被该函数选中。
我正在使用此行删除空格:
Columns("B").SpecialCells(xlBlanks).EntireRow.Delete
这是我的代码段,用于复制/粘贴和处理“停止日期”部分:
Sheets("Dashboard").Select
Range("B3:Q400").Select
Selection.Copy
Sheets("CeaseDate").Select
Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("G:T").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Range("F1:G1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("F:G").Select
Selection.Delete Shift:=xlToLeft
Columns("B").SpecialCells(xlBlanks).EntireRow.Delete 'Remove rows that does not contain a Cease Date <--- This does not work since it wont treat the blank cells as blank
'Range converting to date format
Columns("B:B").Select
Selection.NumberFormat = "m/d/yyyy"
Columns("A:B").Select
ActiveSheet.Range("A:B").RemoveDuplicates Columns:=Array(1, 2), _
Header:=xlYes
Selection.End(xlUp).Select
答案 0 :(得分:1)
您还可以尝试删除格式。我已经遇到过几次了,它对我的代码很有效。此行将删除空白单元格中的所有格式。
Columns("B").SpecialCells(xlBlanks).EntireRow.ClearFormats
您还可以尝试在每个删除部分添加.clearformats函数。 因此,如果您有
sheet1.column("B").clearcontent
您可以添加
sheet1.column("B").clearcontent
sheet1.column("B").clearformats
答案 1 :(得分:1)
如果您有一个包含公式的单元格,但是该公式的值等于=""
,则它将显示为空白,并且在Excel中将显示COUNTBLANK
函数(或{{1 }}函数在VBA中的名称为“空白”,但WorksheetFunction.CountBlank
不会不是-因为SpecialCells(xlBlanks)
属性不是空白。
这是一个用于检索空白值在范围内的单元格的函数:
Range.Formula
像这样使用它:Private Function GetNullValues(ByVal Target As Range) As Range
Dim TestingArea As Range, TestingCell As Range
For Each TestingArea In Target.Areas 'Loop through Areas in Target
For Each TestingCell In TestingArea.Cells 'Loop through Cells in Area
If TestingCell.Value = "" Then 'If Cell looks Blank
If GetNullValues Is Nothing Then 'If first blank found
Set GetNullValues = TestingCell 'Start list
Else 'If not first blank
Set GetNullValues = Union(GetNullValues, TestingCell) 'Add to list
End If
End If
Next TestingCell, TestingArea 'This is the same as doing 2 Next lines
End Function
答案 2 :(得分:1)
因此我找到了解决方案,我无法解释为什么会出现问题,但显然至少从2003版开始,它就已经在Excel中发生了。
问题:当我复制单元格并使用paste-special-value时,显示为空白的单元格将无法通过=ISBLANK()
的测试并返回一个FALSE
值。但是,没有要复制的内容或要标记的内容。如果我选择了看似空白的单元格并按Delete或Backspace,则=ISBLANK()
现在将返回一个TRUE
值。
解决方案:
=ISBLANK()
测试我最初发现了这个(相当模糊的)解决方案here