Убрать сетку vba excel

Коллеги, добрый день еще раз,

Подскажите, пожалуйста. Мне нужно отключить сетку на листах с помощью VBA в определенных файлах, при этом не влияя на работу других открытых книг.
Вроде бы нашёл, то что может мне помочь, но не могу понять, как работает эта функция:

Код
Private Sub TurnOffGridLines(target As Worksheet)
    Dim view As WorksheetView
    For Each view In target.Parent.Windows(1).SheetViews
        If view.Sheet.Name = target.Name Then
            view.DisplayGridlines = False
            Exit Sub
        End If
    Next
End Sub

Буду признателен за подсказку.

Спасибо заранее.

I have a VBA macro over Excel 2013 which generate a separate excel report. In this excel report that is created, I would like to turn off the GridLines.

The only piece of code that I come across to make this happens is as below

ActiveWindow.DisplayGridlines = False

However, this excel is generated in the background i.e.,

Dim appObject As New Excel.Application
appObject.Visible = False

Which means that this report is not the ActiveWindow. Is there an alternate way of turning off the gridlines without using the ActiveWindow object?

asked Nov 1, 2016 at 20:46

tempidope's user avatar

5

If you have a reference to the workbook, you can just iterate over all of the Windows in its collection. If the application isn’t visible, you should only get 1 but it’s safer than trying to hard code an index:

Private Sub ToggleGridLines(target As Workbook)
    Dim wnd As Window
    For Each wnd In target.Windows
        wnd.DisplayGridlines = False
    Next
End Sub

Note that this will set change the display on the active worksheet in the workbook — why this is a property of the window and not the worksheet is beyond me.

EDIT:

Thanks to the link that @Tim shared, I realized I’d completely spaced off the SheetViews collection. This should turn off gridlines for an arbitrary Worksheet object:

Private Sub TurnOffGridLines(target As Worksheet)
    Dim view As WorksheetView
    For Each view In target.Parent.Windows(1).SheetViews
        If view.Sheet.Name = target.Name Then
            view.DisplayGridlines = False
            Exit Sub
        End If
    Next
End Sub

answered Nov 1, 2016 at 21:14

Comintern's user avatar

CominternComintern

21.7k5 gold badges33 silver badges80 bronze badges

3

The ActiveWindow is a member of the Windows objects collection. As with any collection, simply refer to the actual window by name rather than by specifying the active window. eg

Windows("My Workbook.xls").DisplayGridlines = False

answered Nov 1, 2016 at 21:00

Tim's user avatar

TimTim

2,6333 gold badges25 silver badges47 bronze badges

3

We can either do it as «Comintern» suggested or activating the wanted sheets to execute de adequate line of code in a loop.
I tried the code posted above in several ways and I’m posting the snippet that worked the best for me:

Sub GridLines(Optional target As Worksheet, Optional display As Boolean = True)

    Dim oWnd As Window
    Dim oShView As WorksheetView
    If IsMissing(target) Or target Is Nothing Then
        For Each oShView In ActiveSheet.Parent.Windows(1).SheetViews
            oShView.DisplayGridlines = display
        Next
    Else
        For Each oShView In target.Parent.Windows(1).SheetViews
            If oShView.Sheet.Name = target.Name Then
                oShView.DisplayGridlines = display
                Exit For
            End If
        Next
    End If
    Set oShView = Nothing
    Set oWnd = Nothing
End Sub

Any feedback is very welcomed

answered Aug 29, 2020 at 10:36

João Batista's user avatar

2 / 2 / 2

Регистрация: 16.09.2013

Сообщений: 42

1

09.03.2015, 23:25. Показов 3696. Ответов 2


Студворк — интернет-сервис помощи студентам

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



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.03.2015, 23:25

Ответы с готовыми решениями:

Как убрать сетку в PhotoshopCC-2014?
Вечер добрый, пользовался я PhotoshopCS4E, но случилось маленькое несчастье, купил ноут на…

RAD XE2 Styles — убрать мелкую сетку вокруг трэкбара
Вот возникла небольшая проблема, если поставить любой стиль кроме стандартного ( windows) то не…

У меня MS office 2010 starter, случайно сделал на листе Word сетку, как ее убрать?
На печать не влияеет, просмотр перед печатьючистый без сетки, а на экране сетка мешает и писать и…

WPF. 3D графика. Как создать цветную сетку?!, одну сетку раскрасить в разные цвета…
Подскажите,люди добрые, как справится с WPF приложением….Чахну над XAML…
Всевозможные…

2

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

09.03.2015, 23:30

2

Лучший ответ Сообщение было отмечено JFF_by как решение

Решение

Параметры — Дополнительно — Показать параметры для следующего листа — Показывать сетку.
Запишите это действие макрорекордером и увидите, как это выглядит на VBA.
Аналогично запишите действия с фоном.



