БМВ написал: дополните условием не равенства тому что нужно исключить.
Опять всем привет =) Еще раз подниму тему, т.к. еще дорабатываю макрос.
Исключение из поиска по имени файла, благодаря БМВ, сделал, спасибо. А сейчас мне надо сделать исключение конкретной подпапки из поиска. Не могу понять, где и как прописать это.
Пример: Папка E:\SOFT, содержит подпапки E:\SOFT\CAD, E:\SOFT\Windows, E:\SOFT\Драйверы и т.п. со своими подпапками и файлами. Надо провести поиск по всем подпапкам на всю глубину, кроме E:\SOFT\Windows и всех в нее вложенных.
Код
Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
' перебор папок осуществляется в том случае, если SearchDeep > 1
' добавляет пути найденных файлов в коллекцию FileNamesColl
On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath)
If Not curfold Is Nothing Then ' если удалось получить доступ к папке
For Each fil In curfold.Files ' перебираем все файлы в папке FolderPath
If fil.Name Like "*" & Mask Xor fil.Name Like "~$*" & Mask Xor fil.Name Like "*" & "db" Then FileNamesColl.Add fil.Path
Next
SearchDeep = SearchDeep - 1 ' уменьшаем глубину поиска в подпапках
If SearchDeep Then ' если надо искать глубже
For Each sfol In curfold.SubFolders ' ' перебираем все подпапки в папке FolderPath
GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
Next
End If
Set fil = Nothing: Set curfold = Nothing ' очищаем переменные
End If
End Function
написал: Т.е. на листе не будет ни одной гиперссылки, но когда пользователь щёлкает 2 раза мышкой на любой ячейке в столбце B, то макрос сам открывает файл, по указанной ячейке ссылке.
Спасибо, идея действительно отличная! Но тут возникает проблема с копированием строк в другую чистую книгу. Макрос сам не скопируется в нее и пользователь вряд ли разберется, как это делается =)) Как вариант, конечно, сделать надстройку и залить на компы пользователей... буду думать.
Здравствуйте. Новая тема и новая надежда на вашу помощь =)
Задача - каким либо образом обойти ограничение количества гиперссылок на рабочем листе в 65530 шт. Вводные: 1. Максимальное количество строк в формируемой таблице - 150.000, т.е. это 300.000 гиперссылок. 2. Гиперссылки в столбце B - уникальные, в столбце D - могут повторяться. Но крайне не желательно дублирующиеся гиперссылки объединять\удалять и т.п., т.к. каждая строка будет рассматриваться в отдельности, а также будут применяться различные фильтры по данным и сортировки. 3. данные из этой таблицы могут и будут вручную построчно копироваться в другую новую чистую книгу.
Примеров обхода, которые гуглятся, не так много и я не смог их в силу своих знаний, как-то интегрировать в этот код, чтобы все работало. А если и заработало (вероятно, т.к. не дождался до 65530 строки), то крайне медленно. Вот так например:
Код
Dim Cell As Range
Dim Cell2 As Range
For Each Cell In Range("B6:B60000")
If Cell <> "" Then ActiveSheet.Hyperlinks.Add Range("b" & Rows.Count).End(xlUp), ПутьКФайлу
Next
For Each Cell2 In Range("B60001:B160000")
If Cell2 <> "" Then ActiveSheet.Hyperlinks.Add Range("b" & Rows.Count).End(xlUp), ПутьКФайлу
Next
Андрей Прокофьев: как-то сделать выгрузку в эксель инфы о всей файлопомойке
в TotalCommander выбираете папку, всю инфу в которой нужно найти и, собственно, ищете с выводом в отдельное окно. Оттуда можно скопировать все пути в Excel или куда хотите (есть кнопка копирования пути к файлу, которая работает для всех выделенных). Про атрибуты я вам сказал - у FSO всё есть, а примеры по моей ссылке очень подробные.
К сожалению нет технической возможности установить тоталкомандер и вообще какой-либо софт туда, где эта файлопомойка находится (удаленный сервер) Поэтому только эксель. А про FSO я тоже писал, что я далеко не спец, а любитель и как ни пытался, не смог разобраться, как это все использовать в коде из моего примера. Сидел и тупо 2 часа подставлял в разные места кода названия переменных, функций и т.п., по аналогии с примерами. Эффекта разумеется ноль.
очень познавательный диалог у вас получился. Без иронии. Полностью согласен, что надо бороться с привычкой особо одаренных пользователей создавать файлы с полным ФИО сотрудника в имени и расположенной в 20 подпапке от корня. Именно этим сейчас и занимаемся. И именно для этого я и пытаюсь как-то сделать выгрузку в эксель инфы о всей файлопомойке, где и столкнулся с проблемами =)) Если поможете, буду безмерно благодарен.
Осталось 2 вопроса, если исключить длину пути: 1. выгрузка правильного размера файла. 2. выгрузка даты создания и даты изменения файла. FileDateTime выгружает именно дату изменения, но не создания.
проблема в том, что я не могу сообразить, как в коде из моего примера прописать что нужно. Уже перечитал все про FSO, но там везде примеры совсем не похожи на этот код. Тут какая-то коллекция собирается и из нее уже вся инфа достается =(( я же его тоже не сам написал, а нашел и чуть-чуть доработал.
А вот про длину пути не знал =(( это ограничение никак не обойти? У нас в общем хранилище такая помойка, что там иногда явно будет больше 255 символов
Прошу вашей помощи. Осталось всего 2 вопроса, которые я не могу решить, т.к. просто не хватает знаний. =(( 1. выгрузка правильного размера файла. 2. выгрузка даты создания и даты изменения файла. FileDateTime выгружает именно дату изменения, но не создания. 3. в идеале еще отфильтровать файлы со свойством скрытый на этапе отбора, но это совсем мелочь, можно и в итоговых результатах отфильтровать.
Не работает. Если размер файла больше 2 147 483 648 (2Гб), но до 4294967296 (4Гб), то да, это сработает, просто добавив к возвращенному значению 4294967296 получаем истинный размер файла. Но вот если размер файла равен 4294967296, то функция возвращает 0 и в то же время, если размер файла равен 0, то тоже возвращается 0, т.е. функция FileLen не видит разницы между файлом размером 0 байт и 4 Гб.
Как я понял, функция FileLen работает только с файлами до 2Гб корректно, дальше все ломается. Нужен какой-то другой вариант
дополните условием не равенства тому что нужно исключить.
Заработало!! =)) Спасибо вам огромное. Хотя, если файл "скрытый", но соответствует маске отбора, то все равное его имя не выводится. (строка 11 - этому файлу я указал атрибут "скрытый" в свойствах)
И теперь еще одна проблема вылезла =(( Если размер файла больше какого-то непонятного значения, то почему-то в ячейку выводится отрицательное и неверное значение размера. Обновил пример. По факту размер файла "123.exe" (строка 6) равен 2,14 ГБ (2 307 242 984 байт). Причем файл "234.exe" (строка 7) с размером 1,95 ГБ (2 094 611 768 байт) выводится нормально.
Экспериментально выяснил, что размер файла, если он хотя бы на 1 байт больше, чем 2 147 483 647 (ровно 2Гб минус 1 байт), выводится с ошибкой.
Опять подниму свой вопрос. Решение выше работает, спасибо. Я в итоге нашел еще одно решение и чуть доработал его. См.приложеный файл. Но осталась мелочь, которую я решить никак не могу. Как прописать в макросе исключения по имени файлов в поиске. В примере, в строках 14 и 16 есть 2 файла с именами "Thumbs.db" и содержащий в начале "~$", а мне их надо исключить из поиска. Это скрытые системные файлы. Есть варианты, как это сделать?
Всем привет. Есть задача выгрузить дерево каталогов и файлов по указанному пути. Я полностью изучил приемы вот тут https://www.planetaexcel.ru/techniques/3/45/, но они не выдают полной требуемой информации о файле. Можно ли с помощью Power Query или макросов выгрузить следующую информацию о файлах\папках: Название папки\файла с расширением, дата создания, дата последнего изменения, размер в килобайтах, путь к файлу, создатель (если указан. НЕ "владелец")?
Добрый день. Никак не могу сообразить с формулой массива, чтобы отбирать только нужные значения в нем по заданному условию.
Суть задачи: 1. По заданному значению в ячейке I3 ("Питер") определить столбец (D) и вывести значения из столбца B, напротив которых в определенном ранее столбце (D) не нулевые\пустые значения. Итог должен быть "Слива", "Ананас", "Манго" 2. Аналогичная зеркальная задача. По заданному значению в ячейке J3 ("Слива") определить строку (5) и вывести значения из строки 2, напротив которых в определенной ранее строке (5) не нулевые\пустые значения. Итог должен быть "Москва", "Питер" Пример во вложении.
Сам массив постепенно дополняется вручную новыми строками и столбцами, поэтому в формулах он задан "с запасом"
Может я мудрю с массивами и есть более простой вариант решения?
Подскажите, как задать значение пользовательской функции при несоблюдении условия? Есть 2 моих корявых кода. Первый работает, второй нет. Не могу понять, где во втором ошибка
Первый
Код
Function КОД_ПАРТИИ(Код_номенклатуры, Дата_производства)
Dim m As String
Dim y As String
Dim d As String
If Код_номенклатуры = 0 Then
КОД_ПАРТИИ = "Введите код номенклатуры!"
Exit Function
ElseIf Дата_производства = 0 Then
КОД_ПАРТИИ = "Введите дату!"
Exit Function
End If
If Month(Дата_производства) = 1 Then
m = "R"
End If
If Year(Дата_производства) = 2019 Then
y = "X"
End If
If Day(Дата_производства) = 1 Then
d = "R"
End If
КОД_ПАРТИИ = m & y & d
End Function
Второй
Код
Function TEST1(A, B)
Dim iFullName As String
iFullName = "C:\Program Files\1234.jpg"
If Dir(iFullName) = "" Then
TEST1 = "ffgg"
Exit Function
Else
TEST1 = A & B
End If
End Function
Если файл 1234.jpg есть по указанному пути, все работает, функция выдает верный ответ.
Да, я знаю про нее. Это не защитит от "кражи" алгоритма. Также как и защиты листа и книги паролями штатными методами - вскрывается на раз.
Идея - именно разнести вычисления и выдачу результатов по разным файлам. Если украдут клиентский, то в нем ничего не будет, кроме неких "ссылок" на другой файл. А вот файл с вычислениями (формулой шифра) будет лежать в недоступном месте, откуда пользователи его точно не смогут забрать.
Всем добра! Друзья, подскажите, как и можно ли реализовать мою идею. Смысл таков. Есть некая формула, которая по особому алгоритму шифрует изначальные данные и выдает в результате "шифр". Пользователь имеет эти изначальные данные и должен в итоге получить шифр, но никаким образом не должен видеть саму формулу и принцип формирования "шифра". Сейчас я это реализовал в одной книге, но на разных листах - пользовательский и служебный. Пользовательский имеет 2 ячейки для заполнения и одну для результата-"шифра". Служебный - саму формулу. Этот лист скрыт. Но у меня есть опасения, что книгу целиком могут скопировать, унести, передать в ненужные руки и алгоритм расшифруют.
Подскажите, можно ли сделать так, чтобы у пользователя была книга только с одним листом где он вбивает данные и получает результат, а формула все рассчитывала в другой книге, лежащей в общей папке на сервере с паролем и т.п. Может есть другой, более грамотный подход к такой задаче?
Простейший пример во вложении. Шифр, естественно, намного сложнее, чем тут. =))
великолепно! Ваш макрос определяет совпадение по составу, но не определяет совпадение по пропорциям входящих в состав компонентов. Но это можно доработать просто еще одним столбцом с суммой по условию =)) Спасибо!
не работает =(( Добавил еще несколько строк, но ваша формула массива их тоже выделяет, хотя рецептуры другие. Вы же формулу просто протягивали по строкам, верно? Причем я не понял, почему некоторые желтым выделяет, а некоторые зеленым, хотя они все разные.
Я понял! =)) вы суммируете номера столбцов и если сумма одинакова, окрашиваете в какой-либо цвет. Но ведь может быть так, столбцы 2+4+5+9 = 20 и столбцы 8+12 тоже 20.
Конечно. Если он будет самым последним, вообще идеально =) Таблица с рецептами у меня статичная, ее просто надо привести в порядок и забыть на еще один год. Потом по новой проверять...
Ігор Гончаренко написал: по какому признаку вы найдете пару любой из этих зеленых строк
Вручную. Это в разы проще, чем перебирать вручную 400 строк. Если можно как-то попарно выделять, то это идеально. Причем надо еще и различие "одинаковый - идентичный" оставить.
Потому что в 3 строке используются компоненты 6 и 10, которых нет в других составах. А в 5 строке - компоненты 3 и 5, которые тоже не используются в других составах. Т.е. если два состава имеют даже 9 одинаковых компонентов, а 10го в одном из них нет, это уже разные рецептуры.
Поясню на простом примере. Блины обычные и блины с начинкой. Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр. Блины с начинкой - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр, начинка 50 гр. Это два разных рецепта из-за наличия начинки в одном из них.
Но! Если я делаю Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 20 гр. и Блины обычные рецепт - вода 100 гр, мука 100 гр, яйца 2 шт, сахар 60 гр., то это уже одинаковые рецепты по составу, но разные по пропорциям.
Ігор Гончаренко написал: это КРЕПКО ПОМОГЛО??вам именно это нужно?
Да, если учесть, что строк более 400, а одинаковых из них будет процентов 10-15, не больше И вы не заметили, что зеленым будут выделяться совершенно одинаковые строки (с идентичными числовыми значениями в столбцах). И эти зеленые составят половину от этих 10-15 процентов. Итого желтых останется только 20-30 строк из 400+.
Эм. У вас все строки желтым просто выделены. Либо я опять не понял, либо вы решили пошутить. Неужели я и правда непонятно описал, что хочу получить в итоге?
Или вы хотели сказать, что у меня в результате все сроки могут оказаться желтыми? нет, такого точно не будет. Максимум 50-70 строк будут одинаковыми или даже идентичными.
Друзья, уже всю голову сломал. Существует ли какой-то быстрый метод сравнить строки в таблице?
Суть задачи такова. Есть столбец "А" со списком составов неких веществ. В столбцах "B:K" указаны некие химические компоненты. На пересечении строки и столбца указано цифрами, сколько конкретно берется компонента для этого вещества. Другими словами это таблица рецептур.
Необходимо в таблице выделить каким-либо образом (цветом или еще как-то): 1. Вещества (строки) в которых используются одни и те же компоненты. В данном примере выделены зеленым. Компоненты одинаковые, но пропорции разные. 2. Вещества (строки) с совершенно одинаковыми рецептами. В данном примере выделены желтым. И компоненты и пропорции одинаковые.
В полной таблице у меня 400+ строк (веществ) и 200+ столбцов (компонентов).
Забыл добавить, что всю таблицу можно транспонировать, если это потребуется.