Я работаю над сценарием VBA, чтобы разрешить манипулирование и экспорт ряда рабочих листов в виде файлов csv из рабочей книги Excel. Я хотел бы иметь возможность экспортировать список указанных листов в виде CSV-файлов в место сохранения, которое можно выбрать, кроме того, любая ячейка в определенном столбце, которая является пустой, но может содержать формулу, должна иметь всю строка удалена Приведенный ниже скрипт - это то, что у меня есть в данный момент, и кажется, что оно работает до определенного момента, но есть три основных вопроса:
В строке ниже будут удалены строки, если ячейка в столбце A действительно пуста, т. Е. Не содержит формулу, но не работает при наличии формулы: Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Перемещение по листам неопрятно, но функционально, есть ли способ использовать список именованных листов, чтобы сделать скрипт более лаконичным?
В идеале место сохранения также можно выбрать из диалогового окна выбора каталога файлов. Любые предложения о том, как этого добиться?
Большое спасибо заранее.
Sub createCSVfiles()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Declare and set variables
Dim wb1 As Workbook, ws1 As Worksheet
Dim wbname As String, i As Integer
Set wb1 = ThisWorkbook
'Cycle through sheets
For i = 1 To Worksheets.Count
wbname = Worksheets(i).Name
'Create Sheet1.csv
If InStr(1, (Worksheets(i).Name), "Sheet1", vbTextCompare) > 0 Then
Worksheets(i).Copy
Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
ActiveWorkbook.SaveAs Filename:="C:\Users\forename.surname\Desktop\export\" & ActiveSheet.Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wb1.Activate
End If
'Create Sheet2.csv
If InStr(1, (Worksheets(i).Name), "Sheet2", vbTextCompare) > 0 Then
Worksheets(i).Copy
ActiveWorkbook.SaveAs Filename:="C:\Users\forename.surname\Desktop\export\" & ActiveSheet.Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wb.Activate
End If
Next i
'Clean
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub