Почему мой код VBA для удаления строки перемещает флажки в другую строку?

#excel #vba

#excel #vba

Вопрос:

Я написал код, который предназначен для удаления определенной строки в ~ 200 экселях в папке. Каждый Excel имеет одинаковый формат и содержит строку, которая является либо строкой 39, либо строкой 40 со словами «УДАЛИТЬ СТРОКУ ПРИ ПЕЧАТИ» в столбце A. Неизвестно, является ли это строка 39 или 40 для каждого excel. Код предназначен для определения, содержит ли строка 39 или 40 текст «УДАЛИТЬ СТРОКУ ПРИ ПЕЧАТИ» в столбце A, удалите строку для каждого excel в папке, сохраните excels и закройте их. Однако по какой-то причине он перемещает флажки, которые начинаются на 2 строки ниже удаляемой строки. Кроме текстовых полей, больше ничего не перемещается. Я не понимаю, почему это происходит, у кого-нибудь есть какие-либо предложения? Я опубликовал фотографии до / после запуска макроса, а код приведен ниже.

Спасибо!

После запуска макроса VBA

Перед запуском макроса VBA

Код:

 Sub PPGDeleteRowBOLOGNATest()

'Below is used to make code run faster
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim strExtension As String

    
    Const strPath As String = "C:Userssteve.argenDocumentsPPGGW Sampling March 2020PPG Balogna NUMBER 2Final excel sheets"
    ChDir strPath
    strExtension = Dir(strPath amp; "*.xls*")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath amp; strExtension)
        
        
        'wkbSource.Sheets("LowFlow GW front").View = xlNormalView
        
        With wkbSource.Sheets("LowFlow GW front")
            ActiveWindow.View = xlNormalView
        
            If wkbSource.Worksheets("LowFlow GW front").Range("A" amp; 39).Value = "DELETE ROW WHEN PRINT" Then
                wkbSource.Worksheets("LowFlow GW front").Rows(39).EntireRow.Delete
            End If
            
            If wkbSource.Worksheets("LowFlow GW front").Range("A" amp; 40).Value = "DELETE ROW WHEN PRINT" Then
                wkbSource.Worksheets("LowFlow GW front").Rows(40).EntireRow.Delete
            End If
            
            Application.CutCopyMode = False 'If you ever need to copy a large amount of info, this will hide any warnings
            ActiveWindow.View = xlPageBreakPreview
        End With
        
        wkbSource.Close savechanges:=True
        
        strExtension = Dir
    Loop
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
  

Комментарии:

1. Если щелкнуть правой кнопкой мыши по текстовому полю -> Управление форматом -> Свойства, не перемещать или не изменять размер с отмеченными ячейками?

2. Я не могу нажать на флажки. У них есть круг с линией через них. Я вообще не могу редактировать флажки, и я не знаю почему…

3. Я никогда не видел этого раньше и, похоже, не могу воссоздать его. Если ваши элементы управления ActiveX, вам может потребоваться перейти на вкладку разработчик и проверить режим разработки.

4. Я бы проверил, что в удаленной строке есть объединенные ячейки. Объединенные строки в определенных столбцах могут привести к полному удалению слиянием, чтобы переместить вещи вверх или вниз. С другой стороны, если строка удаляется вручную, происходит то же самое?