更改僅在範圍以 A1 或 T1 等單元格開頭時才起作用的宏

更改僅在範圍以 A1 或 T1 等單元格開頭時才起作用的宏

我有一個可以運行的宏,但我想更改單元格範圍

Set SearchRange = Range("E1:E12") to  
Set SearchRange = Range("A21:A32")

我已經對程式碼進行了更改,但是當我運行它時它不起作用,並且我不確定問題是什麼。我在程式碼下面有解釋。

Sub Part()
    Dim SearchRange As Range, _
        DashPair    As Variant, _
        PairParts   As Variant, _
        SearchVal   As Variant, _
        FoundPos    As Variant, _
        NextCol     As Long

    Set SearchRange = Range("A21:A32")
    For Each DashPair In Range("B17, F17, J17")
        Err.Clear
        NextCol = 1
        If DashPair.Value <> "" Then
            PairParts = Split(DashPair, "-")
            If PairParts(1) = "15" Then
                SearchVal = DashPair.Offset(RowOffset:=1).Value

                On Error Resume Next
                 Set FoundPos = SearchRange.Find(SearchVal, LookAt:=xlWhole)
                If Not FoundPos Is Nothing Then
                    FoundPos = FoundPos.Row
                    ' find first empty column right of E
                    While SearchRange(FoundPos).Offset(ColumnOffset:=NextCol).Value <> ""
                        NextCol = NextCol + 1
                    Wend

                    PairParts(1) = PairParts(1) + 1
                    PairParts = Join(PairParts, "-")

                    With SearchRange(FoundPos).Offset(ColumnOffset:=NextCol)
                        .NumberFormat = "@"
                        .Value = "" & PairParts & ""
                    End With

                    DashPair.Resize(ColumnSize:=3).ClearContents
                End If
            End If  '15 found
        End If
    Next DashPair
End Sub

具有預期結果的範例。

  • 請參閱我的 Excel 範例,該巨集目前僅在儲存格 B17、F17 和 J17 中搜尋 15(作為最後一個數字 20-15 等)。當它得到肯定結果時,它會引用其下方的儲存格,並使用該數字在儲存格 A21:A32 中搜尋符合項,並將複製內容貼到其右側的相鄰儲存格中。

  • 範例:儲存格 B30 有一個 20-15,使用下面的儲存格,B18 有一個 1。 1 是 A21:A32 範圍內的搜尋編號。一旦在 A21:A32 範圍內找到,請將 20-15 放入右側相鄰的單元格 (B21) 中,並將最後一個數字加 1,使其變為 20-16。

  • 對所有儲存格執行相同的操作:B17、F17 和 J17。

  • 寫入後刪除儲存格 B17/C17/D17 中的所有內容。我的 Excel 工作表中有兩個範例需要發生相同的事情。

excel表格

答案1

您的程式碼的問題在於SearchRange(FoundPos).僅當範圍從第 1 行開始時,此方法才適用於此應用程式SearchRange

透過將範圍變更為A21:A32,您的 FindPos 變數將21適用於第一種情況。
這會導致SearchRange(FoundPos)返回範圍的第 21 行,即A41.

有很多方法可以解決此問題,但為了對程式碼進行最小的更改,您可以嘗試替換SearchRange(FoundPos)ActiveSheet.Cells(FoundPos, SearchRange.Column).

相關內容