- Есть две отдельные книги. В 1-й книге расценки, во-второй - Смета. В Смете создал скрытый лист и в нем поставил ссылки на расценки и исходя из этих ссылок получился выпадающий список. Но в 1-й книге расценки (перечень работ) имеют разный цвет текста внутри ячейки (см. пример).
1. Можно ли сделать так, чтобы ссылка и выпадающий список был прямо таким как в книге Расценки? 2. Можно ли ячейке присвоить выпадающий список и если что изменить на любой текст не важный для выпадающего списка?
Прошу помощи в решении след.задачи:
- Есть две отдельные книги. В 1-й книге расценки, во-второй - Смета. В Смете создал скрытый лист и в нем поставил ссылки на расценки и исходя из этих ссылок получился выпадающий список. Но в 1-й книге расценки (перечень работ) имеют разный цвет текста внутри ячейки (см. пример).
1. Можно ли сделать так, чтобы ссылка и выпадающий список был прямо таким как в книге Расценки? 2. Можно ли ячейке присвоить выпадающий список и если что изменить на любой текст не важный для выпадающего списка?den45444
Nic70y, прав. При чем если нужно именно такой формат текста как на 2-м листе то тут простым копированием формата не обойтись. На быструю руку получился вот такой монстр:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, m(), c As Range If Target.Column = 1 Then s = Target Application.EnableEvents = 0: Application.Calculation = xlCalculationManual With Sheets("Расценки") Set c = .Columns("A:A").Find(What:=s, After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:= _ xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If c Is Nothing Then Exit Sub If Len(c) = 0 Then Exit Sub ReDim m(1 To Len(s), 1 To 12) For i = 1 To Len(s) With c.Characters(Start:=i, Length:=1).Font m(i, 1) = .Name m(i, 2) = .FontStyle m(i, 3) = .Size m(i, 4) = .Strikethrough m(i, 5) = .Superscript m(i, 6) = .Subscript m(i, 7) = .OutlineFont m(i, 8) = .Shadow m(i, 9) = .Underline m(i, 10) = .Color m(i, 11) = .TintAndShade m(i, 12) = .ThemeFont End With Next
For i = 1 To Len(s) With Target.Characters(Start:=i, Length:=1).Font .Name = m(i, 1) .FontStyle = m(i, 2) .Size = m(i, 3) .Strikethrough = m(i, 4) .Superscript = m(i, 5) .Subscript = m(i, 6) .OutlineFont = m(i, 7) .Shadow = m(i, 8) .Underline = m(i, 9) .Color = m(i, 10) .TintAndShade = m(i, 11) .ThemeFont = m(i, 12) End With Next End With Application.EnableEvents = 1: Application.Calculation = xlCalculationAutomatic End If End Sub
[/vba]
Скажу сразу - притормаживает, можно конечно оптимизировать, но нужно добавить проверку предыдущего символа по всем параметрам, и применять формат сразу на весь текст с таким форматом. Но мне пока лениво. Главное идея Можете попробовать убрать не нужные(не важные для Вас) критерии, например размер, или еще что - будет быстрее работать.
Nic70y, прав. При чем если нужно именно такой формат текста как на 2-м листе то тут простым копированием формата не обойтись. На быструю руку получился вот такой монстр:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, m(), c As Range If Target.Column = 1 Then s = Target Application.EnableEvents = 0: Application.Calculation = xlCalculationManual With Sheets("Расценки") Set c = .Columns("A:A").Find(What:=s, After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:= _ xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If c Is Nothing Then Exit Sub If Len(c) = 0 Then Exit Sub ReDim m(1 To Len(s), 1 To 12) For i = 1 To Len(s) With c.Characters(Start:=i, Length:=1).Font m(i, 1) = .Name m(i, 2) = .FontStyle m(i, 3) = .Size m(i, 4) = .Strikethrough m(i, 5) = .Superscript m(i, 6) = .Subscript m(i, 7) = .OutlineFont m(i, 8) = .Shadow m(i, 9) = .Underline m(i, 10) = .Color m(i, 11) = .TintAndShade m(i, 12) = .ThemeFont End With Next
For i = 1 To Len(s) With Target.Characters(Start:=i, Length:=1).Font .Name = m(i, 1) .FontStyle = m(i, 2) .Size = m(i, 3) .Strikethrough = m(i, 4) .Superscript = m(i, 5) .Subscript = m(i, 6) .OutlineFont = m(i, 7) .Shadow = m(i, 8) .Underline = m(i, 9) .Color = m(i, 10) .TintAndShade = m(i, 11) .ThemeFont = m(i, 12) End With Next End With Application.EnableEvents = 1: Application.Calculation = xlCalculationAutomatic End If End Sub
[/vba]
Скажу сразу - притормаживает, можно конечно оптимизировать, но нужно добавить проверку предыдущего символа по всем параметрам, и применять формат сразу на весь текст с таким форматом. Но мне пока лениво. Главное идея Можете попробовать убрать не нужные(не важные для Вас) критерии, например размер, или еще что - будет быстрее работать.SLAVICK
Nic70y, SLAVICK, Благодарю за отклик. Наверное откажусь от этой затеи. Может есть какой-нибудь другой способ выдергивать расценки с другой книги с сохранением формата.
Nic70y, SLAVICK, Благодарю за отклик. Наверное откажусь от этой затеи. Может есть какой-нибудь другой способ выдергивать расценки с другой книги с сохранением формата.den45444
Может есть какой-нибудь другой способ выдергивать расценки с другой книги с сохранением формата.
Можно просто целиком скопировать ячейку - работает мгновенно, но могут быть свои нюансы.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, m(), c As Range If Target.Column = 1 Then s = Target Application.EnableEvents = 0: Application.Calculation = xlCalculationManual With Sheets("Расценки") Set c = .Columns("A:A").Find(What:=s, After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:= _ xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If c Is Nothing Then Exit Sub If Len(c) = 0 Then Exit Sub c.Copy Target End With Application.EnableEvents = 1: Application.Calculation = xlCalculationAutomatic End If End Sub
Может есть какой-нибудь другой способ выдергивать расценки с другой книги с сохранением формата.
Можно просто целиком скопировать ячейку - работает мгновенно, но могут быть свои нюансы.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, m(), c As Range If Target.Column = 1 Then s = Target Application.EnableEvents = 0: Application.Calculation = xlCalculationManual With Sheets("Расценки") Set c = .Columns("A:A").Find(What:=s, After:=.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:= _ xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) If c Is Nothing Then Exit Sub If Len(c) = 0 Then Exit Sub c.Copy Target End With Application.EnableEvents = 1: Application.Calculation = xlCalculationAutomatic End If End Sub