Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 След.
Расчет средневзвешенного значения %
 
Добрый день!

Мне нужно найти средневзвешенные/среднеинтегральные значения отклонений столбца D от столбца E в % за месяц и за год.
Подскажите, пожалуйста, какой формулой это можно сделать.

В идеале сделать что-то подобное, как в столбцах O и P с суммой
Изменено: Diatr - 06.11.2024 08:33:05
Замена в макросе обычной формулы на формулу массива
 
Hugo,   Попробовал написать в таком виде, но почему-то вылазит ошибка 400 и данные не вставляются

           ss = "=IFERROR(INDEX('[" & wbFrom.Name & "]Ф4'!$D$425:$AE$457,MATCH($D11,'[" & wbFrom.Name & "]Ф4'!$A$425:$A$457,0),MATCH('Справочник ГТП'!$F$7&G$9,'[" & wbFrom.Name & "]Ф4'!$D$422:$AE$422&'[" & wbFrom.Name & "]Ф4'!$D$423:$AE$423,0))," & """""" & ")"
           ss = Replace(ss, "Ф4", vMonth)
           rr.FormulaArray = ss
Замена в макросе обычной формулы на формулу массива
 
bigorq, теперь функция встает, но как ошибка
#ИМЯ?
т.е если у пользователей выбраны русские функции в excel, невозможно будет вставить формулу массива макросом?

Формула сейчас выглядит так, ровно также с английскими наименованиями встает в ячейки и вызывает ошибку

ss = "=IFERROR(INDEX('[" & wbFrom.Name & "]Ф4'!$D$425:$AE$457;MATCH($D11;'[" & wbFrom.Name & "]Ф4'!$A$425:$A$457;0);MATCH('Справочник ГТП'!$F$7&G$9;'[" & wbFrom.Name & "]Ф4'!$D$422:$AE$422&'[" & wbFrom.Name & "]Ф4'!$D$423:$AE$423;0));" & """""" & ")"
Изменено: Diatr - 26.07.2024 09:45:17
Замена в макросе обычной формулы на формулу массива
 
Artur B., если заменить только строку  rr.FormulaLocal = ss на  rr.FormulaArray = ss, то вылазит ошибка 404 и формула вообще не вставляется, ячейки остаются пустыми
Замена в макросе обычной формулы на формулу массива
 
Добрый день!

Мне нужно сложным поиском забирать данные из одного файла в другой, получилось это сделать только формулой массива, сейчас хочу вставлять эту формулу макросом, макрос готовый уже есть, но он вставляет ее в определенные ячейки как обычную формулу, т.е если я открою  файл и прожму ctrl+shift+enter, то появится корректное значение в ячейке.

Подскажите, пожалуйста, как мне поправить макрос, чтоб сразу вставлял данную формулу как формулу массива?

Формула в чистом виде
{=ИНДЕКС(Ф4!$D$425:$AE$457; ПОИСКПОЗ($D11;Ф4!$A$425:$A$475;0); ПОИСКПОЗ('Справочник ГТП'!$F$7&H$9; Ф4!$D$422:$AE$422&Ф4!$D$423:$AE$423; 0))}

