Имам проблем с присвояването на стойност на променлива на 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