Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с VBA

305
06 октября 2003 года
Kashuk
385 / / 21.02.2003
У меня проблема:
Есть документ Price.xls я хочу скопировать всё его содержимое (только оформление). Так вот в чём проблема: когда я "копирую" цвет фона яцейки и цвет текста, то в новом документе совсем другие цвета. Как зделать так, что б какие цвета были в старом документе такие были и в новом.
267
06 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Kashuk
У меня проблема:
Есть документ Price.xls я хочу скопировать всё его содержимое (только оформление). Так вот в чём проблема: когда я "копирую" цвет фона яцейки и цвет текста, то в новом документе совсем другие цвета. Как зделать так, что б какие цвета были в старом документе такие были и в новом.



Вообще все должно было быть правильно. Но я сталкивался с такой проблемой, когда исходные документы были созданы (ну или просто изменены) не на собственно Экселе, а на непомнюкакназывается бесплатном эмулятора Экселя.
Мне это не мешало - удивился, да перекрасил. Сейчас попробую что-нибудь придумать для борьбы с этим.

305
06 октября 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by Cutty Sark


Вообще все должно было быть правильно. Но я сталкивался с такой проблемой, когда исходные документы были созданы (ну или просто изменены) не на собственно Экселе, а на непомнюкакназывается бесплатном эмулятора Экселя.
Мне это не мешало - удивился, да перекрасил. Сейчас попробую что-нибудь придумать для борьбы с этим.



Нет. Я использую только ексесь.

267
06 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Kashuk


Нет. Я использую только ексесь.



Ексесь - это страшная помесь Экселя и Аксесса? :D

Кажется, разобрался в чем дело.
Попробуй-ка вот такой макрос. Если заработает, объясню в чем фокус.

Код:
Sub Test()
    CopyWithColors "[price.xls]Sheet1!I5:I10", "[myfile.xls]Sheet2!A5:A10"
End Sub

Sub CopyWithColors(FromRange As String, ToRange As String)
Dim fr As Range, tr As Range
Dim FW As Workbook, TW As Workbook
Dim c As Range

    Set fr = Evaluate(FromRange)
    Set tr = Evaluate(ToRange)
    Set FW = fr.Parent.Parent
    Set TW = tr.Parent.Parent
   
    fr.Copy
    tr.PasteSpecial Paste:=xlPasteFormats
   
    For Each c In fr.Cells
        tr.Cells(c.Row - fr.Row + 1, c.Column - fr.Column + 1).Interior.Color = _
                FW.Colors(c.Interior.ColorIndex)
        tr.Cells(c.Row - fr.Row + 1, c.Column - fr.Column + 1).Font.Color = _
                FW.Colors(c.Font.ColorIndex)
    Next c
   
End Sub
267
06 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Что-то товарищ не пишет. Жаль, очень интересно, в том ли была проблема...
305
06 октября 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by Cutty Sark


Ексесь - это страшная помесь Экселя и Аксесса? :D

Кажется, разобрался в чем дело.
Попробуй-ка вот такой макрос. Если заработает, объясню в чем фокус.

Код:
Sub Test()
    CopyWithColors "[price.xls]Sheet1!I5:I10", "[myfile.xls]Sheet2!A5:A10"
End Sub

Sub CopyWithColors(FromRange As String, ToRange As String)
Dim fr As Range, tr As Range
Dim FW As Workbook, TW As Workbook
Dim c As Range

    Set fr = Evaluate(FromRange)
    Set tr = Evaluate(ToRange)
    Set FW = fr.Parent.Parent
    Set TW = tr.Parent.Parent
   
    fr.Copy
    tr.PasteSpecial Paste:=xlPasteFormats
   
    For Each c In fr.Cells
        tr.Cells(c.Row - fr.Row + 1, c.Column - fr.Column + 1).Interior.Color = _
                FW.Colors(c.Interior.ColorIndex)
        tr.Cells(c.Row - fr.Row + 1, c.Column - fr.Column + 1).Font.Color = _
                FW.Colors(c.Font.ColorIndex)
    Next c
   
End Sub



У меня при этом выдает ошубку на "Set fr = Evaluate(FromRange)"

Может есть какой другой способ, для примера как я делал, может какую ошибку найдеш:

WS_NEW.Cells(1, 1).Font.Color = PPWS.Cells(1, 1).Font.Color

WS_NEW.Cells(1, 1).Interior.ColorIndex = PPWS.Cells(1, 1).Interior.ColorIndex

267
06 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Kashuk


У меня при этом выдает ошубку на "Set fr = Evaluate(FromRange)"

Может есть какой другой способ, для примера как я делал, может какую ошибку найдеш:

WS_NEW.Cells(1, 1).Font.Color = PPWS.Cells(1, 1).Font.Color

WS_NEW.Cells(1, 1).Interior.ColorIndex = PPWS.Cells(1, 1).Interior.ColorIndex



А что ж молчишь, раз ошибка...
Ошибка у тебя скорее всего из-за того, что ты неправильно функцию вызвал (в смысле - аргумент вида "[price.xls]Sheet1!I5:I10" неправильно ввел). Можем разобраться в этом, но тут суть не в этом. Раз уж у тебя есть ссылки на нужные тебе диапазоны, то их и используем.
fr - это твой PPWS, а tr - твой WS_NEW.
Можешь вставить вместо Evaluate-ов строчки
Set fr = PPWS
Set tr = WS_NEW

Должно заработать. Жду с нетерпением.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог