excel - 在 Excel 中复制范围时,PasteSpecial 不保留源格式

标签 excel vba ms-access outlook

我正在将一系列单元格从现有工作簿复制到临时工作簿,并希望保留源工作簿的精确格式。 我正在使用 Ron de Bruin 修改的 RangetoHTML 函数版本。

目的是将源工作簿中的范围复制到邮件正文。

但是,当我运行宏时,它会以不同的格式仅在值中粘贴邮件中的范围(请参阅下面的链接)。 PasteSpecial 的所有其他粘贴类型要么失败,要么给出相同的结果。

我尝试了 PasteSpecial 方法的每种粘贴类型,但没有成功。

如果我尝试为 PasteSpecial 函数指定更多参数,则会抛出 1004 错误(尽管我不需要使用默认值以外的任何其他参数)。

源工作簿已合并单元格,但我尝试删除合并单元格,但这并没有改变输出。

此代码被多次调用,因为我想插入不同工作簿中的范围。结果始终是正确的范围,但没有格式。

它是从 Access 运行的,因为我正在尝试从表单运行此脚本。它位于公共(public)模块中,并在另一个模块中创建邮件正文时调用。 以下是删除注释时引发错误的部分摘录:

Public Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006

    Dim xlApp As Excel.Application
    Dim TempWB As Excel.workbook

    Set TempWB = xlApp.Workbooks.Add(1)
    rng.Copy 'This is passed as an argument of the RangetoHTML function
    TempWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues ', Operation:=-4142, SkipBlanks:=True, Transpose:=False
    TempWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteFormats ', Operation:=-4142, SkipBlanks:=True, Transpose:=False
    TempWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteColumnWidths ', Operation:=-4142, SkipBlanks:=True, Transpose:=False

'The rest is similar to the original version of RangetoHTML

    'Close TempWB
    TempWB.Close savechanges:=False
    xlApp.Quit

    Set TempWB = Nothing
    Set xlApp = Nothing

End Function

我希望邮件正文中显示的范围与源工作簿中的范围相同。

尽管我进行了所有尝试,但我似乎找不到此代码有任何问题会阻止格式被复制。

编辑:

如果我改变线路:

Set TempWB = xlApp.Workbooks.Add(1)

至:

Set TempWB = Workbooks.Add(1)

然后输出的格式正确,但在子程序结束后,任务管理器中会有一个 Excel 实例保持打开状态。

编辑2:

以下是一些屏幕截图,可帮助解释该问题(敏感信息已模糊)。

这是我期望的输出: Correct output

这是我使用上面提供的代码时得到的实际结果: What I got

我已经检查了粘贴表格的临时文件的内容,并且格式与粘贴在邮件正文中的格式相同。这告诉我 PasteSpecial 是这里的罪魁祸首,而不是 RangetoHTML 函数的其余部分。

编辑3:

我还尝试使用普通的 Paste 函数,得到了与上图相同的结果:

rng.Copy
TempWB.Worksheets(1).Paste

PasteSpecial 实际上无论我提供哪个参数都不会执行任何操作。

最佳答案

如果要保留格式,则需要使用 xlPasteAllxlPasteAllUsingSourceTheme 值。请参阅XlPasteType enumeration .

关于excel - 在 Excel 中复制范围时,PasteSpecial 不保留源格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57076799/

相关文章:

.net - 在 excel 数据透视表中过滤年、月和日的日期时间字段

excel - PowerShell - 将数据粘贴到 Excel 中

excel - 使用 Power Query 按特定顺序排序

html - 使用 VBA 和 HTML 单击自动完成列表中的项目

ms-access - 过滤子表单、开头、多个条件

c# - Excel Range C# 中的非空单元格

image - 将范围导出为图像

ms-access - VBA创建/更新任意数量的 Access 表

sql - 在 MS Access 中使用 SQL 进行分组和透视

vba - 使用 ActiveWorkbook.FollowHyperlink 在 excel 中打开网站