Как извлечь путь установки R из реестра с помощью Excel VBA

Вопрос или проблема

Я больше не могу извлечь путь к R из реестра. У меня 64-битная машина и Excel 2016 32-бита. Небольшие функции R ниже работали хорошо с R 4.1.3 MS 365, но теперь, когда я обновился до R 4.4.2, функция возвращает пустой путь, хотя R существует в реестре. Мог бы кто-нибудь дать подсказку? См. скриншот ниже:

введите описание изображения здесь

'Функция для получения пути к директории установки R

Function GetR_HOME() As String
    'GetRegistryValue для получения "InstallPath" R из реестра
    GetR_HOME = GetRegistryValue("SOFTWARE\R-core\R", "InstallPath")

End Function

'Функция для получения значения из реестра
Function GetRegistryValue(keyPath As String, valueName As String) As String
    Dim Reg As Object
    Dim Key As String
    Dim Value As String

    'Создать WScript.Shell для взаимодействия с реестром
    Set Reg = CreateObject("WScript.Shell")

    'Попробовать прочитать значение из реестра
    On Error Resume Next
    Value = Reg.RegRead("HKEY_LOCAL_MACHINE\" & keyPath & "\" & valueName)

    On Error GoTo 0

    'Вернуть результат (значение реестра)
    GetRegistryValue = Value                'ПУСТОЕ ЗНАЧЕНИЕ ВОЗВРАЩЕНО'
End Function

Ответ или решение

Извлечение пути установки R из реестра с помощью Excel VBA

Для определения пути установки R на 64-битной машине с 32-битной версией Excel 2016, может возникнуть потребность в извлечении значения ключа "InstallPath" из реестра Windows. В вашем случае, после обновления R до версии 4.4.2, возникли сложности с получением этого значения. Ниже приведен подробный план по извлечению пути установки R и рекомендации по исправлению возможных ошибок.

1. Проблема и её причины

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

  • Обновление R: Новая версия R могла изменить путь в реестре или его структуру.
  • 64-битная ОС и 32-битный Excel: Версия Excel может не иметь доступа к определенным ключам реестра, так как работа с 32-битной и 64-битной архитектурой может создавать конфликты.

2. Проверка пути в реестре

Перед тем как вносить изменения в код, рекомендуется вручную проверить реестр на наличие ключа. Для этого выполните следующие шаги:

  1. Откройте редактор реестра (нажмите Win + R, введите regedit и нажмите Enter).
  2. Перейдите к следующему пути: HKEY_LOCAL_MACHINE\SOFTWARE\R-core\R.
  3. Убедитесь, что существует ключ "InstallPath" и проверьте, какое значение он содержит.

Если данные отсутствуют или ключ имеет другую структуру, вам нужно будет обновить ваш код.

3. Обновленный код для извлечения пути R

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

Function GetR_HOME() As String
    GetR_HOME = GetRegistryValue("SOFTWARE\R-core\R", "InstallPath")
    If GetR_HOME = "" Then
        ' Пробуем 32-битный ключ, если первый выдаёт пустоту
        GetR_HOME = GetRegistryValue("SOFTWARE\WOW6432Node\R-core\R", "InstallPath")
    End If
End Function

Function GetRegistryValue(keyPath As String, valueName As String) As String
    Dim Reg As Object
    Dim Value As String

    Set Reg = CreateObject("WScript.Shell")

    On Error Resume Next
    Value = Reg.RegRead("HKEY_LOCAL_MACHINE\" & keyPath & "\" & valueName)
    On Error GoTo 0

    GetRegistryValue = Value
End Function

Объяснение кода

  • Проверка на 32-битный ключ: Если значение из первого ключа пустое, добавляется дополнительная проверка на наличие пути в SOFTWARE\WOW6432Node\, который может содержать запись для 32-битного приложения.
  • Обработка ошибок: Использование On Error Resume Next помогает избежать прерывания выполнения кода при отсутствии ключа.

4. Заключение

Следуя приведённым рекомендациям, вы сможете эффективно извлечь путь установки R из реестра, даже при наличии различных версий программного обеспечения. Если после внесения изменений путь по-прежнему не извлекается, убедитесь в актуальности данных в реестре и в отсутствии проблем с правами доступа к нему.

Эти шаги помогут вам быстро наладить работу с R из Excel и автоматизировать анализ данных с использованием VBA.


Скачать код и протестировать его можно на вашем Excel, чтобы проверить работоспособность. Удачи в работе с программой!

Оцените материал
Добавить комментарий

Капча загружается...