单击 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+PgUp
和 Ctrl+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
.
当我单击我的用户窗体上的按钮时,它会转到相关的 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+PgUp
和 Ctrl+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
.