У меня проблема с присвоением значения переменной VBS:
Dim varName
varName = function(x, y)
varName = function(x, y)
функция — это рекурсивная функция, которая вызывает сама себя:
Function function(x, y)
If IsObject(dicColumnIndices) Then
function = CInt(dicColumnIndices.Item(y))
Else
Set oCDSGrid = %MyAppObject%
Set dicColumnIndices = CreateObject("Scripting.Dictionary")
intColumnCount = oCDSGrid.ActiveSheet.Columns.Count
For i = 0 To intColumnCount - 1
dicColumnIndices.Add oCDSGrid.ActiveSheet.Columns.Item(i).Label, i
Next
function x, y
End If
End Function
Насколько я вижу, присвоение значения переменной происходит только со второй попытки. Я подумал, что это как-то связано с рекурсивным вызовом моей функции (проблема исчезнет, если я уберу рекурсивный вызов), но мне очень хотелось бы узнать, каковы корни такого поведения.
Я безуспешно искал как StackOverflow, так и Интернет.
Изменить: чтобы решить эту проблему, мне пришлось удалить рекурсивный вызов:
Function function(x, y)
If IsObject(dicColumnIndices) Then
function = CInt(dicColumnIndices.Item(y))
Else
Set oCDSGrid = %MyAppObject%
Set dicColumnIndices = CreateObject("Scripting.Dictionary")
intColumnCount = oCDSGrid.ActiveSheet.Columns.Count
For i = 0 To intColumnCount - 1
dicColumnIndices.Add oCDSGrid.ActiveSheet.Columns.Item(i).Label, i
Next
function = CInt(dicColumnIndices.Item(y))
End If
End Function
Редактировать 2: Наконец, с помощью MSDN я получил неправильную часть - это второй вызов
function x, y
который возвращает значение в ничто, должен быть изменен на:
function = function x, y
Спасибо всем!
If not IsObject(someVar) then Set someVar = CreateObject("Scripting.Dictionary") '... etc
и послеEnd If
вы помещаете код, который обрабатывает someVar как только что инициализированный объект, в вашем случае:YourFunction = CInt(dicColumnIndices.Item(y))
- person AutomatedChaos   schedule 09.08.2012