#excel #vba #userform
#excel #vba #пользовательская форма
Вопрос:
У меня есть три столбца данных. Есть ли способ с помощью vba вставить информацию в метку в пользовательской форме?
Вот обновленный код, который у меня есть:
Dim rowNum As Integer
Dim lastRow As Integer
lastRow = 373
For rowNum = 2 To lastRow
report = Sheets("DATA2").Range("F" amp; rowNum).Text amp; _
" " amp; Sheets("DATA2").Range("G" amp; rowNum).Text amp; _
" " amp; Sheets("DATA2").Range("H" amp; rowNum).Text amp; vbCrLf
Next rowNum
End Sub
Комментарии:
1. Вы можете жестко закодировать lastRow как 373, если он никогда не изменится (т. Е. константа), или вы можете использовать какой-либо другой код, чтобы определить, какая строка является последней в столбце. Например, если вы хотите найти последнюю использованную строку в столбце F, используйте:
lastRow = Sheets("DATA2").Range("F" amp; Rows.Count).End(xlUp).row
2. @Widor: Я пробовал это, и он по-прежнему вставляет только первую строку.
3. @Mike: моим кодом или вашим кодом? Вы используете
.Range("F2").Text
, когда это должно быть.Range("F" amp; rowNum).Text
4. Тогда это должно быть
report.Caption = ...
потому что вы должны установить свойство Caption метки в качестве строки, сгенерированной вами в цикле.5. Извините, я думаю, что это закончено записывать в каждом цикле. Попробуйте
report.Caption = report.Caption amp;
вместо этого. У всехLabel
элементов управления есть свойство с именемCaption
, которое вы увидите в окне свойств при разработке формы. В коде вам нужно получить доступ к этому как,report.Caption
посколькуreport
это идентификатор вашей метки.
Ответ №1:
Попробуйте:
Dim rowNum as Integer 'loop counter
Dim lastRow as Integer
lastRow = 'some code to set the row number of the bottom row
For rowNum = 1 to lastRow
With ActiveWorksheet
myLabel.Text = myLabel.Text amp; .Range("A" amp; rowNum).Text amp; " " amp; .Range("B" amp; rowNum).Text amp; " " amp; .Range("C" amp; rowNum).Text amp; vbCrLf
End With
Next rowNum
Редактировать
Обновлено для добавления каждого цикла вместо перезаписи
Комментарии:
1. Это работает для первой строки, но остальные столбцы не отображаются.
2. @Mike Извините, неправильно прочитал вопрос. соответствующим образом обновил свой ответ.
3. Я обновил исходное сообщение выше, чтобы отразить код, который у меня есть из того, что вы опубликовали. Я не знаю точно, какой код вставить туда, где написано «lastRow =», Моя последняя строка — 373. Кроме того, все ли остальное правильно? Спасибо
4. @Mike: Смотрите мой ответ на ваш первоначальный вопрос
Ответ №2:
Предполагая, что ваша метка может обрабатывать несколько строк, вы могли бы написать цикл, который перебирает каждый столбец данных и добавляет его к строке в виде новой строки, а затем присваивает текстовому полю этой метки значение созданной вами строки.