单击 Excel 用户窗体后无法编辑单元格值

Can't Edit Cell Values After Clicking Excel UserForm

当我单击我的用户窗体上的按钮时,它会转到相关的 sheet(通过 .activate,然后是 End Sub,但我也尝试过。select),但我无法编辑该单元格.但是,当我通过底部窗格正常单击 sheet 时,我可以再次编辑它。

我没有找到 excel 日志或进程管理器,所以我看不到哪些宏可能是 运行ning 或正在加载的数据* 并且可能会影响它 - 有谁知道我在使用用户窗体后无法编辑单元格值的可能原因吗?

这是我为有问题的按钮编写的代码(我添加了“卸载我”部分,希望它能停止剩余的任何其他 UserForm subs:

    Private Sub CommandButton1_Click()
    Sheets("2H Campaigns View").Select
    Unload Me
    End Sub

*我们的 sheet 使用了相当多的外部数据,但如果是这种情况,我假设单击底部窗格进行编辑也不起作用...

我也曾尝试在单击“卸载我”后立即关闭用户窗体(以及可能的宏 运行ning),但无济于事。

编辑:我在每个子单元的末尾放置了一个打印到单元格的函数(在单独的调试 sheet 上)以检查是否还有其他 运行ning单击按钮后,但它显示该按钮(上面的子)是 运行 的最后一个子。因此可以安全地假设问题与以下潜艇无关;隔离到按钮子或按钮子的 运行ning 对工作簿的设置所做的事情....

此 sheet 中使用的其他子项(全部在用户窗体下 - cbSector_Change 和 UserForm_initalize 绘制 sheet 名称用于对页面进行分类的两个菜单;一个是其他的子菜单):

Private Sub cbSector_Change()
If cbSector.Value = "DIST" Then
With cbCampaign
    .RowSource = Worksheets("Master Data").Range("G13").Value
    .ListRows = Worksheets("Master Data").Range("H14").Value
    .Value = Worksheets("Master Data").Range("b16").Value
End With
ElseIf cbSector.Value = "INDU" Then
With cbCampaign
    .RowSource = Worksheets("Master Data").Range("gl7").Value
    .ListRows = Worksheets("Master Data").Range("h17").Value
    .Value = Worksheets("Master Data").Range("b16").Value
End With
ElseIf cbSector.Value = "CS" Then
With cbCampaign
    .RowSource = Worksheets("Master Data").Range("gl8").Value
    .ListRows = Worksheets("Master Data").Range("h18").Value
    .Value = Worksheets("Master Data").Range("b16").Value
End With
End If
End Sub

Private Sub EButton_Click()
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

Private Sub SEButton_Click()
ThisWorkbook.Save
ThisWorkbook.Saved = True
ThisWorkbook.Close
End Sub

Private Sub UserForm_Initialize()

With cbSector
    .RowSource = Worksheets("Master Data").Range("b13").Value
    .ListRows = Worksheets("Master Data").Range("b14").Value
    .Value = Worksheets("Master Data").Range("b12").Value
End With
End Sub
Private Sub cbSelect_Click()

If cbSector.Value = "(none)" Then
    errormsg = "Please Select Sector"
ElseIf cbCampaign.Value = "(none)" Then
    errormsg = "Please Select Campaign"
Else: errormsg = "nothing"
End If

If errormsg = "nothing" Then
      Sheets(cbSector.Value & "_" & cbCampaign.Value).Select
      Unload Me
    Else: MsgBox (errormsg)
End If
End Sub

要启动用户窗体,此代码已附加到工作簿中除 sheet 之一以外的所有按钮上:

Public SheetSelected As Worksheet
Public errormsg As String
Sub CallUserForm()
nav.Show
End Sub

这是对您在评论中提出的最后一个问题的部分回答("would there be any way to hack a manual sheet tab click in vba"?)我不知道如何直接做到这一点,但这是一个模拟使用 Ctrl+PgUpCtrl+PgDn 从一个工作表切换到另一个工作表的键盘快捷键:

Sub PageToSheet(SheetName As String)
    Dim here As Long, there As Long, i As Long

    here = ActiveSheet.Index
    there = Sheets(SheetName).Index
    If here = there Then
        Exit Sub
    ElseIf here < there Then
        For i = 1 To there - here
            Application.SendKeys "^{PGDN}"
        Next i
    Else
        For i = 1 To here - there
            Application.SendKeys "^{PGUP}"
        Next i
    End If
End Sub

当 VBA 编辑器处于活动状态 window 时,这将不起作用。但是,如果您在主 Excel window 处于活动状态时启动以下测试子,它似乎可以工作:

Sub test()
    Dim s As String
    s = InputBox("Enter name of sheet to go to")
    PageToSheet s
End Sub

最好尝试追踪您所看到的错误的来源,甚至尝试将所有数据和代码转移到新的工作簿,以确保您的工作簿中没有莫名其妙的损坏文件本身(这有时是真正奇怪行为背后的原因)。仍然 - 如果你想模拟手册页选项卡,你可以通过 SendKeys.