VBA - моя функция использует элемент ByRef, установленный ByVal - PullRequest
0 голосов
/ 06 августа 2020

Представляю странную ситуацию. Я использую MS Access Office 365 на Windows 10.

Параметр вызывающего изменен. Это означает, что strBase обрабатывается как ByRef.

Public Function AvailableDirPath(strBase As String) As String
' Find non existing folder path.
'   strBase : folder path that a folder is created.
'   Return: Full system path for the directory

    Dim bFound As Boolean: bFound = Falase
    
    Do Until FolderExists(strBase) = False
        ' The ParentFolderPath returns full path of parent folder. 
        strBase = ParentFolderPath(strBase) & "\" & (Int(99999 * Rnd) + 10000)
    Loop
    

    AvailableDirPath = strBase

End Function

Вызывающая сторона находится чуть ниже.

Dim txtPath As String: txtPath = "C:\windows\temp\MSACCESS_TEST\"
Dim strRes as String
strRes = modFileFolder.AvailableDirPath(txtPath)

То, что происходит после получения возвращаемого значения, также было изменено. Но если я изменил его на

AvailableDirPath(ByVal strBase as String) As String

Тогда txtPath не изменится.

Я думаю, что параметр по умолчанию принимает значение ByVal, но почему он принимает значение ByRef?

1 Ответ

1 голос
/ 07 августа 2020

Как упоминалось в @Mark, по умолчанию используется ByRef. Поэтому, если вы не собираетесь изменять аргументы, вам нужно будет явно определить ByVal в параметрах.

Вот ссылка на объяснение MS.

https://docs.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/array-argument-must-be-byref

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...