Вопрос или проблема
Я хочу сохранить в файл (CSV или простой текстовый файл) выборку отфильтрованных ячеек.
Если я пробую свой код или другой код, он также берет нефильтрованные ячейки.
Это возможно?
Sub EstraiTabellaInFileTesto()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim testo As String
Dim percorsoFile As String
Dim FSO As Object
Dim fileTesto As Object
' Установите активный лист
Set ws = ActiveSheet
' Попросите пользователя выбрать диапазон
On Error Resume Next
Set rng = Application.InputBox("Выберите диапазон ячеек для экспорта:", Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Операция отменена.", vbExclamation
Exit Sub
End If
' Попросите путь к текстовому файлу
percorsoFile = Application.GetSaveAsFilename(FileFilter:="Текстовые файлы (*.txt), *.txt")
If percorsoFile = "Falso" Then
MsgBox "Операция отменена.", vbExclamation
Exit Sub
End If
' Создайте текст для экспорта
testo = ""
For Each cell In rng
If Not IsError(cell) Then
testo = testo & cell.Value & vbTab
End If
If cell.Column = rng.Columns(rng.Columns.Count).Column Then
testo = testo & vbCrLf
End If
Next cell
' Запишите текст в файл
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fileTesto = FSO.CreateTextFile(percorsoFile, True)
fileTesto.Write testo
fileTesto.Close
MsgBox "Экспорт успешно завершен!", vbInformation
End Sub
Извините за итальянский текст в моем коде.
Пока
Ответ или решение
Для того чтобы извлечь отфильтрованные данные из Excel и сохранить их в файл (CSV или простой текстовый файл), важно понять, как правильно работать с фильтрованными данными в Excel с использованием VBA (Visual Basic for Applications). Вы сталкиваетесь с проблемой, что ваш код сохраняет значения всех ячеек, а не только отфильтрованных. Давайте рассмотрим, как можно это исправить и достичь вашей цели.
Теория
Когда вы работаете с фильтром в Excel, отображаются только те строки, которые соответствуют критериям фильтрации, однако вся информация в ячейках (включая скрытые строки) все еще присутствует в рабочем диапазоне. VBA по умолчанию обрабатывает все ячейки, включая скрытые, что не является желаемым поведением в вашем случае. Чтобы исправить это, необходимо использовать свойства и методы, которые позволяют выбрать только видимые ячейки.
Пример
Ваша задача – модифицировать код таким образом, чтобы он экспортировал только видимые (не скрытые) ячейки. Вот пример, как можно это сделать:
Sub EstraiTabellaInFileTestoFiltrata()
Dim ws As Worksheet
Dim rng As Range
Dim rngVisible As Range
Dim cell As Range
Dim testo As String
Dim percorsoFile As String
Dim FSO As Object
Dim fileTesto As Object
' Установите активный лист
Set ws = ActiveSheet
' Запросить у пользователя выбор диапазона
On Error Resume Next
Set rng = Application.InputBox("Seleziona l'intervallo di celle da esportare:", Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Operazione annullata.", vbExclamation
Exit Sub
End If
' Получить только видимые ячейки из выделенного диапазона
Set rngVisible = rng.SpecialCells(xlCellTypeVisible)
' Запросить путь к файлу
percorsoFile = Application.GetSaveAsFilename(FileFilter:="File di testo (*.txt), *.txt")
If percorsoFile = "Falso" Then
MsgBox "Operazione annullata.", vbExclamation
Exit Sub
End If
' Создать текст для экспорта
testo = ""
For Each cell In rngVisible
If Not IsError(cell) Then
testo = testo & cell.Value & vbTab
End If
If cell.Column = rngVisible.Columns(rngVisible.Columns.Count).Column Then
testo = testo & vbCrLf
End If
Next cell
' Записать текст в файл
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fileTesto = FSO.CreateTextFile(percorsoFile, True)
fileTesto.Write testo
fileTesto.Close
MsgBox "Esportazione completata con successo!", vbInformation
End Sub
Применение
-
Рабочий лист и диапазон: Убедитесь, что вы находитесь на нужном листе и у вас установлен корректный диапазон ячеек для экспорта. В данном случае вы используете
InputBox
для выбора нужного диапазона. -
Фильтрация видимых ячеек: Ключевым моментом является использование свойства
SpecialCells(xlCellTypeVisible)
, которое позволяет выделить только видимые ячейки из выбранного диапазона (rng
). Это помогает обойти ограничение VBA, который по умолчанию обрабатывает все ячейки, независимо от того, скрыты они или нет. -
Запись в файл: Вы используете
FileSystemObject
для создания и записи данных в текстовый файл. Убедитесь, что у вас корректно заполнен путь к файлу и он имеет нужное расширение (например,.txt
или.csv
в зависимости от ваших требований). -
Обработка ошибок: Код включает обработку ошибок для ввода диапазона и пути сохранения файла. Это важно для обеспечения работоспособности и устойчивости скрипта.
-
Проверка и отладка: Перед запуском макроса убедитесь, что ваши данные в Excel действительно отфильтрованы согласно необходимым критериям. Это гарантирует, что видимые данные будут извлечены и сохранены согласно вашим ожиданиям.
Эта методология поможет вам экспортировать только отфильтрованные строки в Excel, предоставляя организованный и четкий подход к решению вашей задачи. Убедитесь, что все параметры, такие как диапазоны и способы фильтрации, установлены правильно, чтобы избежать несанкционированного экспорта данных.