2015-04-10 3 views
0

У меня есть пользовательская форма, которая открывается при изменении ячейки в столбце. Эта пользовательская форма содержит флажки, которые все запускают вторую пользовательскую форму с текстовым полем, которое ищет ячейку на скрытом листе для ее содержимого. (Установленный галочкой флажок определяет, в какой ячейке отображается текстовое поле). Затем пользователь редактирует окно, нажимает кнопку, и новый текст записывается обратно в ту же ячейку.Используйте VLOOKUP для передачи ссылки на ссылку на общедоступную переменную?

Это VBA, когда галочка отмечена галочкой. Он отлично работает. Ура!

Dim vln As Variant 
Dim reta As Worksheet 

Set reta = ActiveWorkbook.Sheets("RetailerActivity") 
Set vln = ActiveCell.Offset(-1, -3) 

UserForm2.TextBox1.Text = Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False) 

UserForm2.TescoSave.Visible = True 
UserForm2.Show 

End Sub 

Когда текстовое поле было отредактировано, я хотел бы записать его обратно в ту же ячейку, из которой она была. Я полагаю, что самый простой способ сделать это, чтобы иметь открытую переменную (как диапазон), и передать результат ВПР в эту переменную, поэтому второй UserForm может иметь линию, которая читает

Private Sub ASave_Click() 

publicvariable.Value = TextBox1.Value 
userform1.hide 

End Sub 

легко и приятно , а не снова делать VLookup. Правильно?

В любом случае, я не могу настроить общедоступную переменную как поиск.

Вне любого подразделам я

Public bums As Range 

И в приведенном выше коде, после того, как долото, где я настроил текстовое поле, я пытался добавить строку

Set bums = Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False) 

Но ошибки кода с «несоответствием типа».

Если я пытаюсь

Set bums = Range(Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False)) 

Я получаю метод "Диапазон" объекта "_global" не удалось.

Я код, выбирая биты из Интернета, как вы, вероятно, можете сказать, так что это я не сомневаюсь в полном kludge.

Любые советы были бы оценены по достоинству.

ответ

0

VLookup возвращает значение, а не диапазон. Вы можете использовать матч, чтобы найти строку, а затем Cells получить фактическую ссылку - например:

Dim vMatch 
vMatch = Application.Match(vln, reta.Range("A1:A100"),0) 
If Not IsError(vMatch) then 
Set bums = reta.Cells(vMatch, "C") 
else 
msgbox "No match for " & vln 
Exit Sub 
End If 

Лично я бы также не использовать публичную переменную, но создать свойство для Userform2, к которому вы можете назначить диапазон ,

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