Макрос для вставки
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Ф4")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("H11:I14")
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Ф4'!$D$425:$AE$457;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Ф4'!$A$425:$A$457;0);ПОИСКПОЗ('Справочник ГТП'!$F$7&H$9;'[" & wbFrom.Name & "]Ф4'!$D$422:$AE$422&'[" & wbFrom.Name & "]Ф4'!$D$423:$AE$423;0));" & """""" & ")"
            ss = Replace(ss, "Ф4", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub

Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Изменено: Diatr - 26.07.2024 08:45:47
Перенос данных листа из одной книги в другую макросом
 
Sanja, Спасибо за ответ, но файлов очень много, время затратно каждый раз открывать обе книги для вставки.
Просто в этом макросе уже учитывается у меня открытие/закрытие книг и сохранение
Перенос данных листа из одной книги в другую макросом
 
Добрый день! Есть макрос для вставки формулы с нескольких листов одной книги в несколько листов другой книге.
Подскажите, пожалуйста, что нужно исправить для вставки только с одного листа на такой же лист в другой книге?
Код
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Ф4","Ф5")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:I14, K11:W14, Y11:Z14,G22:I22, K22:W22, Y22:Z22,G27:I27, K27:W27, Y27:Z27,Y36:Z36,G36:I36, K36:W36, Y36:Z36")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Ф4'!$G$11:$Z$67;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Ф4'!$D$11:$D$67;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Ф4'!$G$9:$Z$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub
Перенос данных листа из одной книги в другую макросом
 
Добрый день! У меня есть готовый макрос для вставки формулы, копирующей информацию из одной книги в другую, макрос предназначался для массива данных, т.е было несколько однотипных листов, данные копировались с этих листов и вставлялись в другую книгу формулой.

Сейчас ситуация проще, нужно взять выбранные ячейки и вставить эти ячейки на лист с таким же названием, но в другую книгу, подскажите, пожалуйста, как нужно изменить мой макрос? или может у кого-то готовый уже есть.

В данном примере я пытался изменить вот этот фрагмент For Each vMonth In Array("Ф4") - раньше тут был массив листов
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Ф4")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:I14, K11:W14, Y11:Z14,G22:I22, K22:W22, Y22:Z22,G27:I27, K27:W27, Y27:Z27,Y36:Z36,G36:I36, K36:W36, Y36:Z36")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Ф4'!$G$11:$Z$67;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Ф4'!$D$11:$D$67;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Ф4'!$G$9:$Z$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub

Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function

Подсчет переходов в строке с нуля на значение
 
V, точно, ошибся в 3 строке)
Большое спасибо
Подсчет переходов в строке с нуля на значение
 
Добрый день!

Подскажите, пожалуйста, как посчитать в строке моменты перехода с числа на ноль и с нуля на число

В файле примере должно посчитаться так:
Строка 1 = 4
Строка 2 = 6
Строка 3 = 2
Предсказание по нескольким столбцам
 
МатросНаЗебре, Неправильный расчет получается, к примеру, вот задал число 170 из столбца D и выбрал 2 месяц. Ответ должен был получиться около 79
Предсказание по нескольким столбцам
 
Добрый день!

Нужно реализовать, чтоб вбивая значение столбца D(можно еще добавить значение месяца), находилось значение столбца C(используя прогнозирование/интерполяцию).
Но при этом нужно учесть столбец A/B c наименованием месяцев, т.к в летние периоды значение в столбце С становится ниже.

Попробовал выводить уравнение полинома, функцию ПРЕДСКАЗ, но работает некорректно в данном случае.

Подскажите, пожалуйста, как это можно сделать.
 
Изменено: Diatr - 08.11.2023 09:35:53
Как убрать перекрытие данных на гистограмме?
 
evgeniygeo, спасибо
Как убрать перекрытие данных на гистограмме?
 
на этом скриншоте используется гистограмма с накоплением, вот тут все цвета показываются точно как я этого хочу. Но тогда вопрос как изменить ось, чтоб значения были от минимального к максимальному значению столбца, без складывания всех трех столбцов (изменить естественно не в параметрах оси с -50 до 60, т.к в таком случае у меня обрежутся бары)  
Как убрать перекрытие данных на гистограмме?
 
evgeniygeo, в зависимости от столбцов, т.е я это явно выделяю. К примеру: для столбца 1 положительные числа светло-зеленые, отрицательные - светлокрасные. Для 2 столбца значения темно-зеленые и темно-красные
Как убрать перекрытие данных на гистограмме?
 
еще один пример из 3 столбцов, мне нужно чтоб 3 столбца из скриншота объединились в один бар, чтоб при этом столбец с наибольшим значением не перекрывал цвет с наименьшим значением. Ось у при этом не должна мне показывать сумму положительных/отрицательных чисел, а строиться по классике, со значениями из столбца с наибольшим значением
Изменено: Diatr - 17.08.2023 07:53:14
Как убрать перекрытие данных на гистограмме?
 
Добрый день!

Есть 2 столбца, на гистограмме нужно выделить значения этих столбцов разным цветом (отличие должно быть видно и для положительной, и для отрицательной части)

В моем файле есть 10 строк, для первых 7 данные совпали хорошо и можно увидеть какой результат я хочу получить. Для 8,9,10 происходит перекрытие, т.е столбец 2 полностью перекрывает выделенный другим цветом столбец 1.

Подскажите, пожалуйста, как это исправить. Гистограмма с накоплением не подойдет, т.к мне не нужна ось которая имеет суммированные значения столбцов
Потеря связей при копировании папки
 
Добрый день!

У меня лежат папки с файлами, имеющие такой путь O:\СИП\ПК\2023\(далее идут папки январь, февраль и т.д)
В данной папке с наименованием месяца находится много файлов и других папок, когда я копирую, к примеру, папку июнь и переименовываю ее на июль, то в половине файлов связи меняются на "июль", а в остальной половине файлов связи остаются старые, т.е июньские.

Вопрос: Почему так происходит? Можно ли как-то более грамотно получить новую переименованную папку с копированными из старой папки файлами, с автоматически обновленными связями.

Структура папок одинаковая, все файлы имеют одинаковые наименования
Нарастающий итог с несколькими условиями
 
Максим В., Павел с Востока \Ʌ/, большое спасибо! это то что нужно
Нарастающий итог с несколькими условиями
 
Максим В., ваша формула сейчас работает так же как и моя, т.е нарастающий итог работает корректно, но нужно добавить еще несколько условий по столбцам, т.е если я в столбце год поменяю значение с 2023 на 2022 для станции 45 и показателя Выработка  -всего, я должен увидеть Выработку  -всего именно для 2022 года.
Нарастающий итог с несколькими условиями
 
Добрый день!

У меня есть такая формула, считающая нарастающий итог(На Лист1 в ячейках D1 и D2 выбираем с какого по какой месяц должен быть нарастающий итог)
=СУММПРОИЗВ((ШАБЛОН!$F$1:$T$1=ИНДЕКС($U$3:$U$14;ПОИСКПОЗ($F$1;$U$3:$U$14;)):ИНДЕКС($U$3:$U$14;ПОИСКПОЗ($F$2;$U$3:$U$14;)))*ШАБЛОН!$F3:$T3)

Я хочу добавить к этой формуле проверку по нескольким условиям(столбцам)

Пробую сделать таким способом, но  получаю ошибки #Н/Д или Знач
=СУММПРОИЗВ((ШАБЛОН!$D$1:$R$1=ИНДЕКС($T$3:$T$14;ПОИСКПОЗ($E$1;$T$3:$T$14;)):ИНДЕКС($T$3:$T$14;ПОИСКПОЗ($E$2;$T$3:$T$14;)))*(ШАБЛОН!$B$2:$B$3000=Лист1!$B3)*(ШАБЛОН!$A$2:$A$3000=Лист1!$A3);ШАБЛОН!$D2:$R3000)

либо так

=СУММПРОИЗВ((ШАБЛОН!$D$1:$R$1=ИНДЕКС($T$3:$T$14;ПОИСКПОЗ($E$1;$T$3:$T$14;)):ИНДЕКС($T$3:$T$14;ПОИСКПОЗ($E$2;$T$3:$T$14;)))*(ШАБЛОН!$B$2:$B$3000=Лист1!$B3)*(ШАБЛОН!$A$2:$A$3000=Лист1!$A3)*ШАБЛОН!$D2:$R3000)

Подскажите, пожалуйста, как это можно реализовать? В чем моя ошибка?
Т.е моя конечная цель, это если произошли какие-то изменения в столбцах A/B/C, расчет должен подстраиваться под эти изменения, в том виде, в котором сделано у меня сейчас, задается явная строка $F3:$T3, хотелось бы задать сразу весь массив значений и выборку по столбцам
Объединить два работающих макроса по вставке формул
 
Добрый день! Есть два работающих макроса по вставке формулы в книгу excel. Подскажите, пожалуйста, как можно их объединить в один

Макрос 1
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:G15,G17:G20,G22,G24:G27,G29:G36,G38:G40,G42:G50,G52:G53,G55:G56,G59:G68,I11:I15,I17:I20,I22,I24:I27,I29:I36,I38:I40,I42:I50,I52:I53,I55:I56,I59:I68")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Январь'!$G$11:$J$68;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Январь'!$D$11:$D$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Январь'!$G$9:$J$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub

Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Макрос 2. Вставляет данную формулу на другие листы и ячейки.

Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("I квартал", "II квартал", "III квартал", "IV квартал", "Год")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G30:J30,G65:J68")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]I квартал'!$G$11:$J$68;ПОИСКПОЗ($D30;'[" & wbFrom.Name & "]I квартал'!$D$11:$D$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]I квартал'!$G$9:$J$9;0));" & """""" & ")"
            ss = Replace(ss, "I квартал", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub

Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Изменено: Diatr - 09.03.2023 08:34:18
Добавить в макрос копирование ячеек на другие листы.
 
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
        FillFormulasInWorkbookk vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:G15,G17:G20,G22,G24:G27,G29:G36,G38:G40,G42:G50,G52:G53,G55:G56,G59:G68,I11:I15,I17:I20,I22,I24:I27,I29:I36,I38:I40,I42:I50,I52:I53,I55:I56,I59:I68")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Январь'!$G$11:$J$68;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Январь'!$D$11:$D$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Январь'!$G$9:$J$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub
Private Sub FillFormulasInWorkbookk(ByVal sFull As String, wbFrom As Workbook)
    Dim rrr As Range
    Dim shh As Worksheet
    Dim wbb As Workbook
    Set wbb = GetWb(sFull)
      
    If Not wbb Is Nothing Then
        Dim sss As String
        Dim vMonthh As Variant
        For Each vMonthh In Array("I квартал", "II квартал", "III квартал", "IV квартал", "Год")
            Set shh = wb.Sheets(vMonthh)
            Set rrr = sh.Range("G30:J30,G65:J68")
             
            sss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]I квартал'!$G$11:$J$68;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]I квартал'!$D$11:$D$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]I квартал'!$G$9:$J$9;0));" & """""" & ")"
            sss = Replace(sss, "I квартал", vMonthh)
            rrr.FormulaLocal = sss
        Next
         
        wbb.RemovePersonalInformation = 0
        wbb.Close True
    End If
End Sub
 
Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function


Еще пробовал в первом варианте просто добавить дополнительные листы. Все ячейки кроме нужных мне("G30:J30,G65:J68") заблокированы на данных листах, так что думал может сработать, но нет). В этом варианте - данные вставляются корректно на все листы с наименованием месяца + на лист "I квартал", а "II квартал", "III квартал", "IV квартал", "Год" почему-то упускает, ячейки остаются незаполненными
Код
   For Each vMonth In Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь", "I квартал", "II квартал", "III квартал", "IV квартал", "Год")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:G15,G17:G20,G22,G24:G27,G29:G36,G38:G40,G42:G50,G52:G53,G55:G56,G59:G68,I11:I15,I17:I20,I22,I24:I27,I29:I36,I38:I40,I42:I50,I52:I53,I55:I56,I59:I68")
Изменено: Diatr - 09.03.2023 07:58:01
Добавить в макрос копирование ячеек на другие листы.
 
Добрый день! Сейчас у меня есть такой макрос, вставляющий формулу на нужные мне листы из одной книги в другую.

Хочу добавить в этот макрос  аналогичную вставку значений на листы "I квартал", "II квартал", "III квартал", "IV квартал", "Год" в ячейки "G30:J30,G65:J68"

Но что-то не получается у меня, подскажите пожалуйста как правильно это сделать?

P.S Первым комментарием выложу код моей попытки
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:G15,G17:G20,G22,G24:G27,G29:G36,G38:G40,G42:G50,G52:G53,G55:G56,G59:G68,I11:I15,I17:I20,I22,I24:I27,I29:I36,I38:I40,I42:I50,I52:I53,I55:I56,I59:I68")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Январь'!$G$11:$J$68;ПОИСКПОЗ($D11;'[" & wbFrom.Name & "]Январь'!$D$11:$D$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Январь'!$G$9:$J$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub

Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Просмотр изменений в excel.
 
MikeVol, Добрый день! Вопрос пока стоял на паузе, т.к задавать кучу переменных было неудобно, посмотрел ваше решение, большое спасибо! Думаю буду использовать его, переписав на нужные ячейки и заменив комментарии на русский язык
Просмотр изменений в excel.
 
evgeniygeo, Спасибо
Просмотр изменений в excel.
 
evgeniygeo, ох, ячеек то многовато будет) а с листами получится так как я описал выше?
Диапазонами получается не задать в таком варианте макроса?

Вариантом в лоб что-то не получается, выдает Run time error 450, при нажатии Debug указывается данная строка zapas = Sheets("Выработка").Range("F141", "G141", "H141", "I141", "J141", "K141", "L141", "M141", "N141", "O141", "P141", "Q141").Text
Код
Dim zapas
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
zapas = Sheets("Выработка").Range("F141", "G141", "H141", "I141", "J141", "K141", "L141", "M141", "N141", "O141", "P141", "Q141").Text
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
было = zapas
Application.EnableEvents = True
стало = Sheets("Выработка").Range("F141", "G141", "H141", "I141", "J141", "K141", "L141", "M141", "N141", "O141", "P141", "Q141").Text
If было <> стало Then
    Set oComment = Sheets("Выработка").Range("F141", "G141", "H141", "I141", "J141", "K141", "L141", "M141", "N141", "O141", "P141", "Q141").Comment
    If oComment Is Nothing Then
        Sheets("Выработка").Range("F141", "G141", "H141", "I141", "J141", "K141", "L141", "M141", "N141", "O141", "P141", "Q141").AddComment Date & " было: " & было & " стало: " & стало
    Else
        oComment.Text oComment.Text & Chr(10) & Date & " было: " & было & " стало: " & стало
    End If
    oComment.Shape.TextFrame.AutoSize = True
End If
End Sub
Изменено: Diatr - 25.01.2023 15:28:00
Просмотр изменений в excel.
 
evgeniygeo, Большое спасибо! Сейчас работает для одной ячейки которую я задаю в макросе, но когда меняю Range("F141") на Range("F141:Q141"), макрос перестает показывать изменения, подскажите как правильно диапазон задать чтоб работало(я нужные сам расставлю) ? Я в VBA слаб, но раньше всегда в таком виде диапазоны в макросах указывал, аналогичный вопрос для указания листов в книге excel Sheets("Выработка") просто меняю Sheets(Array("Sheet1", "Sheet2")), больше никаких изменений не будет?  
Просмотр изменений в excel.
 
evgeniygeo, Вот именно это и хотелось увидеть! но данный макрос не работает при моих условиях(часть исходных данных использующихся в формулах на другом листе) :(

В приложении прикреплен ваш файл, где я создал дополнительный лист и аргументы СУММ перенес на новый лист, макрос уже не работает
В своем же файле ничего не менял, просто поставил макрос на ячейку F141(так же проверено на ячейках со скоростью ветра и КИУМ на листе чистая выработка)
Изменено: Diatr - 25.01.2023 13:12:08
Изменить макрос по вставке ячеек из другой книги.
 
Добрый день! Есть такой макрос, вставляющий формулу в определенные ячейки одного файла, используя связь с другим файлом.(оба файлы имели одинаковые наименования листов, да и вообще всю структуру)

Сейчас нужно сделать тоже самое(вставить формулу имеющую связь с другим файлом), только иметь возможность выбрать лист откуда будут браться данные из файла источника.

Файл приемник - тот же самый формат и структура
Файл источник - другой формат, другие наименования листов. Все данные будут браться с одного листа (к примеру, лист с именем "ТЭЦ",  ну а сама формула вставлятся во все листы файла приемника как и раньше, тут без изменений)

Подскажите пожалуйста как изменить макрос.
Заранее большое спасибо!
Код
Public fso As Object
 
Sub ВставитьФормулу()
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fullFrom As Variant
    fullFrom = ShowFileDialog("Выберите файл источник", False)
    If IsEmpty(fullFrom) Then Exit Sub
 
    Dim fullTarg As Variant
    fullTarg = ShowFileDialog("Выберите файлы приёмники", True)
    If IsEmpty(fullTarg) Then Exit Sub
     
    Dim wbFrom As Workbook
    Set wbFrom = GetWb(fullFrom(1))
     
    Dim vFull As Variant
    For Each vFull In fullTarg
        FillFormulasInWorkbook vFull, wbFrom
    Next
     
    wbFrom.Close False
End Sub
 
Private Sub FillFormulasInWorkbook(ByVal sFull As String, wbFrom As Workbook)
    Dim rr As Range
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = GetWb(sFull)
      
    If Not wb Is Nothing Then
        Dim ss As String
        Dim vMonth As Variant
        For Each vMonth In Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
            Set sh = wb.Sheets(vMonth)
            Set rr = sh.Range("G11:G15,G17:G20,G22,G24:G27,G29:G36,G38:G40,G42:G50,G52:G53,G55:G56,G59:G68,I11:I15,I17:I20,I22,I24:I27,I29:I36,I38:I40,I42:I50,I52:I53,I55:I56,I59:I68")
             
            ss = "=ЕСЛИОШИБКА(ИНДЕКС('[" & wbFrom.Name & "]Январь'!$G$11:$J$68;ПОИСКПОЗ($E11;'[" & wbFrom.Name & "]Январь'!$E$11:$E$68;0);ПОИСКПОЗ(G$9;'[" & wbFrom.Name & "]Январь'!$G$9:$J$9;0));" & """""" & ")"
            ss = Replace(ss, "Январь", vMonth)
            rr.FormulaLocal = ss
        Next
         
        wb.RemovePersonalInformation = 0
        wb.Close True
    End If
End Sub
 
Private Function GetWb(ByVal sFull As String) As Workbook
    Dim sName As String
    sName = fso.GetFileName(sFull)
     
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(sName)
    On Error GoTo 0
    If Not wb Is Nothing Then
        If wb.FullName <> sFull Or wb.ReadOnly Then
            wb.Close False
            Set wb = Nothing
        End If
    End If
    If wb Is Nothing Then
        Set wb = Workbooks.Open(sFull, False, False)
    End If
     
    Set GetWb = wb
End Function
 
Private Function ShowFileDialog(sTitle As String, bAllowMultiSelect As Boolean) As Variant
    Dim rInitialFileName As Range
    On Error Resume Next
    Set rInitialFileName = ThisWorkbook.Names("Файл").RefersToRange
 
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = bAllowMultiSelect
        .Title = sTitle
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = rInitialFileName.Value
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            If Left(fso.GetFileName(.SelectedItems(lf)), 2) <> "~$" Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                    If Not rInitialFileName Is Nothing Then rInitialFileName.Value = .SelectedItems(lf)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Изменено: Diatr - 25.01.2023 12:14:48
Страницы: 1 2 3 4 5 6 След.
Наверх