Доброго времени суток
долго очень собирал обработчик файлов (к сожалению могу только пытаться использовать найденные макросы и править их для собственных нужд). Так и сейчас. В примере файл "Обработка файлов Excel", который перебирает все файлы в папке "Остаток" и вставляет туда модуль с пользовательской функцией для определения уровня строки в обрабатываемых файлах (для примера вложил файл "Файл для обработки" (а так их много, но они однотипные). Проблема в следующем: нужно чтобы пользовательская функция вставлялась в столбец А с ячейки А4 до последней не пустой строки которая определяется по столбцу В (то есть если функцию вставить в А4 , то формула должна быть в ней =УРОВЕНЬСТРОКИ(В4) и так до последней строки в столбце B.)
Помогите пожалуйста.
долго очень собирал обработчик файлов (к сожалению могу только пытаться использовать найденные макросы и править их для собственных нужд). Так и сейчас. В примере файл "Обработка файлов Excel", который перебирает все файлы в папке "Остаток" и вставляет туда модуль с пользовательской функцией для определения уровня строки в обрабатываемых файлах (для примера вложил файл "Файл для обработки" (а так их много, но они однотипные). Проблема в следующем: нужно чтобы пользовательская функция вставлялась в столбец А с ячейки А4 до последней не пустой строки которая определяется по столбцу В (то есть если функцию вставить в А4 , то формула должна быть в ней =УРОВЕНЬСТРОКИ(В4) и так до последней строки в столбце B.)
Помогите пожалуйста.
| Код |
|---|
'//Процедура обрабатывает одинаковым способом все файлы Excel в каталоге
Sub TestProc()
Dim FSO As FileSystemObject
Dim sourceFolder As Folder
Dim fileItem As File
Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
Dim sModuleName As String, sFullName As String
Dim sProcLines As String
Dim lLineNum As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set sourceFolder = FSO.GetFolder("C:\Users\Admin\Desktop\Остатки")
For Each fileItem In sourceFolder.Files
Dim currentBook As Workbook
Dim source As Worksheet
Set currentBook = Workbooks.Open(fileItem.Path, False, False)
'добавляем новый стандартный модуль в активную книгу
Set objVBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
'получаем ссылку на коды модуля
Set objCodeMod = objVBComp.CodeModule
'узнаем количество строк в модуле
'(т.к. VBA в зависимости от настроек может добавлять строки деклараций)
lLineNum = objCodeMod.CountOfLines + 1
'текст всставляемой процедуры
sProcLines = "Function УРОВЕНЬСТРОКИ(ЯЧЕЙКА As Range) As Long" & vbCrLf & _
"УРОВЕНЬСТРОКИ = ЯЧЕЙКА.Rows(1).OutlineLevel" & vbCrLf & _
"End Function"
'вставляем текст процедуры в тело нового модуля
objCodeMod.InsertLines lLineNum, sProcLines
Set source = currentBook.Sheets(1)
Range("A4").FormulaR1C1 = "=УРОВЕНЬСТРОКИ()"
'Columns("A:A").Select
'Selection.Copy
' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.DisplayAlerts = False
currentBook.Close True
Application.DisplayAlerts = True
Set source = Nothing
Set currentBook = Nothing
Next
End Sub
|