Excel VB复选动态表格函数

时间:2015-12-28 04:04:19

标签: excel vba excel-vba

Excel VB复选动态表格函数中的变量

我在项目管理办公室工作,每次有部门要求我们提供某种报告。然后,我们将从我们的数据库和工作时间获取数据,以创建效率低下的报告。

我所做的是,我将数据库中的所有列复制到Excel工作表中,然后创建了一个显示此数据的表单。然后是一个控制表,其中包含所有复选框。每个复选框代表一个列,例如:项目代码,项目标题,顾问名称,项目预算等......

现在我的想法是,我有两组复选框。 1-如上所述,直接链接到数据库数据的常规复选框。 2-表格复选框,类似于分组复选框,例如“财务表格”,“MD董事会表格”等...选择其中一个将从组1中选择多个复选框。有点像参考,如果我想添加更多数据,我可以自定义并选择更多复选框。

现在在表单中我制作了这个简单的公式来提取数据:

=IFERROR(INDEX(INDIRECT(B$1),MATCH($A2,Project_ID,0)),"")

我将引用链接到项目ID号,如公式所示。现在这很好用。在列“A”上我有项目ID,然后在其余列的顶行我有一个链接到数据库头的下拉菜单。数据库表中的每个列都以标题命名。

现在这里是棘手的部分。 我只是做了这样的事情: 对于项目名称复选框,我做了:

Sub CB_Project_Name_Click()

If ActiveSheet.Shapes("CB_Project_Name").ControlFormat.Value = 1 Then
    For i = 0 To 99
        If IsEmpty(Sheets("English").Range("B1").Offset(0, i)) Then
            Sheets("English").Range("B1").Offset(0, i).Value = "Project_Name"
            i = 99
        End If
    Next i
Else
    For i = 0 To 99
        If Sheets("English").Range("B1").Offset(0, i).Value = "Project_Name" Then
            Sheets("English").Range("B1").Offset(0, i).Value = ""
            i = 99
        End If
    Next i
End If

虽然这样做很好......但不是真的...专业,然后我做了相同的几个复选框,但是......我有超过100个复选框,因为我说这不是专业。< / p>

所以我正在尝试锻炼一个函数重复代码,但我似乎无法让它工作。我曾经使用过C ++,我可以使用不必返回数据的函数(void),但这似乎不是VB中的情况。 我尝试了Sub和Function,但显然他们都必须返回一个参数。

我想做的是这样的: 如果数据库头名称为“Project_Budget”,则复选框名为CB_Project_Budget。

Sub CB_List(CB_Name As String, Name As String)
If ActiveSheet.Shapes("CB_Name").ControlFormat.Value = 1 Then
    For i = 0 To 99
        If IsEmpty(Sheets("English").Range("B1").Offset(0, i)) Then
            Sheets("English").Range("B1").Offset(0, i).Value = "Name"
            i = 99
        End If
    Next i
Else
    For i = 0 To 99
        If Sheets("English").Range("B1").Offset(0, i).Value = "Name" Then
            Sheets("English").Range("B1").Offset(0, i).Value = ""
            i = 99
        End If
    Next i
End If

然后我将使用:

CB_List(CB_Project_Budget,Project_Budget)

但这会给我一个错误,因为它需要返回一个参数。

正如你所看到的,最重要的是我希望在函数中实现的复选框名称是一个变量(我知道我在上面的例子中实现了它错误但这只是为了说明我想做什么)以及我在表单中添加的单元格的值。我也想知道它是否可以在C ++中进行字符串操作,所以我也可以从复选框名称中删除“CB_”并将其用作标题名称。

然后我有另一个问题就是按顺序整理我的标题,但那是另一次!

很抱歉很长的帖子:)我试图在论坛上寻找类似的问题,但找不到......我会感激任何帮助。

0 个答案:

没有答案