Коллеги, добрый день еще раз,
Подскажите, пожалуйста. Мне нужно отключить сетку на листах с помощью 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
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
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
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
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 |
Ответы с готовыми решениями:
RAD XE2 Styles — убрать мелкую сетку вокруг трэкбара У меня MS office 2010 starter, случайно сделал на листе Word сетку, как ее убрать? WPF. 3D графика. Как создать цветную сетку?!, одну сетку раскрасить в разные цвета… 2 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
|
09.03.2015, 23:30 |
2 |
Решение Параметры — Дополнительно — Показать параметры для следующего листа — Показывать сетку.
2 |
2 / 2 / 2 Регистрация: 16.09.2013 Сообщений: 42 |
|
10.03.2015, 22:49 [ТС] |
3 |
Казанский, спасибо, помогло
0 |
Группа: Заблокированные Ранг: Новичок Сообщений: 16
Замечаний: |
Есть процедура, которая сохраняет выделенный диапазон в качестве картинки 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