请教高手。能否让Excel表格中能否优先运行某段VBA代码。如果成功,我将给您加100分

下面这段代码(第1段代码)作用是把Q列的数据自动复制到对应的AI列、AK列、AM列……(每隔2列)[先看AI列中有无数据,如果对应的AI列空白,Q列的数据就粘贴在AI列,如果AI列中有数据,看AK列……]粘贴完成后,删除已被复制了的Q列和他后面辅助列中数据。
第2段代码是执行第一段代码后续,在AI列、AK列、AM列……(每隔2列)输入数据后,分别在他们的后面对应的列内输入时间

该代码本身没有问题,如果是一个空的Excel表格,他的运行速度很快。但在实际使用中有点因为有其他公式或本身的问题,造成运行速度很慢。在实际表格中(我的表格中),该代码要一行一行的计算,哪怕整个表格Q列只有一个数据,但如果他在第5000行,如果运行该代码,需要2个小时,才能结束。好郁闷!但数据如果只在第2行,他的速度还是不错的
在实际使用中,我每次需要处理的数据大约300行,(行数是随机的),随着表格的行数的增加,该代码的运行速度越来越慢。
所以我在想能不能在Excel表格中,在运行该段代码时,忽略其他的程序、公式,将他们都关闭了,只先运行该段代码,运行结束在运行其他的。如果您的方法能通过检测,我给您加100分
Public Sub iSub()
Dim R&, r0&, c%, c0%, c1%

r0 = 2 '开始的行位置
c0 = Range("Q1").Column '需要被复制的列位置设置在Q列
c1 = Range("AI1").Column '粘贴的列位置,最初设置在AI列

For R = r0 To Cells(65536, c0).End(xlUp).Row
c = Cells(R, 60).End(xlToLeft).Column '60表示从左边开始到可以最多粘贴到第60-1列,本代码先检查第60列有无数据,没有往前检测,直到有数据,停止,该数据可以根据需要修改成需要的数据
If c < c1 Then c = c1 Else c = c + 1 'c+2表示每隔2行粘贴,如果是c+1表示每隔一行开始粘贴
Cells(R, c).Value = Cells(R, c0).Value
Cells(R, c0).Resize(1, 2).ClearContents '这代码的意思是删除被复制列,和他后面的一列本例是Q列和他后面的R列。
Next
End Sub
Private Sub CommandButton1_Click()
Sheet1.iSub
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R&
If Target.Row > 1 And Target.Column = 18 Then '18表示在第18列也就是I列任意输入数据
R = Target.Row
If Cells(R, 16) > 0 Then '检查第16列的是否大于0,然后复制
Cells(R, 17) = Cells(R, 16) 'Cells(R, 17) 表示H列 同样cells(R,7)表示G列
End If
End If
If Target.Row = 1 Or Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
Select Case Target.Column
Case Is = 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59
If Target.Value > 0 Then
With Target.Offset(0, 1)
.Value = Now
.NumberFormatLocal = "m-d "
End With
End If

End Select
Application.EnableEvents = True
End Sub

开始时
Application.ScreenUpdating = False '关闭屏幕刷新
Application.Calculation = xlManual '手动计算
结束前
Application.ScreenUpdating = True '打开屏幕刷新
Application.Calculation = xlAutomatic '自动重算
温馨提示:答案为网友推荐,仅供参考
相似回答