Может ли передача данных VBScript из массива в строку быстрее?

У меня есть ситуация, когда мой объект Dictionary Keys - это ничего, кроме номеров строк и Items . Каждая информация о строке (т. Е. Элемент является массивом 1D).

Теперь с помощью приведенного ниже кода я могу отбросить детали строки с помощью элементов Словаря (массивов) в строки. Но можем ли мы сделать это в одной строке, а не один?

Sub DataPushBackToSheet(DicTotDurations,DicHoldData,ob9)

    Dim Key,ColumntoStart,LastColNumber

    ColumntoStart = objExcel1.Application.WorksheetFunction.Match("Parent Business Process ID", ob9.Rows(1), 0) + 1
    LastColNumber = objExcel1.Application.WorksheetFunction.CountA(ob9.Rows(1))

    For Each Key in DicHoldData.Keys

         ob9.Range(ob9.Cells(Key,ColumntoStart),ob9.Cells(Key,ColumntoStart)).Resize(1, UBound(DicHoldData.Item(Key)) + 1).Value = DicHoldData.Item(Key)

    Next

End Sub
0
nl ja de
@iDevlop Я разработал код в файле .vbs, .vbs - очень similer для vba!
добавлено автор Arup Rakshit, источник
Кажется, это VBA. Зачем упоминать VbScript?
добавлено автор Patrick Honorez, источник
Хорошая точка AutomatedChaos. Вы можете создать массив 1D непосредственно из диапазона Excekl, используя objExcel1.Transpose (ваш единственный диапазон столбцов)
добавлено автор brettdj, источник
Хорошая точка AutomatedChaos. Вы можете создать массив 1D непосредственно из диапазона Excekl, используя objExcel1.Transpose (ваш единственный диапазон столбцов)
добавлено автор brettdj, источник
Почему вы не используете Array, где индекс - это рулонный номер вместо словаря? Словарь довольно быстр, но массив будет быстрее.
добавлено автор AutomatedChaos, источник

3 ответы

в или вы можете сбросить элементы или ключи напрямую

<Сильный> VBS

Dim objExcel
Dim objWB
Dim objDic
Dim objKeys
Set objExcel = CreateObject("excel.application")
Set objWB = objExcel.Workbooks.Add
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
objWB.Sheets(1).Range("a1").Resize(UBound(objKeys) + 1) = objExcel.Transpose(objKeys)

<Сильный> VBA

Sub DummyKeys()
Dim objDic
Dim objKeys
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
Range("a1").Resize(UBound(objKeys) + 1) = Application.Transpose(objKeys)
End Sub
1
добавлено
@bonCodigo Я знаю это, но я думал, что этот цикл может также выполняться любым лайнером. То, что вы предложили в моем предыдущем коде, я сделал то же самое, если бы вы заглянули в то же самое.
добавлено автор Arup Rakshit, источник
здесь мои словарные статьи не являются одним элементом, а одним ключом является массив элементов. этот Элемент представляет собой не что иное, как полный ряд. Во время загрузки элемента с помощью ключа я использовал этот номер строки в качестве ключа в моем другом Sub , чтобы, когда я верну эти элементы в строку, я могу определите, из каких строк я выбрал этот Item вверх. Пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения!
добавлено автор Arup Rakshit, источник
У меня нет возможности удерживать номер строки в качестве словаря, а все данные строки - как массив Item. Я поместил детали строки в Item, так как мне нужно сделать много операций над ними.
добавлено автор Arup Rakshit, источник
@VBSolver Затем цикл через словарь и удаляет каждый элемент в виде массива в диапазон , используя Transpose .. this это основы для вас сейчас, потому что мы уже прогнали его раньше ...: $
добавлено автор bonCodigo, источник
Если я не ответил на ваши вопросы, тогда вы можете рассказать о том, что у вас есть, и что вы хотели бы сделать.
добавлено автор brettdj, источник

в или вы можете сбросить элементы или ключи напрямую

