如何用来自最后一行的行的变量集填充UserForm中的列表框?

时间:2019-05-04 12:21:54

标签: excel vba

我有一个工作表“ Sheet1”,数据的范围从“ A:R”开始,随着输入新的条目,行不断增加。对于每个条目,行的范围都不同,因此“列A”中的行被重复,因此它在数据透视表中显示得很好。现在要检查最后一个条目是否已粘贴,检查的一种方法是按“ Cltr + Down”键。我在用户窗体中有一个列表框,用于填充最后输入的条目。但它仅显示1行,即最后一行。如何显示该特定条目是否假定有5行?

我有这段代码,显示了输入的最后一行。我知道有一个主要的块缺少定义范围。我只是不知道该怎么做。请帮忙。 这是数据库的屏幕快照,我需要从该屏幕快照中填充用户窗体中的列表框。

enter image description here

这是当我单击“ CommandButton1”时带有ListBox的用户窗体的屏幕截图

Screenshot of Userform when 'CommandButton1' is clicked

Private Sub CommandButton1_Click()
Dim Rng As Range
Dim lr As Long
Dim x(1 To 2, 1 To 18), y As Long
    With Worksheets("Sheet1")
         lr = .Cells(.Rows.Count, 1).End(xlUp).Row
        UserForm1.ListBox1.ColumnCount = 18
        For y = 1 To 18
            x(1, y) = .Cells(1, y)
            x(2, y) = .Cells(lr, y)
        Next y
              UserForm1.ListBox1.List = x
    End With
UserForm1.Show
End Sub

我希望025-GRACE PHILLIPS(来自数据库)的记录显示在ListBox上,以后在添加新条目时,它应该显示输入的新条目

2 个答案:

答案 0 :(得分:0)

我会那样做

选项1 。您可以使用CurrentRegion获取范围。我不确定这是否对您有用。

Private Sub CommandButton1_Click()
    Dim rg As Range
    Set rg = Range("A1").CurrentRegion
    ListBox1.List = rg.Value
End Sub

选项2 ,或者像确定已发布代码一样确定最后一行并使用

Private Sub CommandButton1_Click()
    Dim rg As Range
    Dim lr As Long
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    Set rg = Range("A1:R" & lr)
    ListBox1.List = rg.Value
End SUb

请根据需要添加工作表和用户表单参考

更新基于以下内容对选项2 中的rg的注释使用

Set rg = Range("A" & lr & ":R" & lr)

更新2 我假设要添加到列表框中的行由包含S.L.No.的第一列标识。

Private Sub CommandButton2_Click()

    Dim rg As Range, rg1 As Range
    Dim lr As Long

    lr = Cells(Rows.Count, 1).End(xlUp).Row
    Set rg = Range("A1" & ":R" & lr)

    rg.AutoFilter Field:=1, Criteria1:=rg.Cells(lr, 1).Value
    Set rg1 = rg.SpecialCells(xlCellTypeVisible)
   ' Assumption is the newly added rows are in one and therefore in the last area
    Set rg1 = rg1.Areas(rg1.Areas.Count)


    ListBox1.ColumnCount = rg.Columns.Count
    ListBox1.List = rg1.Value

    rg.AutoFilter
End Sub

答案 1 :(得分:0)

让我们通过使用ADODB.recordset尝试另一种方法

import { Observable, ObjectUnsubscribedError } from "rxjs";
import { take } from 'rxjs/operators';

...

public membersListRef: AngularFirestoreCollection<any>;
public membersList$: Observable < any []>;
public membersList = {} as any;
public membersArray: any[];

...

this.membersArray = [];
this.membersListRef = this.firestore.collection(`/userProfile/${this.groupNumber}/membersList`);
this.membersList$ = this.membersListRef.valueChanges();

...

this.membersList$.take(1).subscribe((members) => {
  members.forEach(mdoc=>{
    console.log("id: , name:" + mdoc.id, mdoc.name);
       return  this.membersArray.push({id: mdoc.id, name:mdoc.name })
     })
   });