#excel #vba #excel-formula
#excel #vba #excel-формула
Вопрос:
Сложно объяснить, но моя картинка сделает это понятным.
В столбце a моего листа Excel есть гиперссылки, которые ссылаются на файл для открытия, но как получить lastmodifieddate из этого файла в столбце l
Пример: a22 связан с файлом vimco, так какая последняя измененная дата из этого файла должна быть в l22
также не все строки в столбце a имеют гиперссылки и содержат также пустую или несвязанную ячейку, поэтому, если это так, в столбце l ничего не должно отображаться, он должен быть пустым, если a является пустым или несвязанным
может ли это создать формулу? итак, я ввожу cell = moddate, а затем показываю, что дата теперь в порядке
ок, теперь код получен
Function GetDateTime(myCell As Range) As Date
Dim myHyperlink As Hyperlink
Dim Filename As String
Application.Volatile
On Error Resume Next
Set myHyperlink = myCell.Hyperlinks(1)
On Error GoTo 0
If Not myHyperlink Is Nothing Then
Filename = myHyperlink.Address
'If it is a relative address insert this workbook's path
If Not (Filename Like "\*" Or Filename Like "[A-Z]:*") Then
Filename = ThisWorkbook.path amp; "" amp; Filename
End If
If Dir(Filename, vbNormal) <> "" Then
GetDateTime = FileDateTime(Filename)
Else
GetDateTime = ""
End If
Else
GetDateTime = ""
End If
End Function
но теперь вторая вещь, если ссылка меняется или я открываю свою книгу или листы подкачки, не обновляет значение getdatetime — это можно исправить?
Комментарии:
1. Насколько я знаю, вам понадобится VBA для создания UDF, который возвращает последнее измененное значение файла.
2. независимо от того, как это происходит, способ достаточно хорош, да, а также, если я закрою книгу и через неделю после того, как я снова открою, она сохранит последние измененные даты. это таблица персоналий, поэтому я копирую эту таблицу, чтобы добавить нового сотрудника на склад
3. О вычислении. проверьте, переведено ли вычисление в ручной режим.
Ответ №1:
Вы можете создать пользовательскую функцию в VBA и использовать ее в своей таблице Excel. Для этого вам нужна FileDateTime
функция в VBA, чтобы создать что-то вроде этого:
Function GetDateTime(r As Range) As Date
GetDateTime = FileDateTime(r.Hyperlinks(1).Address)
End Function
Теперь вы можете использовать эту функцию как обычную функцию Excel и заполнить ячейку гиперссылкой в качестве параметра. Вот так: =GetDatetime(A1)
. Если в A1 есть гиперссылка, она вернет дату.
Комментарии:
1. Что именно вы заполнили в столбце I? Содержит ли ячейка, на которую вы ссылаетесь, гиперссылку на файл, и если да, то на что она указывает? Вы также можете добавить эту строку в функцию:
debug.print r.Hyperlinks(1).Address
. Что это показывает в немедленном окне?2. я заполнил formula = GetDatetime(A38) l 38 возвращает #ЗНАЧЕНИЕ! по-прежнему также, если debug.print r.Гиперссылки(1). Добавлен адрес
3. строка debug.print будет отображать адрес гиперссылки только в непосредственном окне VBA. С помощью этого вы можете проверить, почему функция не может найти дату адреса гиперссылки. Адресом гиперссылки должен быть путь к файлу.
4. если я проверю конфигурацию гиперссылки, она связана с C:UsersborntDesktoptest.xlsx ссылка является правильной
5. Это не ближайшее окно. Вы можете открыть немедленное окно с помощью ctrl G, если вы используете VBA. Вы также можете проверить, работает ли функция по-другому: вместо того, чтобы
r.Hyperlinks(1).Address
заполнять"C:UsersborntDesktoptest.xlsx"
и проверять, получите ли вы ответ.