Печать ключей из 2 отдельных словарей одновременно - PullRequest
0 голосов
/ 25 мая 2018

У меня есть 2 словаря, которые содержат строковые значения.Один содержит наблюдаемые электрические дефекты в служебном столбе, а другой содержит наблюдаемые структурные дефекты, характерные для разных экипажей.Я хочу напечатать все эти словарные ключи одновременно и рядом друг с другом.Это единственный способ, которым я действительно знаю, как ссылаться на ключи словаря:

With Sheets("Results")
    For Each Item In electricalNotes
       .Range("G" & iResults).Value = Item
       .Range("H" & iResults).Value = electricalNotes(Item)
       iResults = iResults + 1
    Next
End With
electricalNotes.RemoveAll

Проблема в том, что мой код для печати элемента и значения для моего словаря StructureNotes одинаков и должен использовать тот же инкремент iResults, потому чтоКод должен признать, что эти наблюдения связаны с соответствующей командой.Но я должен ссылаться на них отдельно, так как знаю только, как выполнить справочную команду «Для каждого».Поскольку на них ссылаются по отдельности, каждый из них имеет свой собственный инкремент iResults, то есть он продолжает увеличиваться после того, как заканчивается один словарь, распечатывая структурные дефекты (далее левый столбец с текстом) под законченной печатью электрических дефектов (далее правый столбец с текстом),См. Рисунок ниже в ссылке для визуализации справки: Визуализация справки по словарю .

Так что если кто-то знает, как решить эту конкретную проблему, или знает лучший способ ссылки и последующей печати сохраненных элементовв двух словарях одновременно помощь была бы оценена!

1 Ответ

0 голосов
/ 26 мая 2018

Мне немного сложно понять вашу структуру, но, принимая во внимание соотношение один к одному между ключами в electricalNotes и ключами в structuralNotes, все, что вам нужно сделать, это прочитать ключи в два отдельныхвариантные массивы, затем итерируйте массивы с помощью счетчика.Примерно так:

v1 = d1.Keys
v2 = d2.Keys

ReDim v3(1 To d1.Count, 1 To 4) 'or write directly to the worksheet

Dim I As Long

For I = 0 To d1.Count - 1
    v3(I + 1, 1) = v1(I)
    v3(I + 1, 2) = d1(v1(I))
    v3(I + 1, 3) = v2(I)
    v3(I + 1, 4) = d2(v2(I))
Next I
  • v1=d1.keys создаст нулевой одномерный массив ключей в словаре.

  • Я решил записать результаты в массив vba (v3), но вы можете написать прямо на лист.Последний будет намного медленнее.Вы можете написать v3 на листе за один шаг после его заполнения.

  • Обратите внимание, что v3 - это двумерный массив на основе одного, который соответствует листу, поэтомуВы должны настроить индекс I в зависимости от того, на какой массив вы ссылаетесь.Я сделал это таким образом, чтобы при желании вы могли Dim v3 использовать массив с нуля и использовать v (0,1-4) для заголовков столбцов.

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