Sub Auto_Open() Dim strName$: strName = Replace(ThisWorkbook.Name, "_New", "") If InStr(ThisWorkbook.FullName, Application.UserLibraryPath) < 1 Then On Error Resume Next Application.Workbooks(strName).Close 0 On Error GoTo 0 With CreateObject("Scripting.FileSystemObject") .CopyFile ThisWorkbook.FullName, Application.UserLibraryPath & strName, 1 Do DoEvents Loop Until .fileexists(Application.UserLibraryPath & strName) End With End If Application.AddIns(Left(strName, InStrRev(strName, ".") - 1)).Installed = True If Workbooks.Count = 0 Then Workbooks.Add End Sub
Sub Auto_Open() Dim strName$: strName = Replace(ThisWorkbook.Name, "_New", "") If InStr(ThisWorkbook.FullName, Application.UserLibraryPath) < 1 Then On Error Resume Next Application.Workbooks(strName).Close 0 On Error GoTo 0 With CreateObject("Scripting.FileSystemObject") .CopyFile ThisWorkbook.FullName, Application.UserLibraryPath & strName, 1 Do DoEvents Loop Until .fileexists(Application.UserLibraryPath & strName) End With End If Application.AddIns(Left(strName, InStrRev(strName, ".") - 1)).Installed = True If Workbooks.Count = 0 Then Workbooks.Add End Sub
пробуйте такой вариант путь к папке для запроса берется из A1, при выделении этой ячейки открывается диалог для выбора папки Если в папке будут файлы .xls, запрос выдаст ошибку
[vba]
Код
let Папка = Folder.Files( Excel.CurrentWorkbook(){[Name="folder"]}[Content][Column1]{0} )[[Folder Path],[Name],[Extension],[Content]], Файлы = Table.SelectRows( Папка, each Text.StartsWith(_[Extension], ".xls") and not Text.StartsWith(_[Name], "~") ), Книги = Table.CombineColumns( Table.SelectColumns( Table.AddColumn( Файлы, "Workbook", each Table.SelectRows( Excel.Workbook([Content]), each _[Kind] = "Sheet" ) ), {"Name", "Folder Path", "Workbook"} ), {"Folder Path", "Name"}, Combiner.CombineTextByDelimiter( "", QuoteStyle.None ), "Файл" ), Листы = Table.TransformColumns( Table.ExpandTableColumn( Книги, "Workbook", {"Name", "Data"}, {"Лист","Data"} ), {"Data", Table.PromoteHeaders} ), Столбцы = Table.Distinct( Table.ExpandListColumn( Table.AddColumn( Листы, "", each Table.ColumnNames([Data]) ), "" ), {""} )[#""], Таблица = Table.ExpandTableColumn( Листы, "Data", Столбцы ) in Таблица
[/vba]
пробуйте такой вариант путь к папке для запроса берется из A1, при выделении этой ячейки открывается диалог для выбора папки Если в папке будут файлы .xls, запрос выдаст ошибку
[vba]
Код
let Папка = Folder.Files( Excel.CurrentWorkbook(){[Name="folder"]}[Content][Column1]{0} )[[Folder Path],[Name],[Extension],[Content]], Файлы = Table.SelectRows( Папка, each Text.StartsWith(_[Extension], ".xls") and not Text.StartsWith(_[Name], "~") ), Книги = Table.CombineColumns( Table.SelectColumns( Table.AddColumn( Файлы, "Workbook", each Table.SelectRows( Excel.Workbook([Content]), each _[Kind] = "Sheet" ) ), {"Name", "Folder Path", "Workbook"} ), {"Folder Path", "Name"}, Combiner.CombineTextByDelimiter( "", QuoteStyle.None ), "Файл" ), Листы = Table.TransformColumns( Table.ExpandTableColumn( Книги, "Workbook", {"Name", "Data"}, {"Лист","Data"} ), {"Data", Table.PromoteHeaders} ), Столбцы = Table.Distinct( Table.ExpandListColumn( Table.AddColumn( Листы, "", each Table.ColumnNames([Data]) ), "" ), {""} )[#""], Таблица = Table.ExpandTableColumn( Листы, "Data", Столбцы ) in Таблица
в гугл формах в настройках ставим галку "Только один ответ на человека (требуется вход в аккаунт)" жмем Инструменты>Редактор скриптов... в Код.gs пишем[vba]
Код
function OnUpdate(e) { with (SpreadsheetApp.openById(FormApp.getActiveForm().getDestinationId()).getActiveSheet()){ if (getRange(1, getLastColumn())!="Email"){getRange(1, getLastColumn()+1).setValue("Email")} getRange(getLastRow(), getLastColumn()).setValue(Session.getEffectiveUser().getEmail()); } }
[/vba] жмем Ресурсы>Триггеры текущего проекта>...добавить триггер. выбираем [OnUpdate] [Из формы] [Отправка формы] Сохранить Теперь в файл ответов будет писаться email в последний столбец [p.s.]для заполнения формы нужен будет аккаунт google
в гугл формах в настройках ставим галку "Только один ответ на человека (требуется вход в аккаунт)" жмем Инструменты>Редактор скриптов... в Код.gs пишем[vba]
Код
function OnUpdate(e) { with (SpreadsheetApp.openById(FormApp.getActiveForm().getDestinationId()).getActiveSheet()){ if (getRange(1, getLastColumn())!="Email"){getRange(1, getLastColumn()+1).setValue("Email")} getRange(getLastRow(), getLastColumn()).setValue(Session.getEffectiveUser().getEmail()); } }
[/vba] жмем Ресурсы>Триггеры текущего проекта>...добавить триггер. выбираем [OnUpdate] [Из формы] [Отправка формы] Сохранить Теперь в файл ответов будет писаться email в последний столбец [p.s.]для заполнения формы нужен будет аккаунт googlekrosav4ig
Viper25, видимо у вас другая версия Excel (У меня 2013) или Power query тогда можно так любую ячейку в на таблице, идем на вкладку Power Query, жмем Запустить редактор Запускается редактор Power query, где можно изменить запрос
Viper25, видимо у вас другая версия Excel (У меня 2013) или Power query тогда можно так любую ячейку в на таблице, идем на вкладку Power Query, жмем Запустить редактор Запускается редактор Power query, где можно изменить запросkrosav4ig
Viper25, дело в том, что XLSX - это по сути архив, содержащий определенный набор xml файлов PQ функция [vba]
Код
Binary.Combine
[/vba] (она выполняется при нажатии на кнопочку с двумя стрелками вниз) не может корректно обработать данный тип файлов, и из-за этого на следующем шаге [vba]
[/vba] вываливается ошибка Да и при формате xls не будет корректного результата Мой файл из предыдущего поста пробовали?
Viper25, дело в том, что XLSX - это по сути архив, содержащий определенный набор xml файлов PQ функция [vba]
Код
Binary.Combine
[/vba] (она выполняется при нажатии на кнопочку с двумя стрелками вниз) не может корректно обработать данный тип файлов, и из-за этого на следующем шаге [vba]
let Источник = Table.Group( Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], {"FIO"}, { { "МИН(timeStart)", each Time.From(List.Min([timeStart])), type time }, { "МАКС(timeEnd)", each Time.From(List.Max([timeEnd])), type time }, { "МАКС(timeEnd)-МИН(timeStart)", each Time.From(List.Max([timeEnd])-List.Min([timeStart])), type time } } ) in Источник
[/vba]
Добрый вечер. Можно с помощью power query
[vba]
Код
let Источник = Table.Group( Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], {"FIO"}, { { "МИН(timeStart)", each Time.From(List.Min([timeStart])), type time }, { "МАКС(timeEnd)", each Time.From(List.Max([timeEnd])), type time }, { "МАКС(timeEnd)-МИН(timeStart)", each Time.From(List.Max([timeEnd])-List.Min([timeStart])), type time } } ) in Источник
Sub SplitN(str$, n As Variant, ByRef rng As Range) Dim i%, j%, tmp$ For i = 0 To UBound(n) tmp$ = Mid(str, j + 1, InStrRev(Mid(str & " ", j + 1, n(i)), " ")) j = j + Len(tmp) rng.Areas(i + 1) = Application.Trim(tmp) Next End Sub
Sub SplitN(str$, n As Variant, ByRef rng As Range) Dim i%, j%, tmp$ For i = 0 To UBound(n) tmp$ = Mid(str, j + 1, InStrRev(Mid(str & " ", j + 1, n(i)), " ")) j = j + Len(tmp) rng.Areas(i + 1) = Application.Trim(tmp) Next End Sub