2016-05-04 11 views
0

Я писал макрос Excel, который сопоставляет имена между двумя листами и отображает их в списке. У него нет проблем при сопоставлении имен, но как только я пытаюсь включить другие данные с одного из листов, он больше не зацикливается.Колонка с несколькими столбцами, не отображающая данные, которые я хочу?

Вот мой код:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion) 
matching_artist = matchedartistcell.Value 
For i = 1 To maxmaster 
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then 
     ListBox1.AddItem (Worksheets("Master").Cells(i, 2)) 
     ListBox1.List(0, 1) = Worksheets("Master").Cells(i, 4) 
     ListBox1.List(0, 2) = Worksheets("Master").Cells(i, 5) 
     ListBox1.List(0, 3) = Worksheets("Master").Cells(i, 6) 
     End If 
Next i 

Так в основном, первый столбец показывает список имен ... Но второй, третий и четвертый столбец показывают данные за последний матч на той же строке, что и первый (если это имеет смысл?)

Я чувствую, что это не так, как хотелось бы, но я не могу для жизни понять, почему ... Любая помощь будет принята с благодарностью! !

Спасибо!

EDIT для ясности:

Я включаю некоторые картины, чтобы лучше описать проблему, с помощью тестовой книги

Это пример художников на рабочий лист «Мастер» enter image description here

И это пример рабочего листа, я бегу макрос на («Лоты») enter image description here

При запуске макроса для artw орк Ханна Смита, я ожидаю, что List Box смотреть что-то вроде

Марка Смита Британского 1940 1999
Адама Смита Австралийской 1901 1980
Хана Смит канадца 1982

Однако, он возвращает этот enter image description here

Марк Смит получает гражданство и даты Ханны Смит, и ни Адам Смит, ни Ханна Смит не имеют дополнительной информации.

+0

Что дает вам это «чувство», что делает не делаете, как вы ожидаете? Пробовал ли вы отлаживать код? Может быть, если вы включите несколько точек останова и проверите значения переменных? Вы также можете включить несколько ящиков сообщений или «Debug.Print i &», : сравнение «& Trim (Рабочие листы (« Мастер »). Ячейки (i, 1)) &« to »& Trim (matching_artist)' и просмотрите их вывод, чтобы убедиться, что все идет так, как вы ожидаете/хотите, чтобы они шли – Ralph

+0

Hiya! Я отредактировал свой пост, чтобы больше объяснить эту проблему, и почему у меня такое чувство. он код отлично работает, поэтому мне не показывают, где проблема. Я попробую то, что вы сказали сейчас, большое спасибо за предложение! – MBot93

ответ

0

Проблема в том, что вы всегда обновляете (в своем коде) самую первую строку своего списка. Пока i идет от 1 до последней строки на этом листе, вы всегда обновляете ListBox1.List(0, someColumn). . Таким образом, вы всегда обновление строки 0 (которая является первой строки в ListBox

Дайте этому попытку и дайте мне знать, если он работает:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion) 
matching_artist = matchedartistcell.Value2 
For i = 1 To maxmaster 
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then 
     ListBox1.AddItem (Worksheets("Master").Cells(i, 2)) 
     ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets("Master").Cells(i, 4) 
     ListBox1.List(ListBox1.ListCount - 1, 2) = Worksheets("Master").Cells(i, 5) 
     ListBox1.List(ListBox1.ListCount - 1, 3) = Worksheets("Master").Cells(i, 6) 
    End If 
Next i 
+0

О, я вижу, это имеет смысл ... Я ударил его, и он отлично работает! Ты такая звезда, большое спасибо! – MBot93

Смежные вопросы