半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■VBA Replace(buf, "ignore:", "")

2011-06-15 20:00:00 | scrap
#しつこいようだが (:
『条件付き書式で設定された書式を残して、条件付き書式を解除する』手法として
■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



#一応Ver.2000,2003,2007,2010で動作確認。(winXP)
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする