Элементы Comboxes сравниваются и сопоставляются-VBA

#excel #vba

Вопрос:

У меня есть 2 листа Excel : один, содержащий исходные данные, и один, содержащий данные о цели. я создал форму пользователя, содержащую выпадающие списки(выпадающие списки)и кнопку импорта .

существуют комбинированные поля, содержащие имена первой строки исходного листа, и другие комбинированные поля, содержащие имена первой строки целевого листа.

я хочу сравнить имена в выпадающих списках ( имена источника и цели) и сопоставить их , если они равны, чем когда я нажимаю кнопку «Импорт», все в исходном листе excel будет импортировано в лист excel цели в нужном месте. как я могу это сделать ?

Я ПОПРОБОВАЛ ЭТОТ КОД

 dim sh =ThisWorkbook.Sheets("sourcedata")
dim sh2= ThisWorkbook.Sheets("goaldata")
dim i,j as integer

for i = 1 to Application.WorksheetFunction.CountA(sh.Range("1:1"))
for j = 1 to Application.WorksheetFunction.CountA(sh2.Range("1:1"))  
     if sh.cells(1,i).value = sh2.cells(1,j).value then

          Me.comboBox1.value = sh.cells(1,i)
          Me.comboBox2.value = sh2.cells(1,j)
          Me.comboBox3.value = sh.cells(1,i)
          Me.comboBox4.value = sh.cells(1,j) 
end if
next
next 
end sub 
 

проблема в том, что я обычно получаю одно и то же значение во всех комбинациях.
я хочу, чтобы во всех выпадающих списках были указаны имена строк на обоих листах.

например , у меня есть имена строк исходного листа : Дата, событие и место, имена строк в целевом листе : только дата и событие, например : в combobox1.значение= Дата также должно быть в comboBox2.значение = Дата (поскольку дата существует на обоих листах). combBox3.значение = Событие и поле 4. значение должно быть событием

Я хочу вставить поле 5.значение = место ( поле 5 содержит имена, которые существуют только на одном листе, и они не совпадают )

Какая-нибудь помощь?

Комментарии:

1. Вы должны опубликовать код, который вы пробовали.

2. я опубликовал код. у тебя есть какие-нибудь идеи?

Ответ №1:

Я думаю, что я понял часть 3 списка, но не полностью часть «какие данные следует скопировать», поэтому давайте уже перейдем к части списка.

Некоторые заметки о вашем коде:

  • Когда вы не упоминаете тип данных в вашем dim, переменные по умолчанию указаны в типе варианта=>, например, dim i =>> совпадает с dim i как вариант. хотя это не всегда проблема, это может привести к неожиданному поведению;
  • «combobox.значение» предназначено для получения выбранного значения в поле «Комбинация», а не для добавления в него элементов. Смотрю на ваш desc. и код, я думаю, вы намеревались добавить элементы.

Итак, ниже приводится пересмотренная версия, основанная на моих предположениях. вместо того, чтобы использовать «добавить ..элемент», я просто назначил ячейки листа массивам, поскольку затем мы можем манипулировать ими непосредственно в памяти, позволяя выполнять такие операции, как сравнение, копирование и т. Д., Намного быстрее.

 Option Explicit
Sub UserForm_Initialize()
    Dim arr, arr2
    arr = Sheet1.Range("A1:c1").Value2
    Me.ComboBox1.List = Application.WorksheetFunction.Transpose(arr)
    
    arr2 = Sheet2.Range("A1:c1").Value2
    Me.ComboBox2.List = Application.WorksheetFunction.Transpose(arr2)
    
    Dim i As Long, arr3, ii As Long: ii = 1
    ReDim arr3(1 To 1, 1 To UBound(arr, 2))
    For i = 1 To UBound(arr, 2)
        If arr(1, i) <> arr2(1, i) Then
            arr3(1, ii) = arr(1, i)
            ii = ii   1
        End If
    Next i
    Me.ComboBox3.List = Application.WorksheetFunction.Transpose(arr3)
End Sub
 

Взгляните на это и дайте мне знать, как все прошло.