Vba Excel VB复选框动态窗体函数中的变量

Vba Excel VB复选框动态窗体函数中的变量,vba,excel,Vba,Excel,Excel VB复选框动态窗体函数中的变量 我在一个项目管理办公室工作,每当一个部门要求我们提供某种报告时。然后,我们将从数据库和工作时间中获取数据,以创建效率低下的报告 我所做的是,我将数据库中的所有列复制到一个excel表中,然后我创建了一个表单表来显示这些数据。然后是包含所有复选框的控制表。每个复选框代表一列,例如:项目代码、项目标题、顾问名称、项目预算等 现在我的想法是,我有两组复选框。1-与上述数据库数据直接链接的正常复选框。 2-表单复选框,类似于分组复选框,例如,“财务表单”、“M

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多个复选框,正如我所说,这是不专业的

因此,我试图训练一个函数来重复代码,但我似乎无法让它工作。我曾经使用C++,我可以使用不必返回数据(空隙)的函数,但是在VB中这似乎不是这样。 我尝试了Sub和Function,但显然它们都必须返回一个参数

我想做的是这样的: 如果数据库标题名为“Project\u Budget”,则复选框名为CB\u Project\u 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++那样进行字符串操作,所以我也可以从复选框名称中删除“CBY”,并将其用作头名。 然后,我有另一个问题,排序我的标题,但这是为另一个时间


抱歉发了这么长的帖子:)我试图在论坛上查找类似的问题,但找不到。。。非常感谢您的帮助。

“但这给了我一个错误,因为它需要返回一个参数。”这是因为您在VBA中调用
时没有使用正确的语法。尝试
CB\u列出CB\u项目预算,项目预算
不带括号。噢哇。。。我觉得很傻。我认为它是有效的,更棒的是,它确实是函数中的一个变量!对于字符串操作,我刚才使用了“(“CB_”&name)”。。。我想知道我是否能让它变得更容易。。。该函数将根据复选框名称工作!“但这给了我一个错误,因为它需要返回一个参数。”这是因为在VBA中调用
Sub
时没有使用正确的语法。尝试
CB\u列出CB\u项目预算,项目预算
不带括号。噢哇。。。我觉得很傻。我认为它是有效的,更棒的是,它确实是函数中的一个变量!对于字符串操作,我刚才使用了“(“CB_”&name)”。。。我想知道我是否能让它变得更容易。。。该函数将根据复选框名称工作!