Приветствую. Будет создан файл-шаблон. Из этого файла нужно скопировать все непустые ячейки в другой файл. Более примитивно. В первом документе-шаблоне заполнены ячейки A1 = "Привет" и С8="Пока". При выполнении макроса в другой xls файл в лист 1 в ячейку A1 вносится "Привет" а в C8 "Пока".Остальные ячейки второго файла должны остаться без изменений.
Предполагаемые пути решения: Запускать цикл по документу-шаблону и находить в нём непустые ячейки Пока только ограничил диапозон поиска:
Хочу в этом диапазоне произвести поиск и создать массив с номерами всех заполненных ячеек. Нужен синтаксис. Не знаю какой создать массив для номеров, не знаю каким условием проверять. Пока придумал только:
Цитата
For i = 1 To lLastCol For j = 1 To lLastRow If Len(......
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос? Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву? Нужны примеры синтаксиса, как это реализовывается на VBA?
Приветствую. Будет создан файл-шаблон. Из этого файла нужно скопировать все непустые ячейки в другой файл. Более примитивно. В первом документе-шаблоне заполнены ячейки A1 = "Привет" и С8="Пока". При выполнении макроса в другой xls файл в лист 1 в ячейку A1 вносится "Привет" а в C8 "Пока".Остальные ячейки второго файла должны остаться без изменений.
Предполагаемые пути решения: Запускать цикл по документу-шаблону и находить в нём непустые ячейки Пока только ограничил диапозон поиска:
Хочу в этом диапазоне произвести поиск и создать массив с номерами всех заполненных ячеек. Нужен синтаксис. Не знаю какой создать массив для номеров, не знаю каким условием проверять. Пока придумал только:
Цитата
For i = 1 To lLastCol For j = 1 To lLastRow If Len(......
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос? Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву? Нужны примеры синтаксиса, как это реализовывается на VBA?Sputnik
Сообщение отредактировал Sputnik - Суббота, 14.07.2018, 05:42
Добрый день.Да, делал через Select, SpecialCells, и Pastle. Мне не понравилось, почему-то вставляется весь диапазон а не только заполненные ячейки.Да время выполнения долгое.
Добрый день.Да, делал через Select, SpecialCells, и Pastle. Мне не понравилось, почему-то вставляется весь диапазон а не только заполненные ячейки.Да время выполнения долгое.Sputnik
Встроенный макрос в Ваш пример позволяет перебирать все файлы в каталоге что ли? Попробуйте просто удалить раздел "Option Explicit" из тела макроса, дальше разбираться лениво.
Встроенный макрос в Ваш пример позволяет перебирать все файлы в каталоге что ли? Попробуйте просто удалить раздел "Option Explicit" из тела макроса, дальше разбираться лениво.Exo
А что такое вестибюль? А что такое широкополосный интернет?
Сообщение отредактировал Exo - Суббота, 14.07.2018, 17:30
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос? Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву? Нужны примеры синтаксиса, как это реализовывается на VBA?
Если всё же следовать Вашему запросу, Синтаксис не сложный. Самое главное - должен быть уже создан и открыт "Новый файл.xlsm" НО! НЕ ОН должен быть активным, а та книга. откуда пытаетесь перенести:
[vba]
Код
Sub Макрос1()
LastRow = Cells.SpecialCells(xlLastCell).Row LastCol = Cells.SpecialCells(xlLastCell).Column WB = ActiveWorkbook.Name 'присваиваем имя текущей книге WB1 = "Новый файл.xlsm" 'присваиваем имя другой открытой книге, в которую надо перенести. "Новый файл@ - это имя уже открытой книги" For i = 1 To LastRow For j = 1 To LastCol If Workbooks(WB).Sheets("Лист1").Cells(i, j).Value <> Empty Then Workbooks(WB1).Sheets("Лист1").Cells(i, j).Value = Workbooks(WB).Sheets("Лист1").Cells(i, j).Value End If Next j Next i
Также интересует вопрос по заполнению листа. Если при открытии второго документа активным становится он, то как обратиться к документу-шаблону из которого запущен макрос? Может объявить его вначале как глобальную переменную, а потом копировать из него значения по сформированному массиву? Нужны примеры синтаксиса, как это реализовывается на VBA?
Если всё же следовать Вашему запросу, Синтаксис не сложный. Самое главное - должен быть уже создан и открыт "Новый файл.xlsm" НО! НЕ ОН должен быть активным, а та книга. откуда пытаетесь перенести:
[vba]
Код
Sub Макрос1()
LastRow = Cells.SpecialCells(xlLastCell).Row LastCol = Cells.SpecialCells(xlLastCell).Column WB = ActiveWorkbook.Name 'присваиваем имя текущей книге WB1 = "Новый файл.xlsm" 'присваиваем имя другой открытой книге, в которую надо перенести. "Новый файл@ - это имя уже открытой книги" For i = 1 To LastRow For j = 1 To LastCol If Workbooks(WB).Sheets("Лист1").Cells(i, j).Value <> Empty Then Workbooks(WB1).Sheets("Лист1").Cells(i, j).Value = Workbooks(WB).Sheets("Лист1").Cells(i, j).Value End If Next j Next i
Глубоко не вникал, но на поверхности надо так: [vba]
Код
Sub Get_All_File_from_SubFolders() Dim r As Range Dim FSO As Object, Folder As Object, File As Object Dim ws As Worksheet Dim sFolder As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder(sFolder) 'тут путь к своей папке For Each File In Folder.Files If InStr(File.Name, ".xls") > 0 Then Set ws = Workbooks.Open(File.Path).Sheets(1) Get_Current_Range ws ws.Parent.Close -1 End If Next Set Folder = Nothing Set FSO = Nothing MsgBox "Готово!" Exit Sub End Sub
Sub Get_Current_Range(f As Worksheet) Dim c As Range Dim i As Integer Dim j As Integer
ReDim arrOfNumber(1, 0) For i = 1 To lLastRow For j = 1 To lLastCol If Len(f.Cells(i, j).Value) Then ReDim Preserve arrOfNumber(1, k) arrOfNumber(0, k) = i 'row arrOfNumber(1, k) = j 'colum k = k + 1 End If Next j Next i k = k - 1 MsgBox "Всего " & k End Sub
[/vba]
Глубоко не вникал, но на поверхности надо так: [vba]
Код
Sub Get_All_File_from_SubFolders() Dim r As Range Dim FSO As Object, Folder As Object, File As Object Dim ws As Worksheet Dim sFolder As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Set FSO = CreateObject("Scripting.FileSystemObject") Set Folder = FSO.GetFolder(sFolder) 'тут путь к своей папке For Each File In Folder.Files If InStr(File.Name, ".xls") > 0 Then Set ws = Workbooks.Open(File.Path).Sheets(1) Get_Current_Range ws ws.Parent.Close -1 End If Next Set Folder = Nothing Set FSO = Nothing MsgBox "Готово!" Exit Sub End Sub
Sub Get_Current_Range(f As Worksheet) Dim c As Range Dim i As Integer Dim j As Integer
ReDim arrOfNumber(1, 0) For i = 1 To lLastRow For j = 1 To lLastCol If Len(f.Cells(i, j).Value) Then ReDim Preserve arrOfNumber(1, k) arrOfNumber(0, k) = i 'row arrOfNumber(1, k) = j 'colum k = k + 1 End If Next j Next i k = k - 1 MsgBox "Всего " & k End Sub
Я перепутал. Давно за Экс не садился) 12 это видимые. Надо 2 + потом еще формулы -4123 можно через Union. Но это если данные расположены непредсказуемо. Обычно же решение попроще.
Я перепутал. Давно за Экс не садился) 12 это видимые. Надо 2 + потом еще формулы -4123 можно через Union. Но это если данные расположены непредсказуемо. Обычно же решение попроще.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728