簡體   English   中英

循環直到一行中的最后一列並填充組合框

[英]Loop until the last column in a row and fill comboBox

如何使用從 B2 到行尾沒有空格的行的所有值填充我的 ComboBox1?

我知道 :

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

但這是循環到列中最后一行的代碼,我想做相反的事情。

我會使用一個變量 ( 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

我想你要找的是:

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

注意 - 在您的示例中,您似乎使用了With塊 - 因此在所有這些單元格前添加句點以確保您的范圍是完全合格的。

用行填充組合(調整大小版本)

活動表

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
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 並跳過所有空白行。 我不熟悉組合框的特定語法,但我假設如果您稍微更改我的代碼,您可以使其工作。

如果你想讓我為你的項目編寫一些特定的代碼,讓我看看你到目前為止寫了什么和/或你想要傳輸的一些數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM