#しつこいようだが (:
『条件付き書式で設定された書式を残して、条件付き書式を解除する』手法として
■xl2007:条件付き書式の色設定だけ残す
ver2007以降はPublishObjectオブジェクトが使える。
■xl2003:条件付き書式の色設定だけ残す
ver2003以前はWordを経由して取れる。
■RegisterClipboardFormatA("HTML Format")
Win32APIを使ってClipboardから"HTML Format"を取ればver共通で可能。
...など書いてきました。
関連でもう一つ。
2003でも[PublishObjects.Addメソッド]を使って、WinAPIを使わずExcelの機能だけで可能だったのでした。
#一応Ver.2000,2003,2007,2010で動作確認。(winXP)
『条件付き書式で設定された書式を残して、条件付き書式を解除する』手法として
■xl2007:条件付き書式の色設定だけ残す
ver2007以降はPublishObjectオブジェクトが使える。
■xl2003:条件付き書式の色設定だけ残す
ver2003以前はWordを経由して取れる。
■RegisterClipboardFormatA("HTML Format")
Win32APIを使ってClipboardから"HTML Format"を取ればver共通で可能。
...など書いてきました。
関連でもう一つ。
2003でも[PublishObjects.Addメソッド]を使って、WinAPIを使わずExcelの機能だけで可能だったのでした。
'条件付き書式を設定したActiveSheetに対して処理。
Sub test()
Dim ws As Worksheet
Dim tmp As String
Dim buf As String
Dim n As Long
'作業用mhtファイル名を設定。 _
同名既存ファイルがあれば上書きするので要注意。
tmp = Application.DefaultFilePath & "\temp.mht"
Set ws = ActiveSheet
ActiveWorkbook.PublishObjects.Add( _
xlSourceSheet, tmp, _
ws.Name, "", _
xlHtmlStatic).Publish True
'作業用mhtファイルOpen。
n = FreeFile
Open tmp For Input As #n
buf = StrConv(InputB(LOF(n), #n), vbUnicode)
Close #n
'---置換作業---
'途中改行があれば削除。
buf = Replace$(buf, "=" & vbCrLf, "")
'とにかく"ignore:"を消せばいいみたい。
buf = Replace$(buf, "mso-ignore:", "")
'--------------
'作業ファイル書き込み直してOpen、Copy。
n = FreeFile
Open tmp For Output As #n
Print #n, buf
Close #n
With Workbooks.Open(tmp)
.Sheets(1).Copy ws
.Close False
End With
'コピー追加したシートの値クリア。
ActiveSheet.UsedRange.ClearContents
'作業用mhtファイル削除。
Kill tmp
Set ws = Nothing
End Sub
Sub test()
Dim ws As Worksheet
Dim tmp As String
Dim buf As String
Dim n As Long
'作業用mhtファイル名を設定。 _
同名既存ファイルがあれば上書きするので要注意。
tmp = Application.DefaultFilePath & "\temp.mht"
Set ws = ActiveSheet
ActiveWorkbook.PublishObjects.Add( _
xlSourceSheet, tmp, _
ws.Name, "", _
xlHtmlStatic).Publish True
'作業用mhtファイルOpen。
n = FreeFile
Open tmp For Input As #n
buf = StrConv(InputB(LOF(n), #n), vbUnicode)
Close #n
'---置換作業---
'途中改行があれば削除。
buf = Replace$(buf, "=" & vbCrLf, "")
'とにかく"ignore:"を消せばいいみたい。
buf = Replace$(buf, "mso-ignore:", "")
'--------------
'作業ファイル書き込み直してOpen、Copy。
n = FreeFile
Open tmp For Output As #n
Print #n, buf
Close #n
With Workbooks.Open(tmp)
.Sheets(1).Copy ws
.Close False
End With
'コピー追加したシートの値クリア。
ActiveSheet.UsedRange.ClearContents
'作業用mhtファイル削除。
Kill tmp
Set ws = Nothing
End Sub
#一応Ver.2000,2003,2007,2010で動作確認。(winXP)