【问题标题】:Excel vba : assign all properties to a cell from an array of rangeExcel vba:将所有属性分配给范围数组中的单元格
【发布时间】:2017-04-07 18:28:04
【问题描述】:

我的目标是将一个单元格及其所有属性和值保存在一个范围数组中,然后将该单元格的所有属性和值写回数组中的另一个单元格(类似于复制粘贴功能,但从数组中粘贴)。

这是一个简单的测试程序:

Sub Test()
    Dim Range_Grid(1) As Range
    Dim CellAdress As String
    Dim i As Long

    Set Range_Grid(1) = ActiveSheet.Cells(2, 3)
    ActiveSheet.Cells(4, 1) = Range_Grid(1)
End Sub

因此,在数组 Range_Grid(1) 的第一个元素中,我确实保存了整个范围,并且我可以访问原始范围 ActiveSheet.Cells(2, 3) 具有的每个属性,例如字体样式、格式、颜色、评论等。

但是当我尝试将这个范围从数组写入另一个空单元格时,它只写入值...

知道如何从数组中写入所有属性,就像从工作表到工作表的复制/粘贴一样?

【问题讨论】:

  • 试试:Range_Grid(1).Copy ActiveSheet.Cells(4, 1)
  • 感谢它以某种方式工作。但我刚刚意识到保存在数组中的范围并没有真正保存为独立实体,我的意思是它似乎是指向工作表上单元格的指针。因此,如果在 Set Range_Grid(1) = ActiveSheet.Cells(2, 3) 行之后,我会手动更改工作表上此单元格的值和属性以获取空单元格,然后是 Range_Grid(1).Copy ActiveSheet。 Cells(4, 1) 也将 cell(4,1) 留空...

标签: arrays excel vba


【解决方案1】:

没有办法将所有格式从数组中的范围一次移回 excel。这给您留下了两个选择:要么按照 Scott Craner 的建议在 excel 中复制,要么单独复制每种类型的格式。例如,如果您想复制值(这是默认值,因此是原始代码中复制的内容)和单元格背景颜色,则可以使用以下代码:

Sub Test()
    Dim Range_Grid(1) As Range

    Set Range_Grid(1) = ActiveSheet.Cells(2, 3)
    ActiveSheet.Cells(4, 1) = Range_Grid(1)
    ActiveSheet.Cells(4, 1).Interior.ColorIndex = Range_Grid(1).Interior.ColorIndex
End Sub

不幸的是,您可能希望在任何给定时间处理十几种类型的格式...

【讨论】:

  • 谢谢。我已经编写了一个完整的函数,该函数基于保存属性的分离部分以在需要时检索它们。所以我正在寻找一个完整的财产解决方案。我想没有真正的解决方案,因为我已经在这个主题的很多论坛上发红了,人们总是说他们认为没有真正的解决方案。
【解决方案2】:

还有一个替代方法:使用 Copy 和 PasteSpecial 函数。

Sub Test()

    ActiveSheet.Cells(2, 3).Copy
    ActiveSheet.Cells(4, 1).PasteSpecial(xlPasteAll)

End Sub

【讨论】:

  • 感谢您的选择。但实际上在这里您只需从工作表复制/粘贴到工作表。我的目标是将表格中的网格保存到数组中,然后,无论在原始表格中做了什么,都将数组中的“粘贴回”到表格中。这是关于管理用于撤消重做功能的引擎的处理,因为当代码在工作表上写入某些内容时,撤消堆栈会被 Excel 自动擦除......所以我已经创建了一个引擎,它只适用于少数几个值、文本、颜色等属性......但它通过单独保存属性来工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多