首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Excel中只复制单元格的纯文本?

如何在Excel中只复制单元格的纯文本?
EN

Stack Overflow用户
提问于 2013-09-20 04:01:23
回答 8查看 71K关注 0票数 5

我正在设计一个Excel工作表,其中用户将单击命令按钮来复制预定范围的单元格。然后,用户可以使用Firefox或IE将内容粘贴到web应用程序中。web应用程序的设计不受我的控制,目前用于数据输入的文本框都是富文本输入。当用户粘贴到文本中时,这会使文本看起来像Excel一样奇怪和格式化。

在Excel中,是否可以使用VBA仅复制选定单元格的纯文本?没有格式,没有表格或单元格边框,只有文本,没有其他。我当前的工作宏是复制单元格,打开记事本,粘贴到记事本,然后从记事本复制以获得纯文本。这是非常不受欢迎的,我希望在Excel中有一种方法可以做到这一点。请让我知道,谢谢!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-09-20 04:06:12

像这样吗?

代码语言:javascript
运行
复制
Sheet1.Cells(1, 1).Copy
Sheet1.Cells(1, 2).PasteSpecial xlPasteValues

或者

代码语言:javascript
运行
复制
selection.Copy
Sheet1.Cells(1,2).Activate
Selection.PasteSpecial xlPasteValues

Copy复制整个零件,但我们可以控制粘贴的内容。

同样适用于Range对象也是如此。

编辑

AFAIK中,没有直接的方法可以只复制某个范围的文本而不将其分配给VBA对象(变量、数组等)。有一个技巧适用于单个单元格,并且仅适用于数字和文本(无公式):

代码语言:javascript
运行
复制
Sub test()
    Cells(1, 1).Select
    Application.SendKeys "{F2}"
    Application.SendKeys "+^L"
    Application.SendKeys "^C"
    Cells(1, 3).Select
    Application.SendKeys "^V"
End Sub

但大多数开发人员避免使用 SendKeys,因为它可能不稳定且不可预测。例如,上面的代码仅在从 excel 执行宏时才有效,而不是从 VBA 执行。当从 VBA 运行时,SendKeys 会打开对象浏览器,这就是在 VBA 视图中按下 F2 时所做的:) 此外,对于完整范围,您必须遍历单元格,逐个复制它们并逐个粘贴它们一到申请。现在我想得更好,我认为这是一种矫枉过正

使用数组可能更好。这是我最喜欢的关于如何在vba数组之间传递范围的参考:

http://www.cpearson.com/excel/ArraysAndRanges.aspx

就我个人而言,我会避免

并使用数组。应该可以将数据从

数组添加到应用程序,但在不了解应用程序的更多信息的情况下很难说。

票数 6
EN

Stack Overflow用户

发布于 2016-12-16 05:52:28

实际上,最好的方法是复制单元格并粘贴到记事本中。记事本无法识别单元格。然后,您可以将文本复制回所需的任何单元格。这适用于将文本从多个单元格复制到单个单元格。

票数 3
EN

Stack Overflow用户

发布于 2015-07-02 20:47:08

如果您要处理大量要复制的单元格,selection.copy方法将非常慢。(我在对200,000条记录运行宏时遇到过这种情况)。

性能提高100倍的方法是直接将一个单元格的值赋给另一个单元格。我的代码中的示例:

代码语言:javascript
运行
复制
With errlogSheet
         'Copy all data from the current row

          reworkedErrorSheet.Range("A" & reworkedRow).Value = .Range("A" & currentRow).Value
          reworkedErrorSheet.Range("B" & reworkedRow).Value = .Range("B" & currentRow).Value
          reworkedErrorSheet.Range("C" & reworkedRow).Value = .Range("C" & currentRow).Value
          reworkedErrorSheet.Range("D" & reworkedRow).Value = .Range("D" & currentRow).Value
          reworkedErrorSheet.Range("E" & reworkedRow).Value = .Range("E" & currentRow).Value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18903872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档