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

时间:2015-08-17 10:41:09

标签: excel vba excel-vba userform

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

我还没有找到excel日志或进程管理器,因此我无法看到正在运行的宏或正在加载的数据*并且可能影响到这一点 - 有没有人知道我可能的原因&#39 ; t使用UserForm后编辑单元格值?

这是我的相关按钮的代码(我添加了卸载我的部分,希望它会停止任何其他UserForm潜在客户:

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

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

我也尝试在点击卸载我之后立即关闭UserForm(以及可能运行的那些宏),但无济于事。

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

此工作表中使用的其他子目录(全部在UserForm下 - cbSector_Change和UserForm_initalize绘制工作表名称,用于分类页面的两个菜单;一个是另一个的子菜单):

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

要启动UserForm,此代码将附加到工作簿中除一个工作表之外的所有工作表上的按钮上:

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

1 个答案:

答案 0 :(得分:0)

这是你在评论中提到的最后一个问题的部分答案(“有没有办法破解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编辑器是活动窗口时,这将不起作用。但是,如果在主Excel窗口处于活动状态时启动以下测试子,则它似乎有效:

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

最好是尝试跟踪您看到的错误来源,甚至尝试将所有数据和代码传输到新工作簿,以确保您在文件本身中没有无法解释的损坏(有时真正奇怪的行为背后是什么)。仍然 - 如果您想通过SendKeys模拟手册页选项卡。