如何修改VBA宏仅导出CSV中有数据的行?
解决VBA导出CSV时过滤空白行(A/B列为必填)的问题
原代码直接复制工作表已用区域,会包含A、B列无数据的无效行。以下是修改后的代码,仅保留A、B列均有内容的行后再导出CSV:
Sub ExportAsCSV() Dim MyFileName As String Dim CurrentWB As Workbook, TempWB As Workbook Dim dtToday As String Dim lastRow As Long, i As Long dtToday = Format(Date, "MM.DD.YY") Set CurrentWB = ActiveWorkbook CurrentWB.ActiveSheet.UsedRange.Copy Set TempWB = Application.Workbooks.Add(1) With TempWB.Sheets(1).Range("A1") .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats End With ' 过滤A、B列无数据的行 lastRow = TempWB.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row ' 从最后一行倒序遍历,避免删除行导致索引错乱 For i = lastRow To 2 Step -1 ' 假设第1行是表头,若表头行不同可修改起始值 ' 去除前后空格后判断A/B列是否为空 If Trim(TempWB.Sheets(1).Cells(i, "A").Value) = "" Or Trim(TempWB.Sheets(1).Cells(i, "B").Value) = "" Then TempWB.Sheets(1).Rows(i).Delete End If Next i MyFileName = CurrentWB.Path & "\" & "ARMs Upload " & dtToday & ".csv" 'Optionally, comment previous line and uncomment next one to save as the current sheet name 'MyFileName = CurrentWB.Path & "\" & CurrentWB.ActiveSheet.Name & ".csv" Application.DisplayAlerts = False TempWB.SaveAs Filename:=MyFileName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True TempWB.Close SaveChanges:=False Application.DisplayAlerts = True End Sub
关键修改说明:
- 新增行遍历逻辑:通过
lastRow获取临时表的有效行数,倒序遍历避免删除行后索引跳行 - 严格空白判断:用
Trim()去除单元格前后空格,确保仅含空格的单元格被判定为空白;只要A/B列任意一列无内容,就删除该行 - 表头兼容:默认从第2行开始过滤,若你的表头不在第1行,可调整循环起始数字
内容的提问来源于stack exchange,提问作者user21683157
相关产品推荐
相关产品推荐

