MSFlexGrid 控件,微软早期的表格控件。
MSHFlexGrid 控件,微软针对MSFlexGrid升级的表格控件。
VBFlexGrid控件,第三方开发者开源的对MSFlexGrid升级的表格控件,代码基本上和MSFlexGrid一样,增加支持双击、单击编辑内容。
作者开源地址
https://github.com/Kr00l/VBFLXGRD?tab=readme-ov-file
完整开源资料压缩包
https://excelbgjq.lanzouw.com/iafI132yk2kh
OCX文件下载
https://excelbgjq.lanzouw.com/iZEjr32yk80d
下载VBFLXGRD18.OCX文件,复制到C:\Windows\System32,进行注册
regsvr32 C:\Windows\System32\VBFLXGRD18.OCX
工具栏空白右键–部件


勾选VB FlexGrid Control 1.8,确定
工具箱增加控件选择

点击它,鼠标在窗体拖动,画出控件位置即可。

修改AllowUserEditing属性为True,可以对单元格进行编辑

添加数据
With VBFlexGrid1
' 设置列数和行数
.Cols = 5
.Rows = 6
' 设置标题行
.TextMatrix(0, 0) = "ID"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "年龄"
.TextMatrix(0, 3) = "入职日期"
.TextMatrix(0, 4) = "评分"
' 填充示例数据
.TextMatrix(1, 0) = "3"
.TextMatrix(1, 1) = "张三"
.TextMatrix(1, 2) = "28"
.TextMatrix(1, 3) = "2020-03-15"
.TextMatrix(1, 4) = "85"
.TextMatrix(2, 0) = "1"
.TextMatrix(2, 1) = "李四"
.TextMatrix(2, 2) = "32"
.TextMatrix(2, 3) = "2018-11-02"
.TextMatrix(2, 4) = "80"
.TextMatrix(3, 0) = "5"
.TextMatrix(3, 1) = "王五"
.TextMatrix(3, 2) = "25"
.TextMatrix(3, 3) = "2021-05-20"
.TextMatrix(3, 4) = "70"
.TextMatrix(4, 0) = "2"
.TextMatrix(4, 1) = "赵六"
.TextMatrix(4, 2) = "35"
.TextMatrix(4, 3) = "2017-09-30"
.TextMatrix(4, 4) = "90"
.TextMatrix(5, 0) = "4"
.TextMatrix(5, 1) = "钱七"
.TextMatrix(5, 2) = "29"
.TextMatrix(5, 3) = "2019-12-08"
.TextMatrix(5, 4) = "75"
' 设置标题行样式
.row = 0
.CellBackColor = &H8000000F ' 浅灰色背景
.CellFontBold = True ' 粗体
' 初始化排序标记
.Tag = "" ' 用于存储当前排序状态:"列索引_排序方向"
End With
'设置第二列右对齐
VBFlexGrid1.ColAlignment(1) = flexAlignRightCenter
' 先定位到标题行(第0行)
VBFlexGrid1.row = 0
' 设置标题行所有列居中对齐
For i = 0 To VBFlexGrid1.Cols - 1
VBFlexGrid1.col = i
VBFlexGrid1.CellAlignment = flexAlignCenterCenter
Next i
插入背景图片
Set VBFlexGrid1.CellPicture = LoadPicture("C:\Users\Administrator\Desktop\微信图片_20259004.jpg")
复制选中
VBFlexGrid1.Copy
也可以遍历存入剪贴板
复制全部内容到剪贴板
ReDim brr(1 To VBFlexGrid1.Rows, 1 To VBFlexGrid1.Cols)
For row = 0 To VBFlexGrid1.Rows - 1
For col = 0 To VBFlexGrid1.Cols - 1
brr(row + 1, col + 1) = VBFlexGrid1.TextMatrix(row, col)
Next col
Next row
CopyArrayToClipboard brr
MsgBox "已复制"
复制选定内容到剪贴板
Private Sub Command10_Click()
GetSelectedRange2 VBFlexGrid1
end sub
Private Function GetSelectedRange2(grid As VBFlexGrid) As String
Dim startRow As Integer
Dim endRow As Integer
Dim startCol As Integer
Dim endCol As Integer
startRow = IIf(grid.row < grid.RowSel, grid.row, grid.RowSel)
endRow = IIf(grid.row > grid.RowSel, grid.row, grid.RowSel)
startCol = IIf(grid.col < grid.ColSel, grid.col, grid.ColSel)
endCol = IIf(grid.col > grid.ColSel, grid.col, grid.ColSel)
GetSelectedRange2 = "选中范围: (" & startRow & ", " & startCol & ") 到 (" & endRow & ", " & endCol & ")"
Dim j As Integer, k As Integer
ReDim arr(1 To endRow - startRow + 1, 1 To endCol - startCol + 1)
For j = startRow To endRow
n = n + 1
m = 0
For k = startCol To endCol
m = m + 1
aa = grid.TextMatrix(j, k)
arr(n, m) = grid.TextMatrix(j, k)
Next k
Next j
CopyArrayToClipboard arr
End Function
'移除第二行
VBFlexGrid1.RemoveItem 2
'第三列宽度设置为0
VBFlexGrid1.ColWidth(colIndex) = 0
'移除所有内容
VBFlexGrid1.Clear

