Макрос vba Excel 2016 для установки границ диапазона ячеек с отфильтрованными ячейками внутри выдает ошибку (с Excel 2013 все в порядке) - PullRequest
0 голосов
/ 03 апреля 2019

---- обновлено с более подробной информацией ---

Я создал макрос vba, который отлично работает в Excel 2013, но имеет ошибку в Excel 2016. Макрос очень прост и взят из «записанного макроса»: он устанавливает границы для некоторых ячеек.

Проблема (я полагаю) состоит в том, что в ячейки также входят отфильтрованные строки:

column_1 
cells(1;1) = "aa"
cells(2;1) = 2
cells(3;1) = 1
cells(4;1) = 2
cells(5;1) = 1
cells(6;1) = 1

отфильтровано с "1" в первом ряду

введите описание изображения здесь

Итак, запустив следующий макрос, у вас ошибка «1004» в строке «.weight»

введите описание изображения здесь

Давая ОК, вы получаете: введите описание изображения здесь

и если вы сейчас остановите макрос и попытаетесь сохранить файл, вы получите ошибку: введите описание изображения здесь

Обратите внимание, что это происходит только с Excel 2016, Excel 2013 не имеет проблем

Это полный макрос: Опция Явная

        Sub test()
            Sheets(1).Select
            Range("A1:A6").Select
            Selection.Borders(xlDiagonalDown).LineStyle = xlNone
            Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            With Selection.Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin   ' ==>>>>ERROR HERE
            End With
            With Selection.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Selection.Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Selection.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Selection.Borders(xlInsideVertical)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With Selection.Borders(xlInsideHorizontal)
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .TintAndShade = 0
                .Weight = xlThin
            End With

Пожалуйста, помогите Thx

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я читал документацию Microsoft, и кажется, что выбор не нужен.Попробуйте это:

sub test()

Range("A1:A6").Borders.LineStyle = xlNone

With Range("A1:A6").Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.ColorIndex = 0

.TintAndShade = 0

.Weight = xlThin   ' ==>>ERROR HERE

End With

End sub

Возможно, вам придется бросить ActiveWorksheet перед диапазоном или Sheet ("Sheet1") в зависимости от того, на каком листе вы находитесь, когда выполняется макрос.Надеюсь, это поможет.

0 голосов
/ 03 апреля 2019

Измените диапазон и попробуйте:

Option Explicit

Sub test()

    With ThisWorkbook.Worksheets("Sheet1").Range("A1:A6").Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

End Sub
...