Vba 更新单元格值
我想要一个应用程序,这样当我双击某个单元格时,UserForm就会弹出,然后有两个文本框,我可以在其中键入问题的标题和描述。在键入问题和描述并单击Save按钮后,我希望在最初选择的整个单元格中显示问题的标题并以某种方式指出 现在,当我双击单元格时,UserForm会像它应该的那样弹出。但是,当我键入问题的标题和描述并单击“保存”时,UserForm会一直打开,我无法关闭它Vba 更新单元格值,vba,excel,Vba,Excel,我想要一个应用程序,这样当我双击某个单元格时,UserForm就会弹出,然后有两个文本框,我可以在其中键入问题的标题和描述。在键入问题和描述并单击Save按钮后,我希望在最初选择的整个单元格中显示问题的标题并以某种方式指出 现在,当我双击单元格时,UserForm会像它应该的那样弹出。但是,当我键入问题的标题和描述并单击“保存”时,UserForm会一直打开,我无法关闭它 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim Calrange As Range
Dim Cell As Range
Set Calrange = Range("A4:G12")
Cancel = True
For Each Cell In Calrange
task_form.Show
Next
End Sub
以及用户表单中SaveButton的代码:
Private Sub SaveButton_Click()
Application.ScreenUpdating = False
ActiveCell.Value = Me.title.Value
ActiveCell.Value = Me.description_problem.Value
Unload task_form
End Sub
此外,我有一个动态数量的工作表。现在,我将下面的代码粘贴到当前打开的工作表中。然而,我不知道最初会有多少工作表。在图中,我将代码粘贴在“Sheet1”中,但是,当我执行代码时,可以创建十个工作表,我希望此函数能够为每个工作表工作
用户表单很棘手
处理此问题的最佳方法是使用任务表单。隐藏而不是卸载任务表单,然后在任务表单之后卸载它。显示。这样做意味着您不必依赖于ActiveCell
,您可以使用双击事件中的目标,如下所示:
task_form.Show
Target.Value = Me.title.Value
Target.Value = Me.description_problem.Value
unload task_form
这意味着Target.Value被设置为title值,然后被description\u problem值覆盖,我认为您不希望这样
这样可能更好:
task_form.Show
Target.Value = Me.title.Value & vblf & Me.description_problem.Value
unload task_form
vblf
在两条语句之间插入一个结转返回
要回答关于在工作表之间移动代码的其他问题,如果右键单击工作表并以这种方式复制,代码也会被复制,因此您可以设置一个模板工作表,并在需要时复制代码
或者,您可以使用工作簿级别的事件,该事件将捕获任何工作表上的双击:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
End Sub
这在“ThisWorkbook”模块中。请记住,这将在工作表级别的代码之后运行,因此请将代码放在工作表模块或工作簿模块中,但不能同时放在两者中
希望这有帮助 哪里是Application.ScreenUpdate=True
?你需要再次打开它…@DirkReichel抱歉,我在不知道它是什么的情况下添加了它。我是VBA新手。我删除了它,因为我认为它根本不会影响功能。Application.ScreenUpdate设置Excel是否会更新(重画)屏幕。如果在写入宏中的许多单元格之前禁用此选项,则会显著加快代码速度,但之后需要重新启用它,否则用户将以奇怪的方式显示屏幕。Application.ScreenUpdate仅在子运行时保持关闭-它将自动切换回。。。。这并不意味着在代码中显式设置它不是一种好的做法;-)
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
End Sub