Excel VBA - переменная для цикла - PullRequest
1 голос
/ 14 марта 2012

Кажется, я не могу правильно понять свой второй цикл for.Я ищу ячейку со значением 'Persoonlijke prijslijst'.Как только я получу эту ячейку, мне нужно подняться на два и удалить 8 вниз.Когда я отлаживаю, он говорит, что temp = 0, поэтому я предполагаю, что это мой второй цикл for.

Dim i As Integer
For i = 1 To 800
    Range("C" & i).Select
    If Range("C" & i).Value = "Persoonlijke prijslijst" Then
        Dim temp As Integer
        For temp = i - 2 To temp + 8
            Range("C" & temp).EntireRow.Delete Shift:=xlToLeft
        Next temp
    End If
Next i

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Другой способ без циклов 800 раз:

 Sub testing()

Dim rng As Range
Dim fAddress As String
Dim rngRows As Range

With Sheet1.Range("C1:C800")
    Set rng = .Find("Persoonlijke prijslijst")
    If Not rng Is Nothing Then
        fAddress = rng.Address
        Do
        If rngRows Is Nothing Then
            Set rngRows = rows(rng.Row - 2 & ":" & rng.Row + 5)
        Else
            Set rngRows = Union(rngRows, rows(rng.Row - 2 & ":" & rng.Row + 5))
        End If
           Set rng = .FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> fAddress
    End If
End With

rngRows.EntireRow.Delete

End Sub
4 голосов
/ 14 марта 2012

Это то, что вы пытаетесь?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim StrSearch As String
    Dim i As Long

    '~~> Change this to the relevant sheet name        
    Set ws = Sheets("Sheet1")

    StrSearch = "Persoonlijke prijslijst"

    With ws
        For i = 800 To 1 Step -1
            If .Range("C" & i).Value = StrSearch Then
                .Rows(i - 2 & ":" & i + 5).Delete
            End If
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...