Как использовать функцию .address для удаления строки? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть куча файлов .xls, которые имеют 6 строк мусора в начале файлов и 1 строку с текстом «Не засекречено» в произвольной строке столбца А. У меня есть код ниже, который удаляет первый 6 строк, а затем находит ячейку с правильным текстом, но я не знаю, как затем выбрать эту строку, так как я понимаю, что функция Find возвращает, как A10, и я не знаю, как разделить ссылку, чтобы выбрать строка 10.

Я полагаю, что адресная функция должна помочь в этом отношении, но у меня возникли проблемы с его работой. В указанном выше пути находится переменная, в которой хранится расположение моих файлов, а x - это ячейка с текстом, нарушающим правила.

Do while files <>""
    Workbooks.Open(path & files).ActiveSheet.Rows("1:6").Delete
    Set x = ActiveWorkbook.ActiveSheet.Range("A:A").Find("Not Classified")
    If Not x Is Nothing Then
        x.Clear 
        'Obviously this only clears the cell with the offending text and I 
        'want to delete the whole row
    End If
    ActiveWorkbook.Close savechanges:=True
    files = Dir()
Loop

Я считаю, что адресная функция должна быть в состоянии помочь в этом отношении, но у меня возникли проблемы с тем, чтобы заставить его работать. В указанном выше пути находится переменная, в которой хранится расположение моих файлов, а x - это ячейка с текстом, нарушающим правила.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019
Option Explicit

Sub test()

    Dim strSearchValue As String
    Dim LastRow As Long
    Dim rngSearch As Range, rngPosition As Range

    With ThisWorkbook.Worksheets("Sheet1")

        strSearchValue = "Not Classified"
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<- Find lastrow to create a range. No need to use thw whole column.

        Set rngSearch = .Range("A1:A" & LastRow) '<- Set your range

        Set rngPosition = rngSearch.Find(strSearchValue) '<- Find the position of the value

        If Not rngPosition Is Nothing Then '<- To avoid error check if the position is not nothing

            MsgBox rngPosition.Address '<- Message box with the address

        End If

        'How to delete row a row. Have in mind that when you delete you must go backwards - from bottom to top to avoid breaking indexing.
        .Rows(rngPosition.Row).EntireRow.Delete

    End With

End Sub
0 голосов
/ 05 апреля 2019

Можно создать объединение обоих диапазонов (строки 1: 6 и строку, содержащую «Не классифицировано»), а затем удалить их.

  dim r as variant

  Do while files <>""
    with Workbooks.Open(path & files)
      with .worksheets(1)  '<~~ know what worksheet you're dealing with
        r = application.match("Not Classified", .range("A:A"), 0)

        if iserror(r) then
            .range("A1:A6").entirerow.Delete
        else
            .range("A1:A6, A" & r).entirerow.Delete
        end if

      end with
      .Close savechanges:=True
    end with
    files = Dir()
  Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...