<Сильный> VBS

Dim objExcel
Dim objWB
Dim objDic
Dim objKeys
Set objExcel = CreateObject("excel.application")
Set objWB = objExcel.Workbooks.Add
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
objWB.Sheets(1).Range("a1").Resize(UBound(objKeys) + 1) = objExcel.Transpose(objKeys)

<Сильный> VBA

Sub DummyKeys()
Dim objDic
Dim objKeys
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
Range("a1").Resize(UBound(objKeys) + 1) = Application.Transpose(objKeys)
End Sub
1
добавлено
@bonCodigo Я знаю это, но я думал, что этот цикл может также выполняться любым лайнером. То, что вы предложили в моем предыдущем коде, я сделал то же самое, если бы вы заглянули в то же самое.
добавлено автор Arup Rakshit, источник
здесь мои словарные статьи не являются одним элементом, а одним ключом является массив элементов. этот Элемент представляет собой не что иное, как полный ряд. Во время загрузки элемента с помощью ключа я использовал этот номер строки в качестве ключа в моем другом Sub , чтобы, когда я верну эти элементы в строку, я могу определите, из каких строк я выбрал этот Item вверх. Пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения!
добавлено автор Arup Rakshit, источник
У меня нет возможности удерживать номер строки в качестве словаря, а все данные строки - как массив Item. Я поместил детали строки в Item, так как мне нужно сделать много операций над ними.
добавлено автор Arup Rakshit, источник
@VBSolver Затем цикл через словарь и удаляет каждый элемент в виде массива в диапазон , используя Transpose .. this это основы для вас сейчас, потому что мы уже прогнали его раньше ...: $
добавлено автор bonCodigo, источник
Если я не ответил на ваши вопросы, тогда вы можете рассказать о том, что у вас есть, и что вы хотели бы сделать.
добавлено автор brettdj, источник

в или вы можете сбросить элементы или ключи напрямую

<Сильный> VBS

Dim objExcel
Dim objWB
Dim objDic
Dim objKeys
Set objExcel = CreateObject("excel.application")
Set objWB = objExcel.Workbooks.Add
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
objWB.Sheets(1).Range("a1").Resize(UBound(objKeys) + 1) = objExcel.Transpose(objKeys)

<Сильный> VBA

Sub DummyKeys()
Dim objDic
Dim objKeys
Set objDic = CreateObject("scripting.dictionary")
objDic.Add "apple", 1
objDic.Add "pear", 2
objDic.Add "turkey", 3
objKeys = objDic.keys
Range("a1").Resize(UBound(objKeys) + 1) = Application.Transpose(objKeys)
End Sub
1
добавлено
@bonCodigo Я знаю это, но я думал, что этот цикл может также выполняться любым лайнером. То, что вы предложили в моем предыдущем коде, я сделал то же самое, если бы вы заглянули в то же самое.
добавлено автор Arup Rakshit, источник
здесь мои словарные статьи не являются одним элементом, а одним ключом является массив элементов. этот Элемент представляет собой не что иное, как полный ряд. Во время загрузки элемента с помощью ключа я использовал этот номер строки в качестве ключа в моем другом Sub , чтобы, когда я верну эти элементы в строку, я могу определите, из каких строк я выбрал этот Item вверх. Пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения!
добавлено автор Arup Rakshit, источник
У меня нет возможности удерживать номер строки в качестве словаря, а все данные строки - как массив Item. Я поместил детали строки в Item, так как мне нужно сделать много операций над ними.
добавлено автор Arup Rakshit, источник
@VBSolver Затем цикл через словарь и удаляет каждый элемент в виде массива в диапазон , используя Transpose .. this это основы для вас сейчас, потому что мы уже прогнали его раньше ...: $
добавлено автор bonCodigo, источник
Если я не ответил на ваши вопросы, тогда вы можете рассказать о том, что у вас есть, и что вы хотели бы сделать.
добавлено автор brettdj, источник