EXCEL VBA(Worksheet_BeforeDoubleClick)事件不断崩溃。 [英] EXCEL VBA (Worksheet_BeforeDoubleClick) event keeps crashing.
问题描述
下面的代码让我的EXCEL崩溃了,我做错了什么?
我的想法是,当我双击一个单元格时(在"I2:J31"范围内) ;)它改变了表上的2个值(相同的ROW不同的列),但在复制之前,我双击一般表的整个ROW的当前值首先清空ROW
以及依赖于的第二个表已点击行的第一个COLUMN的值。
期权明确
'ON VM CHECK或PT检查双击更改最后访问至今日期并按值进行检查
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)
  On Error GoTo ws_exit
  Application.EnableEvents = False
' Const WS_RANGE As String =" I2:J31" '双击将在何处工作的范围
' 如果Target.Cells.Count = 1则为
' 如果不相交(目标,Me.Range(WS_RANGE))什么都没有那么就是
&NBSP; If(Target.Column = 9或Target.Column = 10)和(Target.Row> 1和Target.Row< 32)和Target.Cells.Count = 1然后
&NBSP; &NBSP; &NBSP;昏暗的答案作为整数
&NBSP; &NBSP; &NBSP; answer = MsgBox("您确定要更改今天的上次访问日期吗?",vbYesNo + vbQuestion,"更新LAST VISIT和VISITED BY")
&NBSP; &NBSP; &NBSP;如果回答= vbYes则为
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Dim intLastRow As Long
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet32.Cells(Sheet32.Rows.Count," A")。End(xlUp).Row'查找最后一行的指数
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet32.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value'备份到客户日志
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;选择Case ActiveSheet.Cells(Target.Row,1)'备份旧数据输入到个人CIENT日志
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT1"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet7.Cells(Sheet7.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet7.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT2"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet9.Cells(Sheet9.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet9.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT3"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet12.Cells(Sheet12.Rows.Count," A")。End(xlUp).Row'找到最后一行的指数
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet12.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT4"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet13.Cells(Sheet13.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet13.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT5"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet14.Cells(Sheet14.Rows.Count," A")。End(xlUp).Row'查找最后一行的指数
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet14.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT6"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet16.Cells(Sheet16.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet16.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"MIX"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet18.Cells(Sheet18.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet18.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENT7"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet19.Cells(Sheet19.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet19.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例"CLIENTX"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; intLastRow = Sheet20.Cells(Sheet20.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Sheet20.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;结束选择
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;单元格(Target.Row,3).Value =日期'更改今日最后一次访问日期
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;选择Case Target.Column'更改为由
访问 &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例9
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;单元格(Target.Row,4).Value =" PT"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;案例10
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;单元格(Target.Row,4).Value =" VM"
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP;结束选择
&NBSP; &NBSP; &NBSP;结束如果
&NBSP;结束如果
取消=正确
ws_exit:
&NBSP; Application.EnableEvents = True
End Sub
提前感谢您的支持你的帮助。
Hi Pedro,
>>下面的代码让我的EXCEL崩溃,我做错了什么?
你什么时候得到Excel崩溃?我做了一个简单的测试,修改了你的代码,但我没有重现你的问题。
我的简单代码如下:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)
'On Error GoTo ws_exit
Application.EnableEvents = False
Dim Sheet32 As Worksheet
Set Sheet32 = Worksheets(" Sheet32" )
Dim Sheet7 As Worksheet
Set Sheet7 = Worksheets(" Sheet7")
'Const WS_RANGE As String =" I2:J31" 'RANGE双击将在哪里工作
'如果Target.Cells.Count = 1那么
'如果不相交(Target,Me.Range(WS_RANGE))则没有那么
如果(Target.Column = 9或Target.Column = 10)和(Target.Row> 1和Target.Row< 32)和Target.Cells.Count = 1那么
昏暗的答案作为整数
answer = MsgBox("您确定要更改今天的上次访问日期吗?",vbYesNo + vbQuestion,"更新LAST VISIT和VISITED BY")
如果answer = vbYes则
Dim intLastRow As Long
intLastRow = Sheet32.Cells(Sheet32.Rows.Count," A")。End(xlUp).Row'查找最后行的索引
Sheet32.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value'备份到客户端日志
选择案例ActiveSheet .Cells(Target.Row,1)'备份旧数据进入个人CIENT LOG
Cas e"CLIENT1"
intLastRow = Sheet7.Cells(Sheet7.Rows.Count," A")。End(xlUp).ROW'查找最后行的索引
Sheet7.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT2"
'intLastRow = Sheet9.Cells(Sheet9.Rows.Count," A")。End(xlUp).Row'查找最后一行的索引
'Paper9.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT3"
'intLastRow = Sheet12.Cells(Sheet12.Rows.Count," A")。End(xlUp).ROW'查找最后一行的索引
'Plate12.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT4"
'intLastRow = Sheet13.Cells(Sheet13.Rows.Count," A")。End(xlUp).ROW'查找最后行的索引
'Plate13.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT5"
'intLastRow = Sheet14.Cells(Sheet14.Rows.Count," A")。End(xlUp).ROW'查找最后行的索引
'Plate14.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT6"
'intLastRow = Sheet16.Cells(Sheet16.Rows.Count," A")。End(xlUp).Row'FINDD INDEX OF LAST ROW
'Plate16.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" MIX"
'intLastRow = Sheet18.Cells(Sheet18.Rows.Count," A")。End(xlUp).ROW'查找最后行的索引
'Plate18.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENT7"
'intLastRow = Sheet19.Cells(Sheet19.Rows.Count," A")。End(xlUp).ROW'FINDD INDEX OF LAST ROW
'Plate19.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).EntireRow.Value
'Case" CLIENTX"
'intLastRow = Sheet20.Cells(Sheet20.Rows.Count," A")。End(xlUp).ROW'FINDD INDEX OF LAST ROW
'Plate20.Rows(intLastRow + 1).EntireRow .Value = Sheet1.Rows(Target.Row).ErereRow.Value
结束选择
单元格(Target.Row,3).Value =日期'更改最后访问日期FOR FOR TODAY
选择案例Target.Column'更改由
访问案例9
单元格(Target.Row,4).Value =" PT"
案例10
Cells(Target.Row,4).Value =" VM"
结束选择
结束如果
结束如果
取消= True
ws_exit:
Application.EnableEvents =真
结束子
你在哪里设置Sheet32和Sheet7?我建议你在Worksheet_BeforeDoubleClick事件中设置它们。我建议你一步一步地设置断点并调试你的代码,以检查哪一行导致你的excel崩溃。
如果你能分享给我们你的意见简单的excel文件通过OneDrive和步骤重现您的问题。
最好的问候,
爱德华
The folowing code makes my EXCEL crash, what am im doing wrong?
The idea is that when i double click on a cell (in the range"I2:J31") it changes 2 values on the table (same ROW diferent COLUMN's) but before copy's the current values of the entire ROW that i double click on to a general table first empty ROW and also for a second table that depends on the value of the first COLUMN of the clicked ROW.
Option Explicit
'ON VM CHECK OR PT CHECK DOUBLE CLICK CHANGE LAST VISIT TO TODAYS DATE AND CHECKED BY VALUE ACORDINGLY
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo ws_exit
Application.EnableEvents = False
' Const WS_RANGE As String = "I2:J31" 'RANGE WHERE THE DOUBLE CLICK WILL WORK
' If Target.Cells.Count = 1 Then
' If Not Intersect(Target, Me.Range(WS_RANGE)) Is Nothing Then
If (Target.Column = 9 Or Target.Column = 10) And (Target.Row > 1 And Target.Row < 32) And Target.Cells.Count = 1 Then
Dim answer As Integer
answer = MsgBox("Are you sure you want to change last visit date for today?", vbYesNo + vbQuestion, "Update LAST VISIT and VISITED BY")
If answer = vbYes Then
Dim intLastRow As Long
intLastRow = Sheet32.Cells(Sheet32.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet32.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value 'BACKUP TO CLIENT LOG
Select Case ActiveSheet.Cells(Target.Row, 1) 'BACKUP OLD DATA ENTRY TO INDIVIDUAL CIENT LOG
Case "CLIENT1"
intLastRow = Sheet7.Cells(Sheet7.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet7.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT2"
intLastRow = Sheet9.Cells(Sheet9.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet9.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT3"
intLastRow = Sheet12.Cells(Sheet12.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet12.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT4"
intLastRow = Sheet13.Cells(Sheet13.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet13.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT5"
intLastRow = Sheet14.Cells(Sheet14.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet14.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT6"
intLastRow = Sheet16.Cells(Sheet16.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet16.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "MIX"
intLastRow = Sheet18.Cells(Sheet18.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet18.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENT7"
intLastRow = Sheet19.Cells(Sheet19.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet19.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
Case "CLIENTX"
intLastRow = Sheet20.Cells(Sheet20.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW
Sheet20.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value
End Select
Cells(Target.Row, 3).Value = Date 'CHANGE LAST VISIT DATE FOR TODAY
Select Case Target.Column 'CHANGE VISITED BY
Case 9
Cells(Target.Row, 4).Value = "PT"
Case 10
Cells(Target.Row, 4).Value = "VM"
End Select
End If
End If
Cancel = True
ws_exit:
Application.EnableEvents = True
End Sub
Thank you in advance for your help.
Hi Pedro,
>> The folowing code makes my EXCEL crash, what am im doing wrong?
When did you get Excel crash? I made a simple test with modifying your code, but I failed to reproduce your issue.
My simple code like below:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'On Error GoTo ws_exit Application.EnableEvents = False Dim Sheet32 As Worksheet Set Sheet32 = Worksheets("Sheet32") Dim Sheet7 As Worksheet Set Sheet7 = Worksheets("Sheet7") ' Const WS_RANGE As String = "I2:J31" 'RANGE WHERE THE DOUBLE CLICK WILL WORK ' If Target.Cells.Count = 1 Then ' If Not Intersect(Target, Me.Range(WS_RANGE)) Is Nothing Then If (Target.Column = 9 Or Target.Column = 10) And (Target.Row > 1 And Target.Row < 32) And Target.Cells.Count = 1 Then Dim answer As Integer answer = MsgBox("Are you sure you want to change last visit date for today?", vbYesNo + vbQuestion, "Update LAST VISIT and VISITED BY") If answer = vbYes Then Dim intLastRow As Long intLastRow = Sheet32.Cells(Sheet32.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW Sheet32.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value 'BACKUP TO CLIENT LOG Select Case ActiveSheet.Cells(Target.Row, 1) 'BACKUP OLD DATA ENTRY TO INDIVIDUAL CIENT LOG Case "CLIENT1" intLastRow = Sheet7.Cells(Sheet7.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW Sheet7.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT2" ' intLastRow = Sheet9.Cells(Sheet9.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet9.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT3" ' intLastRow = Sheet12.Cells(Sheet12.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet12.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT4" ' intLastRow = Sheet13.Cells(Sheet13.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet13.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT5" ' intLastRow = Sheet14.Cells(Sheet14.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet14.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT6" ' intLastRow = Sheet16.Cells(Sheet16.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet16.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "MIX" ' intLastRow = Sheet18.Cells(Sheet18.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet18.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENT7" ' intLastRow = Sheet19.Cells(Sheet19.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet19.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value ' Case "CLIENTX" ' intLastRow = Sheet20.Cells(Sheet20.Rows.Count, "A").End(xlUp).Row 'FIND INDEX OF LAST ROW ' Sheet20.Rows(intLastRow + 1).EntireRow.Value = Sheet1.Rows(Target.Row).EntireRow.Value End Select Cells(Target.Row, 3).Value = Date 'CHANGE LAST VISIT DATE FOR TODAY Select Case Target.Column 'CHANGE VISITED BY Case 9 Cells(Target.Row, 4).Value = "PT" Case 10 Cells(Target.Row, 4).Value = "VM" End Select End If End If Cancel = True ws_exit: Application.EnableEvents = True End SubWhere did you set Sheet32 and Sheet7? I suggest you set them in the Worksheet_BeforeDoubleClick event. I suggest you put breakpoint and debug your code step by step to check which line cause your excel crash.
It would be helpful if you could share us your simple excel file through OneDrive and steps to reproduce your issue.
Best Regards,
Edward
这篇关于EXCEL VBA(Worksheet_BeforeDoubleClick)事件不断崩溃。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!