Excel 如何将VBA代码更改为不使用select?
我的代码可以工作,但速度很慢,我希望避免使用select 我尝试了以下几点:Excel 如何将VBA代码更改为不使用select?,excel,vba,select,Excel,Vba,Select,我的代码可以工作,但速度很慢,我希望避免使用select 我尝试了以下几点: Sub PopulateBlastEvents() Dim wsfr As Worksheet Dim wsl As Worksheet Dim BlNumber As String Dim BSStep As Long Dim SI As String Dim Srng As Range Dim Nrng As Range Dim Arng As
Sub PopulateBlastEvents()
Dim wsfr As Worksheet
Dim wsl As Worksheet
Dim BlNumber As String
Dim BSStep As Long
Dim SI As String
Dim Srng As Range
Dim Nrng As Range
Dim Arng As Range
Dim NotF As String
Dim Found As Range
Application.ScreenUpdating = False
NotF = "NO INFO"
BSStep = 1
Set Rrng = Sheets("Blast List").Range("A2:A45")
Set Srng = Sheets("Blast List").Range("E1:R1")
For Each cell In Rrng
If cell <> "" Then
For Each cell2 In Srng
If cell2 <> "" Then
On Error Resume Next
SI = cell.Value
BlNumber = CStr("Blasted " & BSStep)
Set wsfr = Sheets(CStr(BlNumber))
Set wsl = Sheets("Blast List")
With wsfr.Range("A:A")
Set Found = Cells.Find(What:=SI, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Found Is Nothing Then
With wsl.Range("A:A")
Set Found1 = Cells.Find(What:=BlNumber, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).End(xlToRight).Offset(0, 1)
Found1.Value = NotF
End With
Else
With wsl.Range("A:A")
Set Found1 = Cells.Find(What:=BlNumber, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).End(xlToRight).Offset(0, 1)
Found1.Value = Found.Value
End With
End If
End With
End If
Next cell2
BSStep = BSStep + 1
End If
Next cell
Set Arng = ThisWorkbook.Worksheets("Blast List").Range("E3:X3").End(xlDown).Select
Application.ScreenUpdating = True
Columns("A:S").EntireColumn.AutoFit
End Sub
Sub-PopulateBlastEvents()
将wsfr设置为工作表
将wsl设置为工作表
数字作为字符串
步子越长越好
将SI作为字符串
变光Srng As范围
变暗Nrng As范围
Dim Arng As范围
作为字符串的Dim NotF
作为射程找到的昏暗
Application.ScreenUpdating=False
NotF=“无信息”
BSStep=1
设置Rrng=板材(“爆破列表”)。范围(“A2:A45”)
设置Srng=板材(“爆破列表”)。范围(“E1:R1”)
对于Rrng中的每个单元格
如果是单元格“”,则
对于Srng中的每个单元2
如果是“2”,则
出错时继续下一步
SI=单元值
BlNumber=CStr(“爆破”和BSStep)
设置wsfr=板材(CStr(BlNumber))
设置wsl=工作表(“爆炸列表”)
具有wsfr.范围(“A:A”)
Set Found=Cells.Find(What:=SI,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)
如果发现什么都没有
使用wsl.Range(“A:A”)
Set Found1=Cells.Find(What:=BlNumber,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)。结束(xlToRight)。偏移量(0,1)
Found1.Value=NotF
以
其他的
使用wsl.Range(“A:A”)
Set Found1=Cells.Find(What:=BlNumber,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)。结束(xlToRight)。偏移量(0,1)
Found1.Value=Found.Value
以
如果结束
以
如果结束
下一单元2
BSStep=BSStep+1
如果结束
下一个细胞
设置Arng=this工作簿。工作表(“爆炸列表”)。范围(“E3:X3”)。结束(xlDown)。选择
Application.ScreenUpdating=True
列(“A:S”).entireclumn.AutoFit
端接头
代码确实运行,但不返回任何值,因为范围值“rng”保持为零,即使它在工作表中查找该值
以下是我正在使用的需要更改的当前代码:
Sub PopulateBlastEvents()
Dim wsfr As Worksheet
Dim wsl As Worksheet
Dim BlNumber As String
Dim BSStep As Long
Dim SI As String
Dim Srng As Range
Dim Nrng As Range
Dim Rrng As Range
Dim Brng As Range
Dim Arng As Range
Dim NotF As String
Application.ScreenUpdating = False
NotF = "NO INFO"
BSStep = 1
Set Rrng = Sheets("Blast List").Range("A2:A45")
Set Srng = ThisWorkbook.Worksheets("Blast List").Range("E1:R1")
For Each Brng In Rrng.Cells
If Brng <> "" Then
For Each Nrng In Srng.Cells
If Nrng <> "" Then
On Error Resume Next
SI = Nrng.Value
BlNumber = CStr("Blasted " & BSStep)
Set wsfr = ThisWorkbook.Worksheets(CStr(BlNumber))
Set wsl = ThisWorkbook.Worksheets("Blast List")
wsfr.Select
Range("A1").Select
Cells.Find(What:=SI, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Copy
If Err.Description <> "" Then
Sheets("Blast List").Select
Range("A1").Select
Cells.Find(What:=BlNumber, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).End(xlToRight).Offset(0, 1).Select
Selection.Value = NotF
Else
Sheets("Blast List").Select
Range("A1").Select
Cells.Find(What:=BlNumber, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).End(xlToRight).Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End If
Next Nrng
BSStep = BSStep + 1
End If
Next Brng
Set Arng = ThisWorkbook.Worksheets("Blast List").Range("E3:X3").End(xlDown).Select
Application.ScreenUpdating = True
Columns("A:X").EntireColumn.AutoFit
End Sub
Sub-PopulateBlastEvents()
将wsfr设置为工作表
将wsl设置为工作表
数字作为字符串
步子越长越好
将SI作为字符串
变光Srng As范围
变暗Nrng As范围
暗Rrng As范围
变暗Brng As范围
Dim Arng As范围
作为字符串的Dim NotF
Application.ScreenUpdating=False
NotF=“无信息”
BSStep=1
设置Rrng=板材(“爆破列表”)。范围(“A2:A45”)
设置Srng=ThisWorkbook.Worksheets(“爆炸列表”).Range(“E1:R1”)
对于Rrng.单元格中的每个Brng
如果Brng“”则
对于Srng.单元中的每个Nrng
如果Nrng为“”,则
出错时继续下一步
SI=Nrng.值
BlNumber=CStr(“爆破”和BSStep)
设置wsfr=此工作簿。工作表(CStr(BlNumber))
设置wsl=ThisWorkbook.Worksheets(“爆炸列表”)
wsfr.Select
范围(“A1”)。选择
Cells.Find(What:=SI,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)。激活
选择,复制
如果错误描述为“”,则
图纸(“爆破列表”)。选择
范围(“A1”)。选择
Cells.Find(What:=BlNumber,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)。结束(xlToRight)。偏移量(0,1)。选择
Selection.Value=NotF
其他的
图纸(“爆破列表”)。选择
范围(“A1”)。选择
Cells.Find(What:=BlNumber,LookIn:=xlFormulas_
查看:=xlPart,搜索顺序:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False,SearchFormat:=False)。结束(xlToRight)。偏移量(0,1)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
如果结束
如果结束
下一个Nrng
BSStep=BSStep+1
如果结束
下一个Brng
设置Arng=this工作簿。工作表(“爆炸列表”)。范围(“E3:X3”)。结束(xlDown)。选择
Application.ScreenUpdating=True
列(“A:X”).entireclumn.AutoFit
端接头
我真的很想加速代码和我之前发布的所有问题,我被告知不要或避免使用Select
请找人帮忙。
设置rng=Range(“A1”)。查找(What:=SI
等。这只搜索单元格“A1”。您应该将此范围扩展到您的值所在的完整范围,它将正确运行。如果您的数据动态扩展,请使用a。您是否阅读了关于避免选择的文章?我肯定您已经阅读了该文章。@SJR,已经阅读了很多次,以及我通过Google找到的其他文章。这就是我希望更改的原因这段代码。那么问题到底是什么?你可能知道,我们喜欢