修改BackColorAlt颜色,可以隔行显示不同颜色

Dim IntSort As Integer '必须放在通用,否则无法排序
Private Sub VBFlexGrid1_Click()
'点击标题实现自动排序
If (VBFlexGrid1.col = VBFlexGrid1.ColSel) And (VBFlexGrid1.RowSel = VBFlexGrid1.Rows - 1) And (VBFlexGrid1.row <> VBFlexGrid1.Rows - 1) Then
Select Case IntSort
Case 0
VBFlexGrid1.Sort = 1
IntSort = 1
Case 1
VBFlexGrid1.Sort = 2
IntSort = 2
Case 2
VBFlexGrid1.Sort = 1
IntSort = 1
Case Else
IntSort = 0
End Select
End If
'第一列添加序号
For CntItem = 1 To VBFlexGrid1.Rows - 1
VBFlexGrid1.TextMatrix(CntItem, 0) = CntItem
Next
End Sub
以下来源与贴吧资料
https://tieba.baidu.com/p/9777266462?fid=1177&pid=152476865805&cid=152478501960#152476865805
• 可以滚动超过65535行。(MSHFlexGrid中的16位限制)
• 即使没有滚动条,也可以更改TopRow/LeftCol属性。(MSFlexGrid和 MSHFlexGrid的限制)
• RemoveItem方法允许删除最后一个非固定行。(与VSFlexGrid类似)
• 可以使用鼠标滚轮滚动。(MSFlexGrid和 MSHFlexGrid的限制)
• 支持水平鼠标滚轮。
• 包含AllowReaderMode属性,以支持自动滚动和平移的阅读模式。
• 单元格数量没有350000的限制,单元格数量限制仅由可用内存空间决定。(MSFlexGrid的限制)
• 包含FrozenRows/FrozenCols属性。
• 包含AllowUserFreezing属性。
• 包含AfterUserFreeze事件。
• 包含RowSizingMode属性。(与 MSHFlexGrid类似)
• 包含Align属性。
• 包含DisableNoScroll属性。
• 在Compare事件中添加了Col参数,这在进行多列排序时很有帮助。
• 可以在子类中拦截WM_ERASEBKGND以填充自定义背景(如果需要)。
• 包含BackColorAlt属性,用于设置交替行的背景颜色。(设置BackColor会自动将BackColorAlt设置为相同的值)
• 包含DoubleBuffer属性。
• 包含RightToLeft属性。
• 包含AllowMultiSelection属性,以及相关的RowSelected/SelectedRow/SelectedRows属性和MultiSelChange事件。
• 包含AllowSelection属性。
• 包含TabBehavior属性。
• 包含DirectionAfterReturn属性。
• 包含WantReturn属性。
• 包含ExtendLastCol属性。
• 包含SheetBorder属性。(默认为True,行为类似于MSFlexGrid,否则无边框,类似于 MSHFlexGrid)
• 包含WrapCellBehavior属性。
• 包含ClipSeparators属性。
• 包含ClipSeparatorCol/ClipSeparatorRow属性(仅在运行时)用于更改默认值并支持超过1个字符的分隔符。
• 包含ClipMode属性,用于确定在剪贴命令中是否包含(默认)或排除隐藏单元格。
• 包含ClipCopyMode属性,用于确定复制到剪贴板或由剪贴命令返回的部分。
• 包含ClipPasteMode属性,用于确定如何从剪贴板或通过剪贴命令粘贴内容。
• 包含ParseClip/ConstructClip函数。(将剪贴字符串解析/构造为二维数组)
• 包含BeforeClipboardAction/AfterClipboardAction事件。
• 包含ShowInfoTips、ShowLabelTips和CellToolTipText属性。
• 包含ShowScrollTips属性以及相关的ScrollTip事件和ScrollTipText属性。(仅在运行时)
• 包含ScrollTipFollowThumb属性。
• 包含ScrollTrack属性。
• 包含EllipsisFormat/EllipsisFormatFixed属性。
• 包含ColImageList属性(Variant,可以是控件或句柄)以及相关的CellImageCallback事件。
• 包含ColTextIndent属性以及相关的CellTextIndent事件。
• 包含ColWordWrapOption/ColWordWrapOptionFixed属性。(与 MSHFlexGrid类似)
• 包含MimicTextBox和ColMimicTextBox/ColMimicTextBoxFixed属性。
• 在GridLine属性中包含Dashes/Dots枚举。(与 MSHFlexGrid类似)
• 包含FontFixed属性。(与 MSHFlexGrid类似)
• 包含FontQuality属性。
• 包含GridLineWidthFixed属性。(与 MSHFlexGrid类似)
• 包含FixGridLineOffsets属性和GetGridLineOffsets方法。
• 包含GetMetrics方法。
• 包含MirrorAlignGeneral属性。
• 包含SingleLine属性。
• 在FocusRect属性中包含Flat枚举。
• 包含Cell属性,允许直接获取或设置任意单元格或单元格范围的设置,而无需选择它们。
• CellTextStyle返回Control中的TextStyle/TextStyleFixed,当未预设时,而不是0。
• CellAlignment返回列(ColAlignment或FixedAlignment)中的对齐方式,当未预设时,而不是0。
• CellBackColor/CellForeColor返回Control中的BackColor/ForeColor,当未预设时,而不是0。
• 当设置值为-1时,CellTextStyle/CellAlignment/CellBackColor/CellForeColor不再预设。
• CellChecked属性用于复选框,以及CellBeforeCheck/CellCheck事件。
• 包含ColCheckBoxAlignment/FixedCheckBoxAlignment/ColCheckBoxes属性。
• 包含ColCheckBoxesHitTestInvisible/ColCheckBoxesHitTestInvisibleFixed属性。(无法与鼠标光标交互)
• 包含CheckBoxDrawMode属性以及相应的CheckBoxOwnerDraw事件。
• 包含ColWidthMin属性。(类似于RowHeightMin属性)
• 包含RowHeightMax/ColWidthMax属性。
• 包含RowHeightUniform(仅在运行时)属性。(用于FlexRowSizingModeUniform)
• 包含MouseEnter/MouseLeave事件。
• 包含HitTest方法,指定X和Y。返回值在HitRow/HitCol/HitRowDivider/HitColDivider/HitResult属性中。
• DragRow/DragCol函数用于通过拖动指定的行/列到新位置来重新排列行/列。
• 包含OLEDragDropScroll/OLEDragDropScrollOrientation属性。
• 包含DropHighlight/DropHighlightMode属性(仅在运行时)。
• 包含InsertMark/InsertMarkMode属性(仅在运行时)。
• HitTestInsertMark函数包含指定的X和Y以及可选的After参数。
• 包含InsertMarkColor属性。
• 包含FindItem函数。
• FixedAlignment属性接受索引-1(类似于ColAlignment)以将值应用于所有列。
• 当设置值为-1时,FixedAlignment不再预设。
• 用户调整行和列大小时,鼠标光标现在被剪切。
• CellHasCustomFormatting/CellHasTag属性如果分配了内存则返回True。设置为False以释放内存或设置为True以强制分配。
• CellTag属性用于存储任何额外数据的变体。
• 包含CellEnsureVisible方法,具有可选的可见性参数。(默认为FlexVisibilityCompleteOnly)
• 包含BottomRow/RightCol属性,具有可选的可见性参数。(默认为FlexVisibilityPartialOK)
• RowsVisible/ColsVisible/FixedRowsVisible/FixedColsVisible/FrozenRowsVisible/FrozenColsVisible属性具有可选的可见性参数。(默认为FlexVisibilityCompleteOnly)
• RowIsVisible/ColIsVisible属性包含可选的可见性参数。(默认为FlexVisibilityPartialOK)
• 包含RowHidden/ColHidden属性。(与将RowHeight/ColWidth设置为0相同,但此方法保留原始设置)
• 包含ColKey/ColIndex和RowID/RowIndex属性。(用于标识指定的列/行)
• 包含ColDataType/ColNullable/ColNumericPrecision/ColNumericScale/ColDataCapacity属性。
• 包含ColResizable属性。
• 包含ColLookup属性和LookupConv函数。
• 包含ColFormat/FixedFormat属性。
• 包含RowsPerPage/ColsPerPage属性,返回当前页面上显示的非固定列/行的数量以滚动。(此处没有可见性参数)
• 包含GetSelRange方法,用于检索单元格的选择范围,顺序为Row1<=Row2和Col1<=Col2。
• 包含SelectRange方法,通过单个命令选择一系列单元格或单元格(通过省略RowSel/ColSel)。
• 包含SelectAll方法,通过单个命令选择所有单元格。
• 包含GetMergedRange方法,用于检索给定行/列上的合并单元格。
• 当用户通过鼠标扩展选择时,SelChange事件也会触发。(MSFlexGrid和 MSHFlexGrid的限制)
• 滚动事件在TopRow/LeftCol属性更改时触发。(MSFlexGrid和 MSHFlexGrid的限制)
• 包含BeforeUserResize/AfterUserResize/AfterUserResizeEnd事件。
• 包含BeforeRowColChange/BeforeSelChange事件。
• 复制/剪切/粘贴/删除方法,AutoClipboard属性以及BeforeClipboardAction/AfterClipboardAction事件。
• 包含撤销/重做/重置撤销队列方法,可以撤销/可以重做函数以及撤销限制属性。
• 清除方法包含可选的Where/What参数。
• 清除行信息/清除列信息方法用于清除信息结构。索引-1将清除所有行/列的信息结构。
• 当MergeCells设置为非0值(从不)时,仍然可以选择高亮显示。(MSFlexGrid和 MSHFlexGrid的限制)
• MergeCells可以将多个行和列合并在一起。(MSFlexGrid和 MSHFlexGrid的限制或错误)
• 在MergeCells属性中包含FixedOnly枚举。
• 在Sort属性中包含UseColSort枚举以及相应的ColSort属性。
• 包含ColSortArrow/ColSortArrowAlignment/ColSortArrowColor属性。
• 包含SortArrowColor/RowSortArrows属性。
• 在Sort/ColSort属性中包含货币升序/货币降序和日期升序/日期降序枚举。
• 包含单元格泛洪百分比/单元格泛洪颜色/泛洪颜色属性。
• 包含AutoSize方法。
• 包含BestFitMode属性,用于AutoSize/FormatString。
• 在PictureType属性中包含增强型图元文件枚举。包含壁纸/壁纸对齐属性。
• 包含AllowIncrementalSearch属性以及事件和运行时属性。(增量搜索功能)
• 包含TextWidth/TextHeight函数。
• 包含分隔符双击事件。
• 包含数据刷新方法。
• 包含FlexDataSource属性(仅在运行时)用于通过IVBFlexDataSource接口设置自定义数据源。
• 包含AllowUserEditing属性以及事件和运行时属性。(单元格内编辑功能)
• 包含AllowScrollLock属性,用于检查vbKeyScrollLock的切换状态,以便用户使用箭头键滚动。(类似于Excel)
• 还有一些其他 minor 改进。
&spm=1001.2101.3001.5002&articleId=150058997&d=1&t=3&u=9e4d0fa17a3e4479b46cb9a246301ea4)
513

被折叠的 条评论
为什么被折叠?



