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