Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Илья Гость
|
Добавлено: Вт Июл 29 2003 23:41 Заголовок сообщения: Есть ли какие-нибудь средства в VBA, которые бы позволяли относиться к формату(цвет, шрифт, границы) ячейки |
|
|
В чём проблема: 1. Нужно скопировать из одного листа в другой не только содержимое, но и вид ячейки 2. Читаем лист, в нём строки, если строка имеет такой-то формат то она является обычной строкой, а если другой то, то - заголовком, а следовательно с ней нужно обращатщься по особому
Было бы здорово ... Если бы у объекта Range (на сколько я понимаю: одна ячейка - это Range, две ячейки - Range, целый ряд - Range, свойство Selection - тоже Range и.т.д.) существовало понятное свойство - Format. Которое бы содержало в себе всю лабуду типа цвета, шрифта и прочее. Есть нечто похожее на искомый "Format", называется - Но мне лично не совсем понятна логика по которой этот зверь работает. (Буду рад если кто объяснит) К тому же это нечто является Read only, то есть процедуру сравнения двух ячеек на основе "формата" (если читать, что определяет формат) организовать можно, а вот копирование - никак.
Вообще то, формат ячейки определяется тремя её свойствами:: Interior, Borders и Font
Так что приходиться.. для создания процедуры копирования "формата" копировать отдельно Interior, Font, а вот с Borders - проблема: Borders тоже является read only, более того, каждый его элемент - Border является read only. Сам же Border - совокупность десятка свойств,то есть могжно организовать процедуру копирования присваиванием, в ручную, каждого такого свойста копируемого объекта объекту, из которого мы копируем. Но помойму это не очень красиво. Может можно преукрасить эту процедуру, написав её как-нибудь поумнее А может я вообще чего приципиально не понимаю
Напишите!!! |
|
Вернуться к началу |
|
|
Илья Гость
|
Добавлено: Ср Июл 30 2003 01:14 Заголовок сообщения: Проще прощенья. В посте ашипки сделал, так что читайте здесь |
|
|
В чём проблема: 1. Нужно скопировать из одного листа в другой не только содержимое, но и вид ячейки 2. Читаем лист, в нём строки, если строка имеет такой-то формат то она является обычной строкой, а если другой то, то - заголовком, а следовательно с ней нужно обращатщься по особому. То есть должна быть возможность сравнивать "форматы" Было бы здорово ... Если бы у объекта Range (на сколько я понимаю: одна ячейка - это Range, две ячейки - Range, целый ряд - Range, свойство Selection - тоже Range и.т.д.) существовало понятное свойство - Format. Которое бы содержало в себе всю лабуду типа цвета, шрифта и прочее. Есть нечто похожее на искомый "Format", называется - FormatCondition. Но мне лично не совсем понятна логика по которой этот зверь работает. (Буду рад если кто объяснит). К тому же это нечто является Read only, то есть процедуру сравнения двух ячеек на основе "формата" (если считать, что FormatConditions определяет формат) организовать можно, а вот копирование - никак. Вообще то, формат ячейки определяется тремя её свойствами:: Interior, Borders и Font Так что приходиться... для создания процедуры копирования "формата" копировать отдельно Interior, Font, а вот с Borders - проблема: Borders тоже является read only, более того, каждый его элемент - Border является read only. Сам же Border - совокупность десятка свойств,то есть можно организовать процедуру копирования присваиванием, в ручную, каждого такого свойста копируемого объекта объекту, из которого мы копируем. Но помойму это не очень красиво. Может можно преукрасить эту процедуру, написав её как-нибудь поумнее? А может я вообще чего приципиально не понимаю? Напишите!!! |
|
Вернуться к началу |
|
|
Old_Den Гость
|
Добавлено: Чт Июл 31 2003 06:47 Заголовок сообщения: Re: Проще прощенья. В посте ашипки сделал, так что читайте здесь |
|
|
Ты бы прежде чем голову ломать, записал бы макрос с нужными тебе действиями, типа копирования формата и разобрал бы его по кусочкам, очень действенный метод. |
|
Вернуться к началу |
|
|
Илья Гость
|
Добавлено: Пт Авг 01 2003 14:04 Заголовок сообщения: Макрос это хорошо, но он показывает только как капировать через буфер, а с эти проблема ... |
|
|
Проблема в следующем: На сколько я понял из поставленных экспирементов, такой способ копирования работает только при активизации сначала одного окна, а потом другого. А теперь представьте: мне нужно окткопировать 6000 записей... |
|
Вернуться к началу |
|
|
Old_Den Гость
|
Добавлено: Пн Авг 04 2003 06:44 Заголовок сообщения: Внутри (+) |
|
|
Sub Test() For i = 1 To 10 x = "B" + Trim(Str(i)) Range(x).Select If Selection.Interior.ColorIndex = 3 And Selection.Interior.Pattern = xlSolid Then MsgBox "Оно" 'копируем здесь содержимое и формат (он-то заранее известен, или как мы отличаем эту строку) Else End If MsgBox "Дальше..." Next i End Sub
Этот макрос Эксель сам создал, границы я делал все сразу, а не по одной, а ты говоришь "красиво - не красиво", "Вам шашечки или ехать?" (с) не помню кто...
Sub Макрос2() ' ' Макрос2 Макрос ' Макрос записан 04.08.2003 '
' Range("D5").Select With Selection.Interior .ColorIndex = 3 .Pattern = xlSolid End With Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Selection.Font.Bold = True Range("A1").Select End Sub |
|
Вернуться к началу |
|
|
|