Excel 如何将VBA代码更改为不使用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

我的代码可以工作,但速度很慢,我希望避免使用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 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找到的其他文章。这就是我希望更改的原因这段代码。那么问题到底是什么?你可能知道,我们喜欢