我有一张由2个范围(相同大小)组成的Excel工作表,如图所示。 Sample Picture。现在,我想将较高范围的每个单元格的格式链接到较低范围的每个对应的单元格。我试过粘贴为链接图像选项,但是根据我的需求那没用。 到目前为止,我发现了以下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
它不再正常工作。请帮我。任何修改/新方法将不胜感激。也不要使用循环,因为它只是一个样本工作表,而我的实际工作表要大得多。
答案 0 :(得分:1)
我将大大简化我的答案,因为我不知道您要如何应用它,但是,我会通过复制然后粘贴特殊格式来做到这一点。
Public Sub CopyPasteSpecialFormats()
Range("rngSrcData").Copy
Range("rngFirstCellToCopyTo").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
将上面的代码扔到模块,更改方法或您要调用的某种方式中。
在上图中,我在单元格 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
...有点笨拙,但可以完成工作。不过,您还需要考虑所有标准的“撤消”功能都是无效的。这是您需要考虑的事情。
也可以更新已更改的单个单元格,但是您需要更多逻辑来确定已更改的单元格的偏移量。另外,更改后的事件并不会触发所有操作,仅触发单元格数据更改而不会触发格式更改。
我希望有帮助。