Цикл до последнего столбца в строке и заполнить comboBox - PullRequest
0 голосов
/ 26 декабря 2018

как заполнить мой ComboBox1 всеми значениями строки без пробелов от B2 до конца строки ...

Я знаю:

Sheets("Sheetname").Range("A2:A" & .Range("A65536").End(xlUp).Row).Value

но этоКод для цикла до последней строки в столбце, я хочу сделать наоборот.вы можете помочь ?

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018
dim xrow1 as long, xrow2 as long, ws1 as Worksheet, ws2 as Worksheet

set ws1 = ThisWorkbook.Worksheets("worksheet1")
set ws2 = ThisWorkbook.Worksheets("worksheet2")
xrow2 = 2

for xrow1 = 2 to 65536
    if ws1.cells(xrow1, 1) = "" Then
    else
        ws1.cells(xrow1, 1).value = ws2.cells(xrow2, 1).value     
    end if
    xrow2 = xrow2 + 1
next xrow1

Это скопирует все значения в первом столбце ws1 в ws2 и пропустит все пустые строки.Я не знаком с конкретным синтаксисом для поля со списком, но я предполагаю, что если вы немного изменили мой код, вы могли бы заставить его работать.

Если вы хотите, чтобы я кодировал что-то конкретное для вашего проекта, позвольте мнепосмотрите, что вы уже написали и / или какие данные вы хотите передать.

0 голосов
/ 26 декабря 2018

Я бы использовал переменную (LC) для хранения индекса столбца вашего последнего использованного столбца для удобства чтения.Вам также следует объявить переменную Worksheet или использовать With Block, чтобы убедиться, что все ваши объекты правильно определены.

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LC As Long

LC = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column

ws.Range(ws.Cells(2, 2), ws.Cells(2, LC)).[what?]

Вот как можно реализовать Column Loop

Option Explicit

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LC As Long

LC = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column

For i = 2 To LC
    If ws.Cells(2, i) = "" Then
        MsgBox "Blank Cell: " & ws.Cells(2, i).Address(False, False)
    Else
        MsgBox "Non-Blank Cell: " & ws.Cells(2, i).Address(False, False)
    End If
Next i
0 голосов
/ 26 декабря 2018

Комбинирование со строкой (изменение размера)

ActiveSheet

Private Sub UserForm_Activate()

   Const cStrFirst As String = "A2"           ' First Cell Range

   Dim vntRange As Variant                    ' Range Array
   Dim i As Integer                           ' Columns Counter

   vntRange = Range(cStrFirst).Resize(, Cells(Range(cStrFirst).Row, _
       Columns.Count).End(xlToLeft).Column)

   For i = 1 To UBound(vntRange, 2)
     If vntRange(1, i) <> "" Then
       ComboBox1.AddItem vntRange(1, i)
     End If
   Next

End Sub

Любой лист

Private Sub UserForm_Activate()

   Const cStrSheet As Variant = "Sheetname"   ' Sheet Name/Index
   Const cStrFirst As String = "A2"           ' First Cell Range

   Dim vntRange As Variant                    ' Range Array
   Dim i As Integer                           ' Columns Counter

   With Worksheets(cStrSheet)
     vntRange = .Range(cStrFirst).Resize(, .Cells(.Range(cStrFirst).Row, _
       .Columns.Count).End(xlToLeft).Column)
   End With

   For i = 1 To UBound(vntRange, 2)
     If vntRange(1, i) <> "" Then
       ComboBox1.AddItem vntRange(1, i)
     End If
   Next

End Sub
0 голосов
/ 26 декабря 2018

Я думаю, что вы ищете:

Sheets("Sheetname").Range(Cells(2, 2), Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column))

Примечание - похоже, что в вашем примере вы использовали блок With - поэтому добавьте точки перед всеми этими ячейками, чтобы сделатьубедитесь, что ваши диапазоны полностью квалифицированы.

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