我正在将一系列单元格从现有工作簿复制到临时工作簿,并希望保留源工作簿的精确格式。 我正在使用 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:
以下是一些屏幕截图,可帮助解释该问题(敏感信息已模糊)。
这是我期望的输出:
这是我使用上面提供的代码时得到的实际结果:
我已经检查了粘贴表格的临时文件的内容,并且格式与粘贴在邮件正文中的格式相同。这告诉我 PasteSpecial
是这里的罪魁祸首,而不是 RangetoHTML 函数的其余部分。
编辑3:
我还尝试使用普通的 Paste
函数,得到了与上图相同的结果:
rng.Copy
TempWB.Worksheets(1).Paste
PasteSpecial
实际上无论我提供哪个参数都不会执行任何操作。
最佳答案
如果要保留格式,则需要使用 xlPasteAll
或 xlPasteAllUsingSourceTheme
值。请参阅XlPasteType enumeration .
关于excel - 在 Excel 中复制范围时,PasteSpecial 不保留源格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57076799/