Я использую функцию для изменения ряда строк, передавая их ByRef в качестве аргументов модифицирующей функции. Все строковые переменные вызывающей стороны изменяются, как и ожидалось, но один аргумент, который является свойством класса, не изменяется, это должно быть возможно?
Основы класса: -
Private cRptRef As String
Public Property Get TestRefID() As String
TestRefID = cRptRef
End Property
Public Property Let TestRefID(Test_Ref As String)
cRptRef = Test_Ref
End Property
Функция для модификации строк имеет следующее объявление
Public Function GetTestFileNames(ByRef hdrFile As String, _
ByRef calFile As String, _
ByRef dataFile As String, _
ByRef testRef As String _
) As Boolean
Вызов GetTestFilenames выглядит следующим образом:
If GetTestFileNames(HEADERpath, CALpath, RAWDATApath, _
ref) = False Then
Все строковые аргументы объявлены как глобальные строки и являются пустыми ("") перед вызовом. После вызова они обычно имеют содержимое типа "d: {путь к файлу {имя_файла.csv}.
Таким образом, все эти операторы в функции заполняют целевые строки ОК.
hdrFile = Replace(userFile, "##", PT_Rpt.Info.FindNode(TEST_REF_HDRsuffix).data, , , vbTextCompare)
dataFile = Replace(userFile, "##", PT_Rpt.Info.FindNode(TEST_REF_DATAsuffix).data, , , vbTextCompare)
calFile = Replace(userFile, "##", PT_Rpt.Info.FindNode(TEST_REF_CALsuffix).data, , , vbTextCompare)
Но этот оператор не может присвоить что-либо своей целевой строке
testRef = Mid(userFile, InStrRev(userFile, Application.PathSeparator) + 1)
testRef = Left(testRef, InStrRev(testRef, "_") - 1)
Debug.Print "Class.TestRefID="; testRef
Оператор Debug.Print печатает ожидаемую строку, но внешняя ссылка не затрагивается. Это как-то связано с тем, что это собственность?
Целевая строка Class.TestRefID
вместо аргумента testRef.
Если я заменяю свойство класса в списке аргументов на стандартную строковую переменную, а затем присваиваю это свойству свойству класса, тогда получаю ожидаемый результат, который кажется ненужной работой.
Я что-то упускаю или это невозможно в VBA?