Я пишу макрос, который копирует определенный лист из основной рабочей книги во вновь созданную. Проблема, которая возникает, заключается в том, что форматирование неправильно отображается в новой рабочей таблице. Например: если A1 на первом листе (основная рабочая книга) имеет значение «без ошибок», а цвет шрифта установлен на зеленый, на листе вновь созданной рабочей книги цвет шрифта будет оранжевым. Это также происходит с некоторыми фонами ячеек, которые формируются вручную (не условно). Если ячейка A2 содержит «ошибку», а шрифт и цвет фона установлены на красный (на основе условного форматирования), формат корректно копируется в новую рабочую книгу. Перебор всех столбцов с неправильными цветами невозможен.
То, что я пробовал :
- PasteSpecial (форматы),
- setТема цвета новой рабочей книги к старой с vba (не получилось, чтобы это работало)
Выводы :
- Только неправильная окраскапроисходит, когда лист копируется в новую рабочую книгу
- Я прочитал, что эта ошибка может возникать из-за другого шаблона Color в новой рабочей книге, однако я не смог изменить тему
- Форматирование происходит неправильно со строкой
ws.Copy After:=wbFile.Worksheets(1)
, поэтому форматирование зависимостей, основанных на других подпрограммах, не приводит к неправильной окраске
Я очень ценю любую помощь или руководство. Спасибо.
Public Sub saveKonsoData()
Dim strDir As String
Dim wbFile As Workbook
Dim File As String
Dim ws As Worksheet
On Error GoTo fehler
Application.ScreenUpdating = False
strDir = ThisWorkbook.Path & "\XYZ"
If Dir(strDir, vbDirectory) = "" Then
MkDir strDir
End If
Set wbFile = Workbooks.Add
Set ws = ThisWorkbook.Worksheets(konsoName) 'konsoName is a string Constant
ws.Copy After:=wbFile.Worksheets(1)
File = ThisWorkbook.Path & "\XYZ\" & Format(Now, "YYYY.MM.dd hh.mm") & "_" & "NEWWORKBOOK" & ".xlsx"
Application.DisplayAlerts = False
wbFile.SaveAs File
wbFile.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Die Speicherung war erfolgreich.", vbInformation + vbOKOnly
Exit Sub
fehler:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Die Speicherung der konsolidierten Datei war nicht erfolgreich. Bitte speichern Sie die Datei manuell.", vbInformation + vbOKOnly
End Sub
РЕДАКТИРОВАТЬ:
Я наткнулся на возможность использования xlPasteAllUsingSourceTheme . Я скопировал ячейки вместо листа и использовал вышеупомянутую константу. Это решило проблему. Измененные коды могут быть показаны ниже.
Set ws = ThisWorkbook.Worksheets(konsoName)
'ws.Copy After:=wbFile.Worksheets(1)
''TEST STARTS
ws.Cells.Copy
wbFile.Worksheets(1).Cells.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
''TEST ENDs