vba show Multi data

VBA UserForm 数据处理
本文介绍在VBA UserForm中使用DataGrid、ListView和ListBox处理多行多列数据的方法。包括控件的选择、安装、配置及常见操作,如绑定数据、编辑元素等。
对于多行多列数据,基本使用Worksheet中的Range就可以处理了。但是在UserForm类型的应用中,也时常需要处理多行多列的数据。在UserForm中,显示和处理多列数据,通常可以有的选择有以下几种:DataGrid,ListView,ListBox。前面两类相当强大,但是也比较复杂,一般的简单应用中用不到。

DataGrid

  DataGrid控件天生就是为了处理像Recordset这种数据而准备的,与它类似的数据控件(其它公司提供的数据控件)也还有其它几种,这里并不是重点,所以简单介绍一下。默认情况下,VBE中是看不到这个控件的,需要下载DATGDCHS.dll并放到C:\winnt\system32\下,然后运行命令“regsvr32 DATGDCHS.dll”注册。注册完成后,选择"Tools"菜单下的"Additional Controls..."菜单项,添加对应的控件到工具箱中就可以了。

  DataGrid最重要的属性就是DataSource属性,就是设置表格的数据源。其它的也可以设置列的一些属性,这里就不详细介绍了。需要的同学请自备Google并自行搜索。



ListView

  ListView也是处理这类型数据的一个选择,功能也比较强大,特别是可以设置图标,在很多时候还是很适合使用的。下面的伪代码介绍了常用的属性和方法:


复制代码

Dim currentItem As ListItem
'清除listview1中的标题
ListView1.ColumnHeaders.Clear
'清除listview1中的内容
ListView1.ListItems.Clear

With Sheets(1)
'添加列标题
ListView1.ColumnHeaders.Add 1, , .Cells(1, 1), ListView1.Width / 9
ListView1.ColumnHeaders.Add 2, , .Cells(1, 2), ListView1.Width / 9
'显示为报表视图
ListView1.View = lvwReport
'选取整行
ListView1.FullRowSelect = True
'复选框
ListView1.CheckBoxes = True
ListView1.BackColor = RGB(255, 199, 9)

For i = 5 To .[A65536].End(xlUp).Row
'为listview1控件里面的行添加内容
Set currentItem = ListView1.ListItems.Add()
currentItem.Text = .Cells(i, 1) '为行标赋值
currentItem.SubItems(1) = .Cells(i, 2)
currentItem.SubItems(2) = .Cells(i, 3)
currentItem.SubItems(3) = .Cells(i, 4)

'为里面的第三列调整相应的字体大小及颜色
With currentItem.ListSubItems.Item(2)
If .Text < 2 Then
.ForeColor = RGB(255, 0, 0)
Else
.Bold = True
.ForeColor = RGB(0, 0, 255)
End If
End With

Next i
End With

复制代码

默认情况下,ListView不会出现在工具箱中,需要在“Tools”菜单中,点击“Additional Controls...”菜单,打开对话框,勾选“Microsoft ListView Control,version 6.0”,然后在工具箱中就可以使用了。

经典的ListView双击列头排序的方法如下(使用了"^"与"v"去标示了排序的顺序,如果使用图片的话也是可以的):


复制代码

Private Sub lstAllocatonList_ColumnClick(ByVal columnHeader As MSComctlLib.columnHeader)
SetSortMark columnHeader
With lstAllocatonList

If (columnHeader.Index - 1) = .SortKey Then
.SortOrder = (.SortOrder + 1) Mod 2
Else
.Sorted = False
.SortOrder = 0
.SortKey = columnHeader.Index - 1
.Sorted = True
End If
End With
End Sub
Private Sub SetSortMark(columnHeader As MSComctlLib.columnHeader)
Dim i As Integer
Dim suffix As String
suffix = IIf(Right(columnHeader.text, 2) = " v", " ^", " v")

With lstAllocatonList.ColumnHeaders
For i = 1 To .Count
.Item(i).text = Replace(.Item(i).text, " ^", "")
.Item(i).text = Replace(.Item(i).text, " v", "")
Next
End With

columnHeader.text = columnHeader.text + suffix
End Sub

复制代码



ListBox

  虽然上面的两种选择很强大,但是设置也比较复杂,而且在很多时候,客户并不允许去下载相关的控件。而且在通常情况下,使用ListBox也可以达到相同的效果了。所以ListBox是最常用的方式,这里也重点介绍一下。使用ListBox常见的任务如下所示:

任务1:给ListBox绑定集合:

List - 代表所有行,可以直接赋给一个集合,也可以使用List(i,j)的形式给每个格赋值。

Column - 代表所有列,可以直接赋给一个集合,也可以使用Column (i,j)的形式给每个格赋值。

RowSource - 代表所有数据,可以直接赋给一个集合。

注意给List赋值,行列都会按正常排列,给Column赋值的时候,行列会颠倒过来,一般需要使用Application.Transpose方法配合。而RowSource需要一个字符串,通常可以使用Range的Address方法获得,当然直接给地址或者Range的Name也行。下面是常见的赋值方式,注意其中的格式:


复制代码

'直接给RowSource赋值的形式
ListBox1.RowSource = "=Sheet1!A1:B5"

'直接使用数组的形式
Dim arr(1 To 4, 1 To 2) As String
arr(1, 1) = Cells(1, 1)
'省略赋值的过程...
arr(4, 2) = Cells(4, 2)

ListBox2.List = arr
ListBox3.Column = Application.WorksheetFunction.Transpose(arr)

'使用单元格的形式
Dim source As Variant
'source = Range("A1:B4")
source = [A1:B4]
ListBox4.List = source

复制代码



任务2:编辑ListBox中的元素

AddItem - 添加一个新元素,参数是一个String,如果是多列的话,这个方法只会添加到第一列中,一般需要配合List(i,j)方法填充其他列的值。

RemoveItem - 移除一个元素,参数是一个Index值(从0开始)。

Clear - 清空ListBox。

注意使用List(i,j),Column(j,i)的形式也可以获得或设置给每一个格的值,注意行列的Index都是从0开始的。例如下面是对一个2列的列表操作:


复制代码

'添加一行
ListBox1.AddItem TextBox1.Text
ListBox1.List(ListBox1.ListCount - 1, 1) = TextBox2.Text

'删除选中行
If ListBox1.ListIndex <> -1 Then
ListBox1.RemoveItem ListBox1.ListIndex
End If



'清空ListBox
ListBox1.Clear

复制代码



任务3:获取ListBox中行列的总数

ListCount - 行总数,遍历的时候很有用。

ColumnCount - 获取或设置列的数目。

需要使用多列的时候,一般需要先设置ColumnCount为期望的数目。



任务4:获取ListBox中当前选中的行列

ListIndex - 当前选中的行的Index值。如果是可以多选的话,这个值有可能不太可靠,一般采用Selected遍历整个集合来确定选中的行。

Value - 当前选中的行的值,如果是多列的话,只返回第一列的值。

Selected - 判断某行是否被选中。



任务5:设置ListBox的表头

这个问题,常见的只有一种解法,那就是使用RowSource绑定集合。


ListBox1.RowSource = Range("A2:B4").Address

这个时候A2上面一行的内容会作为ListBox的表头使用。



基本使用上面这些属性就可以达到显示和处理多行多列数据的目的了。 其它ListBox的属性可以参看相关资料。

转自http://www.cnblogs.com/dxy1982/archive/2011/09/15/2177792.html
### 回答1: Data Matrix是一种二维条码,可以用来存储大量信息。VBA是Excel中的一种编程语言,可以通过VBA编写代码来处理和操作数据。 在VBA中,我们可以使用Data Matrix条码来进行数据的编码和解码。首先,我们需要安装并引用适当的组件库,以便访问Data Matrix编码和解码的功能。 对于编码,我们可以使用VBA代码将数据转换为Data Matrix条码。可以通过调用相应的函数,将要编码的数据作为参数传递给函数,并将返回的Data Matrix条码显示在Excel中。 对于解码,我们可以使用VBA代码读取Data Matrix条码,并将其解码为可识别的数据。可以通过调用相应的函数,将要解码的Data Matrix条码作为参数传递给函数,并将返回的解码数据显示在Excel中。 除了编码和解码,我们还可以使用VBA代码对Data Matrix条码进行其他操作。例如,我们可以使用VBA代码来调整Data Matrix条码的大小、颜色和位置等属性。 总之,Data Matrix VBA提供了在Excel中处理和操作Data Matrix条码的功能。可以通过编写VBA代码来实现Data Matrix的编码、解码以及其他操作,帮助我们更有效地处理和利用Data Matrix条码中的数据。 ### 回答2: Data Matrix是一种二维条形码,可以用来存储大量的数据。VBA是Visual Basic for Applications的缩写,是一种宏语言,用于在Microsoft Office应用程序中编写与VBA宏代码。 在VBA中,可以使用Data Matrix编码库来生成和解码Data Matrix条形码。使用VBA编写的宏代码可以自动化生成和解析Data Matrix条码,使得在Microsoft Office应用程序中处理大量数据变得更加高效和准确。 通过使用VBAData Matrix,用户可以在Excel中生成包含大量数据的Data Matrix条形码。这些条码可以包含文本、数字、符号等信息,并可以通过扫描和解码来获取这些信息。使用VBA可以将这些信息与Excel的其他功能结合起来,例如数据分析、报表生成和数据处理等。 在VBA中,可以使用相关的函数和方法来生成和解码Data Matrix条码。例如,可以使用VBA的CodeMatrix函数来生成Data Matrix条码,用DecodeMatrix函数来解码Data Matrix条码。在生成和解码Data Matrix条码时,还可以设置参数,例如条码的大小、错误纠正级别等。 总之,Data Matrix和VBA的结合可以帮助用户更高效地处理大量的数据,并通过使用Data Matrix条码来实现自动化的数据生成和解码。这对于需要处理大量数据的用户来说是一个强大的工具。 ### 回答3: Data Matrix是一种二维条码格式,用于存储和传输大量的数据。VBA是Visual Basic for Applications的简称,它是一种在Microsoft Office软件中编写宏的编程语言。 在结合使用Data Matrix和VBA时,可以使用VBA编写代码来生成和解码Data Matrix条码。使用VBA生成Data Matrix条码的方法可以通过调用现有的条码生成库,如BWRSoft的TEC-IT Software或ZXing库来实现。这些库提供了生成Data Matrix条码的函数和方法,可以在VBA中调用并传递所需的参数,以生成所需的Data Matrix条码。 此外,VBA还可以用于解码Data Matrix条码。可以使用VBA编写代码调用相应的库函数和方法,将待解码的Data Matrix条码图像传递给解码函数,以获取条码中所存储的数据。 使用VBAData Matrix的结合可以在Microsoft Office软件中实现自动化的数据存储和读取。例如,在Excel中可以使用VBA生成Data Matrix条码来存储数据,然后使用VBA读取和解码该条码,将数据提取到Excel工作表中。这样可以提高工作效率,减少手动输入数据的时间和错误。 总之,Data Matrix和VBA的结合为数据存储、传输和读取提供了一种方便和高效的解决方案,可以在不同的应用场景中发挥重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值