Значение ячейки = последняя измененная дата из пути гиперссылки

#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" и проверять, получите ли вы ответ.