vba - 在 VBA 中传递值
问题描述
在我发布的代码中,我使用的是一个名为“ ACDS Test”的复选框,每当检查它时会创建一个工作表,然后在未选中时,它将调用上部功能并删除表格。
我正在尝试添加一个消息框,该消息框基本上像故障保险一样工作,以确保他们想要删除该页面。如果他们说他们不想删除该页面,那么我希望复选框保持选中状态。
出于某种原因,当我尝试传递值以确保复选框保持选中状态时,我收到此错误消息,但我无法弄清楚原因。
错误出现在行: Sub ACDSTest_Click(CorrectValue As Integer) 并且具体错误是:“编译错误:过程声明与具有相同名称的事件或过程的描述不匹配”。
任何帮助深表感谢!如果需要更多说明,请随时询问!
Sub DeleteWorksheet(NameSheet As String)
Dim Ans As Long
Dim t As String
Dim CorrectValue As Integer
Dim i As Long, k As Long
k = Sheets.Count
Ans = MsgBox("Would you like to take this test off of the form?", vbYesNo)
Select Case Ans
Case vbYes
'Code reads through each page and finds one with corresponding name to string t
'Once it finds the correct page, it deletes it
For i = k To 1 Step -1
t = Sheets(i).Name
If t = NameSheet Then
Sheets(i).Delete
End If
Next i
CorrectValue = 0
Case vbNo
CorrectValue = 1
End Select
End Sub
Sub ACDSTest_Click(CorrectValue As Integer)
Dim NameSheet As String
Dim NameValue As String
NameSheet = "ACDS"
NameValue = "ACDS Test"
If ACDSTest.Value = True Then
CreateWorksheet (NameSheet), (NameValue)
Worksheets("Sheet1").Activate
Else
DeleteWorksheet (NameSheet)
If CorrectValue = 1 Then
ActiveSheet.Shapes("ACDS Test").ControlFormat.Value = 1
End If
End If
End Sub
解决方案
这里的问题是,CorrectValue
您在其中定义DeleteWorksheet
的变量不存在于变量的上下文中,也不存在于ACDSTest_Click
子例程的上下文中。这是因为在子例程或函数中定义的变量对于这些函数是局部的。为了纠正这个问题,我将转换DeleteWorksheet
为如下所示的函数。
此外,触发的事件Private Sub ACDSTest_Click()
无法处理将值传递给该函数,因此将其更改为Sub ACDSTest_Click(CorrectValue As Integer)
会导致错误。
Function DeleteWorksheet(ByVal SheetName As String) As Boolean
On Error GoTo SheetDNE
SheetName = Sheets(SheetName).Name 'Check if sheet exists w/o other objects
On Error GoTo 0
Select Case MsgBox("Would you like to take this test off of the form?", vbYesNo)
Case vbYes
Application.DisplayAlerts = False
Sheets(SheetName).Delete
Application.DisplayAlerts = True
DeleteWorksheet = True
Case Else: DeleteWorksheet = False
End Select
Exit Function 'Exit The Function w/o error
SheetDNE: 'Sheet Does Not Exist
MsgBox "The indicated sheet, " & SheetName & ", does not exist", vbOKOnly
End Function
和
Private Sub ACDSTest_Click()
Dim NameSheet As String
Dim NameValue As String
NameSheet = "ACDS"
NameValue = "ACDS Test"
If ACDSTest.Value = True Then
CreateWorksheet (NameSheet), (NameValue)
Worksheets("Sheet1").Activate
Else
If Not DeleteWorksheet(NameSheet) Then _
ActiveSheet.Shapes("ACDS Test").ControlFormat.Value = 1
End If
End Sub
推荐阅读
- c# - C#跳过或忽略循环中的空框不起作用
- http - 我们如何通过 GoLang 中的 http post 方法更新记录?
- jquery - 从服务器端数据表到 Api 控制器的 Jquery Ajax 调用,大约 15 分钟浏览器不活动后出现 404 错误
- javascript - Can axios request wait until the response is received?
- sql - 如何求单个产品占供应商总收入的百分比?
- python - 与搜索词匹配时,如何在 QListWidget 上显示项目
- javascript - 上传到服务器后循环遍历数组时出错
- c - C:如何处理 bash 命令的所有退出代码状态
- r - 如何使用 for 循环绘制 ggplot?
- python-3.x - 如何让我的聊天过滤器阻止绕过符号、大写字母和空格等?(discord.py 重写)