Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 仅链接范围内一个单元格到其他范围内其他单元格的格式_Excel_Vba - Fatal编程技术网

Excel 仅链接范围内一个单元格到其他范围内其他单元格的格式

Excel 仅链接范围内一个单元格到其他范围内其他单元格的格式,excel,vba,Excel,Vba,我有一张excel表格,由两个大小相同的区域组成,如图所示。现在,我想将上部区域中每个单元格的格式链接到下部区域中每个对应的单元格。我尝试过粘贴为链接图像选项,但根据我的需要,这并没有用。 到目前为止,我发现了以下vba代码: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Clr Clr = Me.Range("A1").Interior.Color Me.Range("A5").Interior.Color

我有一张excel表格,由两个大小相同的区域组成,如图所示。现在,我想将上部区域中每个单元格的格式链接到下部区域中每个对应的单元格。我尝试过粘贴为链接图像选项,但根据我的需要,这并没有用。 到目前为止,我发现了以下vba代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Clr

Clr = Me.Range("A1").Interior.Color
Me.Range("A5").Interior.Color = Clr
End Sub
当用于单个单元格时,这是正常的。但当我将其修改为整个范围时,如下所示:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Clr

    Clr = Me.Range("A1:B3").Interior.Color
    Me.Range("A5:B7").Interior.Color = Clr
End Sub

它不再正常工作。请帮我做这个。任何修改/新方法都将受到高度赞赏。也不想使用循环,因为它只是一个样本表,而我的实际表要大得多

我将非常显著地简化我的答案,因为我不知道如何应用它,但是,我会通过复制然后粘贴特殊格式来实现这一点

Public Sub CopyPasteSpecialFormats()
    Range("rngSrcData").Copy
    Range("rngFirstCellToCopyTo").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub
将上面的代码扔到一个模块或一个change方法中,或者以某种方式调用它

在上图中,我在单元格A1:E5上创建了一个名为rngSrcData的命名区域。我还在左上角的单元格中创建了一个命名区域,表示粘贴特殊操作的目标。该范围的名称为rngFirstCellToCopyTo,在所示的图像中,它定义在单元格A7

然后我运行宏,它复制单元格的格式

使用命名范围可以是动态的,只要在范围内插入,或者如果命名范围超出现有边界,请确保更新命名范围

或者,您可以编写一些VBA来查找要从中复制的矩阵。关于目的地最好的部分是,它永远只是你需要担心的左上角的单元格,所以你不需要想太多

正如我最初所说的,我使解决方案非常简单。如果您想在每次工作表更改时强制执行单元格格式设置,这也会起作用

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Range("rngSrcData").Copy
    Range("rngFirstCellToCopyTo").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

    Target.Select

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
。。。它有点笨重,但能胜任。不过,您还需要考虑,您的所有标准撤消功能都将是无效的。这是你需要考虑的问题。

也可以更新已更改的单个单元格,但需要更多的逻辑来确定已更改单元格的偏移量。此外,changed事件不会对所有内容都触发,它只对单元格数据更改触发,而不会对格式更改触发


我希望这能有所帮助。

亲爱的布拉德·迪克森,感谢您的快速回复。这是一个很好的解决方案,但我必须手动运行宏。此外,我的工作表中有数百个单元格,每次运行都需要时间。我正在寻找一种解决方案,可以捕获更改的单元格并更新相应链接单元格的格式。@MOwais是的,它可以修改,因此我说我简化了我的回答。让我用另一个选项更新我的答案。@MOwais我添加的内容可能不是单个单元格的更新,但它将涵盖所有内容,不管怎样,我认为与单个单元格的方法相比,处理所需的时间将是相当不明显的。让我知道它工作得有多好。如果它仍然不够,而且表现很差,让我知道,我可以把它提升到下一个水平。当然,我宁愿不这样做-