2



2 / 2 / 2

Регистрация: 16.09.2013

Сообщений: 42

10.03.2015, 22:49

 [ТС]

3

Казанский, спасибо, помогло



0



Группа: Заблокированные

Ранг: Новичок

Сообщений: 16


Репутация:

-5

±

Замечаний:
40% ±


Excel 2007

Есть процедура, которая сохраняет выделенный диапазон в качестве картинки jpg

[vba]

Код

Public Sub СохранитьРегион()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

       Activewindows.DisplayGridlines = False
Activewindows.DisplayZeros = False

                s = ActiveWorkbook.FullName
     ‘Поиск расширения
     a = InStr(1, s, «.», vbTextCompare)
     имя = Left(ActiveWorkbook.FullName, a) + «jpg»

           With Selection
         .CopyPicture
         Set oChart = ActiveSheet.ChartObjects.Add(.Left, .Top, .Width, .Height)
         With oChart.Chart
             .ChartArea.Border.LineStyle = 0
             .Paste
             .Export Filename:=имя, FilterName:=»jpg»
             .Parent.Delete
         End With
     End With

           Activewindows.DisplayGridlines = True
     Activewindows.DisplayZeros = True

           Application.DisplayAlerts = True
     Application.ScreenUpdating = True

End Sub

[/vba]

Отключает и включает сетку
Activewindows.DisplayGridlines = False

Существуют, судя по помощи? еще и такой объект
WorksheetView
Почему-то он работает только на активной странице.
Как отключить показ сетки на неактивной странице?

У меня есть макрос VBA над Excel 2013, который генерирует отдельный отчет Excel. В этом отчете Excel, который создан, я хотел бы отключить GridLines.

Единственный фрагмент кода, с которым я столкнулся, чтобы это произошло, выглядит следующим образом:

ActiveWindow.DisplayGridlines = False

Однако этот Excel создается в фоновом режиме, т.е.

Dim appObject As New Excel.Application
appObject.Visible = False

Это означает, что этот отчет не является ActiveWindow. Есть ли альтернативный способ отключения линий сетки без использования объекта ActiveWindow?

3 ответа

Лучший ответ

Если у вас есть ссылка на книгу, вы можете просто перебрать все окна в ее коллекции. Если приложение не отображается, вы должны получить только 1, но это безопаснее, чем пытаться жестко кодировать индекс:

Private Sub ToggleGridLines(target As Workbook)
    Dim wnd As Window
    For Each wnd In target.Windows
        wnd.DisplayGridlines = False
    Next
End Sub

Обратите внимание, что это приведет к изменению отображения на активном листе в книге — почему это свойство окна, а не рабочий лист, вне меня.

< Сильный > EDIT :

Благодаря ссылке, которой поделился @Tim, я понял, что полностью отказался от коллекции SheetViews. Это должно отключить линии сетки для произвольного объекта Worksheet:

Private Sub TurnOffGridLines(target As Worksheet)
    Dim view As WorksheetView
    For Each view In target.Parent.Windows(1).SheetViews
        If view.Sheet.Name = target.Name Then
            view.DisplayGridlines = False
            Exit Sub
        End If
    Next
End Sub


13

Comintern
1 Ноя 2016 в 22:25

ActiveWindow является членом коллекции объектов Windows. Как и в случае с любой коллекцией, просто обращайтесь к фактическому окну по имени, а не указывая активное окно. например

Windows("My Workbook.xls").DisplayGridlines = False

Мы можем либо сделать это так, как предлагал «Коминтерн», либо активировать требуемые листы для выполнения соответствующей строки кода в цикле. Я попробовал приведенный выше код несколькими способами и публикую фрагмент, который мне больше всего подошел:

Sub GridLines(Optional target As Worksheet, Optional display As Boolean = True)

    Dim oWnd As Window
    Dim oShView As WorksheetView
    If IsMissing(target) Or target Is Nothing Then
        For Each oShView In ActiveSheet.Parent.Windows(1).SheetViews
            oShView.DisplayGridlines = display
        Next
    Else
        For Each oShView In target.Parent.Windows(1).SheetViews
            If oShView.Sheet.Name = target.Name Then
                oShView.DisplayGridlines = display
                Exit For
            End If
        Next
    End If
    Set oShView = Nothing
    Set oWnd = Nothing
End Sub

Любые отзывы очень приветствуются


0

João Batista
29 Авг 2020 в 10:36

Понравилась статья? Поделить с друзьями:
  • Убрать связь с другими файлами excel
  • Убрать рисунок за текст в word
  • Убрать редактор в word
  • Убрать пробелы в списке word
  • Убрать пробелы в excel после числа