【问题标题】:How to copy the format and values without copying the CF rules from a Conditional Formatted cell using vba如何在不使用 vba 从条件格式单元格复制 CF 规则的情况下复制格式和值
【发布时间】:2014-04-17 14:31:16
【问题描述】:

我尝试从 excel 复制数据并自动通过电子邮件发送。一切正常,除了 CF。 '

我应用了下面的代码,但它也处理了条件格式规则,因为格式在它粘贴到 Outlook 时会发生变化。请帮助我们解决此问题。

Function RangetoHTML(rng As Range)

Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook


TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

'Copy the range and create a new workbook to paste the data in
rng.Copy

Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)



   .Cells(1).PasteSpecial Paste:=8
   .Cells(1).PasteSpecial xlPasteValues, , False, False
   .Cells(1).PasteSpecial xlPasteFormats, , False, False
   .Cells(1).Select


    Application.CutCopyMode = False
    On Error Resume Next
    .DrawingObjects.Visible = True
    .DrawingObjects.Delete
    On Error GoTo 0
End With

'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
     SourceType:=xlSourceRange, _
     Filename:=TempFile, _
     Sheet:=TempWB.Sheets(1).Name, _
     Source:=TempWB.Sheets(1).UsedRange.Address, _
     HtmlType:=xlHtmlStatic)
    .Publish (True)
End With

'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                      "align=left x:publishsource=")

'Close TempWB
TempWB.Close SaveChanges:=False

'Delete the htm file we used in this function
Kill TempFile

Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing

结束函数

【问题讨论】:

  • 为什么不直接删除 xlPasteFormats 行代码??
  • 如果我删除了 xlPasteFormats,它将不会粘贴现有格式,也不会粘贴边框背景颜色等......
  • 删除格式的任何条件方面的一种方法是首先将范围粘贴到 Word,然后从 Word 粘贴到 Outlook。
  • 你能分享一个相同的示例代码吗?
  • 看我的帖子........

标签: vba excel excel-formula conditional-formatting


【解决方案1】:

在这个小例子中,我们从一小块具有条件格式的单元格开始。宏:

  1. 打开 Word
  2. 创建一个新文档
  3. 复制表格并将其粘贴到文档中
  4. 保存文档
  5. 关闭文档和Word

把它放在一个标准模块中。生成的 Word 表格应该像 Excel 表格一样格式化,但没有“条件”

Sub UsingWord()
    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add
    Range("A1:B2").Copy
    With wrdDoc
        wrdApp.Selection.PasteAndFormat (wdPasteDefault)
        .SaveAs ("C:\TestFolder\tdoc.docx")
        .Close
    End With
    wrdApp.Quit
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
End Sub

选择您自己的文件和文件夹名称。

您必须在 VBA > 工具 > 参考中包含对 Word 对象模型的引用

【讨论】:

  • 您能否告诉我如何将这些数据从 word 复制到 Outlook 以发送邮件?
  • @Deva 抱歉…………我不知道……我只使用基于网络的电子邮件。
【解决方案2】:

条件格式被认为是格式,因此 xlPasteFormats 是它粘贴 CF 的原因。我会尝试申请

.Cells(1).FormatConditions.Delete 

在您复制值之后,并且在您开始粘贴选项之前。

【讨论】:

  • 如果我应用它,它会删除整个格式化结果,如字体颜色、背景等......但我不想删除它。我只需要删除 CF 规则。
  • 我回去发现它必须在粘贴之后插入,你根本不需要使用 PasteSpecial 这是一个例子Range("A6").Select Selection.Copy Range("C9").Select ActiveSheet.Paste Selection.FormatConditions.Delete
  • 不,它不起作用。而且我还需要在粘贴之前删除 CF 规则。
  • 您能否编辑您的问题并包含所有代码。可能更容易看出问题出在哪里?另外,您确定要从中复制数据的字段的格式不是 CF 应用的格式吗?
  • 当我在两个 With..End With 语句之间添加 Cells.FormatConditions.Delete 时,一切都对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多