Имеется два листа с таблицами. Предполагается, что форматы (не значения , а именно форматы ) ячеек с одинаковым адресом в двух листах должны совпадать. Подскажите пожалуйста как взять все форматы ячеек из листа "Прав" и сравнить с форматами ячеек из листа "Неправ" и вывести в новом листе , те адреса ячеек , которые в обоих листах имеют разное форматирование (размер шрифта, тип границ, числи или текст и тд)... При этом, нужно сравнивать только те форматы, которые используются при копировании форматирования ячеек с использованием "кнопки с кисточкой" в панели инструментов Экселя...
Чтобы узнать какие форматы в ячейке А1 я попытался использовать [vba]
Код
Debug.Print Range("A1").value(11)
[/vba] , но это выражение возвращает весь список форматов ячейки А1 в XML виде, где указано даже наименование Листа... Но как из этого текста XML вытянуть именно ,те параметры форматирования ячейки, которые используются Экселем , когда копируешь форматы одной ячейки в другую ячейку на другом листе с использованием "кнопочки с кисточкой" на панели инструментов и сравнить эти форматы с ячейкой А1 из другого листа?
То есть, как можно найти различие в форматах, которые копируются через "кнопочку с кисточкой", для ячеек с одинаковыми адресом в разных листах и вывести адреса несовпадающих по форматированию ячеек в новый лист ?
Всем привет!
Имеется два листа с таблицами. Предполагается, что форматы (не значения , а именно форматы ) ячеек с одинаковым адресом в двух листах должны совпадать. Подскажите пожалуйста как взять все форматы ячеек из листа "Прав" и сравнить с форматами ячеек из листа "Неправ" и вывести в новом листе , те адреса ячеек , которые в обоих листах имеют разное форматирование (размер шрифта, тип границ, числи или текст и тд)... При этом, нужно сравнивать только те форматы, которые используются при копировании форматирования ячеек с использованием "кнопки с кисточкой" в панели инструментов Экселя...
Чтобы узнать какие форматы в ячейке А1 я попытался использовать [vba]
Код
Debug.Print Range("A1").value(11)
[/vba] , но это выражение возвращает весь список форматов ячейки А1 в XML виде, где указано даже наименование Листа... Но как из этого текста XML вытянуть именно ,те параметры форматирования ячейки, которые используются Экселем , когда копируешь форматы одной ячейки в другую ячейку на другом листе с использованием "кнопочки с кисточкой" на панели инструментов и сравнить эти форматы с ячейкой А1 из другого листа?
То есть, как можно найти различие в форматах, которые копируются через "кнопочку с кисточкой", для ячеек с одинаковыми адресом в разных листах и вывести адреса несовпадающих по форматированию ячеек в новый лист ?t330
то различий быть не должно. Какова дальнейшая цель этих манипуляций? Если надо привести формат листа Неправ к формату Прав, достаточно выделить столбцы на листе Прав (именно столбцы, а не диапазон), нажать "кнопку с кисточкой" и провести по тем же столбцам на листе Неправ
то различий быть не должно. Какова дальнейшая цель этих манипуляций? Если надо привести формат листа Неправ к формату Прав, достаточно выделить столбцы на листе Прав (именно столбцы, а не диапазон), нажать "кнопку с кисточкой" и провести по тем же столбцам на листе НеправPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Если надо привести формат листа Неправ к формату Прав, достаточно выделить столбцы на листе Прав (именно столбцы, а не диапазон), нажать "кнопку с кисточкой" и провести по тем же столбцам на листе Неправ
Да, одна из конечных целей такая, но главная цель узнать в каких ячейках в таблицах "Прав" и "Неправ" различаются форматы и какие именно форматы различаются (шрифт или может тип данных или цвет или границы и тд) , чтобы в дальнейшем сразу исключить в принципе получение таблиц с неправильными форматами...
То есть, нужно понять что не так с форматами ячеек в таблице "Неправ"...
Если надо привести формат листа Неправ к формату Прав, достаточно выделить столбцы на листе Прав (именно столбцы, а не диапазон), нажать "кнопку с кисточкой" и провести по тем же столбцам на листе Неправ
Да, одна из конечных целей такая, но главная цель узнать в каких ячейках в таблицах "Прав" и "Неправ" различаются форматы и какие именно форматы различаются (шрифт или может тип данных или цвет или границы и тд) , чтобы в дальнейшем сразу исключить в принципе получение таблиц с неправильными форматами...
То есть, нужно понять что не так с форматами ячеек в таблице "Неправ"...t330
но главная цель узнать в каких ячейках в таблицах "Прав" и "Неправ" различаются форматы
Это же элементарно. Проходите циклом по всем сравниваемым ячейкам, и поочередно сравниваете все параметры форматирования. Их не много, навскидку не больше 100.
но главная цель узнать в каких ячейках в таблицах "Прав" и "Неправ" различаются форматы
Это же элементарно. Проходите циклом по всем сравниваемым ячейкам, и поочередно сравниваете все параметры форматирования. Их не много, навскидку не больше 100. RAN
Пока что попытался сделать первую цель - скопировать форматы из одной эталонной таблицы в другую таблицу на другом листе
Написал вот такой код. Юзер должен указать любую ячейку на эталонном листе ( в данном случае лист "Прав") и затем указать любую ячейку на листе куда надо копировать форматы (лист "Неправ")
Выделяю через Selection все столбцы в эталонном листе где есть значения
Копирую выделенную область
Потом вставляю форматы из выденной области в целевую таблицу на другом листе... И не работает!
Помогите пожалуйста разобраться в чем проблем?
[vba]
Код
Option Explicit
Sub CopyFormats() Dim rStandartPage As Range 'для записи эталонной области ячеек Dim rDestinationPage As Range ' для определения области куда будут скопированы форматы эталонной области
Dim lLastcol As Long 'сюда пишем номер последнего заполненного столбца в эталонном листе Dim lLastcol2 As Long 'сюда пишем номер последнего заполненного столбца в листе куда надо скопировать форматы
On Error Resume Next
' запрашиваем у юзера ячейку в эталонном листе, чтобы определить ИМЯ эталонного листа с эталонными форматами
Set rStandartPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8) If rStandartPage Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub End If
With Sheets(rStandartPage.Parent.Name) ' получаем имя листа с эталонной таблицей
lLastcol = .Cells.SpecialCells(xlLastCell).Column ' определяем последний заполненный столбец в эталонном листе
'выделяем диапазон на эталонном листе со всеми заполненными столбцами Range(.Cells(1, 1), .Cells(Rows.Count, lLastcol)).Select
'копируем выделенный диапазон на эталонном листе со всеми заполненными столбцами .Selection.Copy End With
' запрашиваем у юзера ячейку в листе куда надо скопировать форматы из эталонного листа (чтобы определить ИМЯ листа для копирования форматов) Set rDestinationPage = Application.InputBox("Укажите ячейку на листе куда копировать форматы ", "Запрос данных", Selection.Address, Type:=8) If rDestinationPage Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub End If
With Sheets(rDestinationPage.Parent.Name) ' получаем имя листа с таблицей куда копируем форматы
lLastcol2 = .Cells.SpecialCells(xlLastCell).Column ' определяем последний заполненный столбец в листе куда надо скопировать форматы
' вставляем форматы из эталонного листа в целевой лист Range(.Cells(1, 1), .Cells(Rows.Count, lLastcol2)). _ PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With
End Sub
[/vba]
Пока что попытался сделать первую цель - скопировать форматы из одной эталонной таблицы в другую таблицу на другом листе
Написал вот такой код. Юзер должен указать любую ячейку на эталонном листе ( в данном случае лист "Прав") и затем указать любую ячейку на листе куда надо копировать форматы (лист "Неправ")
Выделяю через Selection все столбцы в эталонном листе где есть значения
Копирую выделенную область
Потом вставляю форматы из выденной области в целевую таблицу на другом листе... И не работает!
Помогите пожалуйста разобраться в чем проблем?
[vba]
Код
Option Explicit
Sub CopyFormats() Dim rStandartPage As Range 'для записи эталонной области ячеек Dim rDestinationPage As Range ' для определения области куда будут скопированы форматы эталонной области
Dim lLastcol As Long 'сюда пишем номер последнего заполненного столбца в эталонном листе Dim lLastcol2 As Long 'сюда пишем номер последнего заполненного столбца в листе куда надо скопировать форматы
On Error Resume Next
' запрашиваем у юзера ячейку в эталонном листе, чтобы определить ИМЯ эталонного листа с эталонными форматами
Set rStandartPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8) If rStandartPage Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub End If
With Sheets(rStandartPage.Parent.Name) ' получаем имя листа с эталонной таблицей
lLastcol = .Cells.SpecialCells(xlLastCell).Column ' определяем последний заполненный столбец в эталонном листе
'выделяем диапазон на эталонном листе со всеми заполненными столбцами Range(.Cells(1, 1), .Cells(Rows.Count, lLastcol)).Select
'копируем выделенный диапазон на эталонном листе со всеми заполненными столбцами .Selection.Copy End With
' запрашиваем у юзера ячейку в листе куда надо скопировать форматы из эталонного листа (чтобы определить ИМЯ листа для копирования форматов) Set rDestinationPage = Application.InputBox("Укажите ячейку на листе куда копировать форматы ", "Запрос данных", Selection.Address, Type:=8) If rDestinationPage Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub End If
With Sheets(rDestinationPage.Parent.Name) ' получаем имя листа с таблицей куда копируем форматы
lLastcol2 = .Cells.SpecialCells(xlLastCell).Column ' определяем последний заполненный столбец в листе куда надо скопировать форматы
' вставляем форматы из эталонного листа в целевой лист Range(.Cells(1, 1), .Cells(Rows.Count, lLastcol2)). _ PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With
и поочередно сравниваете все параметры форматирования.
Параметры форматирования нельзя вытянуть тоже циклом или все эти 100 параметров надо знать "в лицо" и руками прописать внутри цикла где перебираются ячейки?
и поочередно сравниваете все параметры форматирования.
Параметры форматирования нельзя вытянуть тоже циклом или все эти 100 параметров надо знать "в лицо" и руками прописать внутри цикла где перебираются ячейки?t330
Set rDestinationPage = Application.InputBox("Укажите ячейку на листе куда копировать форматы ", "Запрос данных", Selection.Address, Type:=8)
[/vba] сбрасывает буфер [vba]
Код
Sub Мяу() Dim shStandartPage As Worksheet 'для записи эталонной области ячеек Dim shDestinationPage As Worksheet ' для определения области куда будут скопированы форматы эталонной области Set shStandartPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8).Parent Set shDestinationPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8).Parent shStandartPage.UsedRange.EntireColumn.Copy shDestinationPage.Range("A1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End Sub
[/vba]
Не считая небываемого (.Selection), строка [vba]
Код
Set rDestinationPage = Application.InputBox("Укажите ячейку на листе куда копировать форматы ", "Запрос данных", Selection.Address, Type:=8)
[/vba] сбрасывает буфер [vba]
Код
Sub Мяу() Dim shStandartPage As Worksheet 'для записи эталонной области ячеек Dim shDestinationPage As Worksheet ' для определения области куда будут скопированы форматы эталонной области Set shStandartPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8).Parent Set shDestinationPage = Application.InputBox("Кликните на ячейку в листе с эталонной таблицей", "Запрос данных", Selection.Address, Type:=8).Parent shStandartPage.UsedRange.EntireColumn.Copy shDestinationPage.Range("A1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End Sub