Вопрос или проблема
Я больше не могу извлечь путь к 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. Проверка пути в реестре
Перед тем как вносить изменения в код, рекомендуется вручную проверить реестр на наличие ключа. Для этого выполните следующие шаги:
- Откройте редактор реестра (нажмите
Win + R
, введитеregedit
и нажмитеEnter
). - Перейдите к следующему пути:
HKEY_LOCAL_MACHINE\SOFTWARE\R-core\R
. - Убедитесь, что существует ключ "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, чтобы проверить работоспособность. Удачи в работе с программой!