我知道这可能不是最理想的做法,而只是忍受我。
我有一个包含几张桌子的文件。我正在使用userform搜索表/子类别并返回相关值。我想在用户窗体上选择带有一系列选项按钮的子类别,这些按钮将依次设置搜索功能的范围。如果要添加新表或沿着这些行添加任何内容,我还想动态更新选项按钮。
区分子类别/表的标题及其中的项目的唯一方面是子类别/表的标题是粗体。所以我要做的是搜索电子表格的第一列,并以粗体返回任何条目的名称。然后使用这些值来设置选项按钮的名称:)。
以下函数是我尝试在列a中查找以粗体显示的文本实体,返回它们并将每个实体设置为要在另一个函数中使用的单个变量。 bold1
....变量都是全局定义的变量,因为我需要它们在另一个子变量中,page
变量包含要使用的相关页面。目前代码返回一个错误,指出“变量或未设置块”,并使用调试器,我可以看到bold1
....并且所有其他boldx变量都没有设置值。有谁知道发生了什么/如何解决这个问题。
提前致谢:)
Sub SelectBold()
Dim Bcell As Range
For Each Bcell In Worksheets(Page).Range("A1:A500")
If Bcell.Font.Bold = True Then
Set bold1 = Bcell
End If
Next
End Sub
编辑:我简化了上面的功能,以消除混乱并帮助缩小问题范围。我希望上面的函数在变量bold1
中存储找到的单元格的内容(文档中的任何单元格,在此阶段以粗体显示)
答案 0 :(得分:0)
这将返回页面A列中粗体单元格的值数组。
您可以使用列表属性填充包含这些值的组合框或列表框。
ComboBox1.List = getSubCategories(“Sheet1”)
Function getSubCategories(Page As String) As String()
Dim arrSubCategories() As String
Dim count As Long
Dim c As Range
With Worksheets(Page)
For Each c In .Range("A2", .Range("A" & Rows.count).End(xlUp))
If c.Font.Bold Then
ReDim Preserve arrSubCategories(count)
arrSubCategories(count) = c.Value
count = count + 1
End If
Next
End With
getSubCategories = arrSubCategories
End Function
答案 1 :(得分:0)
您可能会发现在找到子类别单元格时返回Range
非常有用:
Function SelectBold(Page As String, colIndex As String) As Range
With Worksheets(Page)
With .Range(colIndex & "1", .Cells(.Rows.Count, colIndex).End(xlUp)).Offset(, .UsedRange.Columns.Count)
.FormulaR1C1 = "=if(isbold(RC[-1]),"""",1)"
.Value = .Value
If WorksheetFunction.CountA(.Cells) < .Rows.Count Then Set SelectBold = Intersect(.SpecialCells(xlCellTypeBlanks).EntireRow, .Parent.Columns(1))
.Clear
End With
End With
End Function
Function IsBold(rCell As Range)
IsBold = rCell.Font.Bold
End Function
可能被利用如下:
Option Explicit
Sub main()
Dim subCategoriesRng As Range, cell As Range
Set subCategoriesRng = SelectBold(Worksheets("bolds").Name, "A") '<--| pass worksheet name and column to search in
If Not subCategoriesRng Is Nothing Then
For Each cell In subCategoriesRng '<--| loop through subcategories cells
'... code
Next cell
End If
End Sub