使用ms-excel将背景颜色从单个单元格复制到单独的单元格中?

时间:2016-06-25 17:45:06

标签: excel-vba vba excel

我想将示例sheetA单元格A1的背景颜色复制到 表B A1。

单元格A1正在使用条件格式,我可以复制简单但不启用条件格式。

这是代码

Public Sub CopyColor()
Dim PeopleSheet As Worksheet
Dim TargetSht As Worksheet

'Define what our source sheet and target sheet are
Set PeopleSheet = ThisWorkbook.Worksheets("People")
Set ProcessSheet = ThisWorkbook.Worksheets("Process")
Set TechnologySheet = ThisWorkbook.Worksheets("Technology")
Set BusinessSheet = ThisWorkbook.Worksheets("Business")

Set TargetSht = ThisWorkbook.Worksheets("Summary")





Set s1 = PeopleSheet.Range("G3:G9").FormatConditions(1)

Set t1 = TargetSht.Range("F15:F21")

t1.Interior.Color = s1.DisplayFormat.Interior.Color

上一行t1.Interior.Color = s1给出错误Run-time error '13': Type mismatch

更新

enter image description here

更新2 @Ralph

这是分别在应用代码之前和之后的结果。

enter image description here enter image description here

只有f15影响其他人吗?

更新3

这是我能提出的最好的证据,当我运行VB时,它只需选择目标细胞并让我粘贴结果。所以视频中的左下角状态栏。enter image description here

3 个答案:

答案 0 :(得分:3)

要仅将A1上的sheetA格式(包括条件格式)复制到A1上的sheetB,您可以使用以下内容:

Worksheets("sheetA").Range("A1").Copy
Worksheets("sheetB").Range("A1").PasteSpecial xlPasteFormats

如果您不想放弃A1上单元格sheetB上的当前条件格式,只想在A1上添加sheetA条件格式你也可以使用xlPasteAllMergingConditionalFormats。然而,价值将被复制,你将不得不存储(之后再回来)。因此,这种情况下的完整代码可能是这样的:

Dim strTemp As String

strTemp = Worksheets("sheetB").Range("A1").Formula
Worksheets("sheetA").Range("A1").Copy
Worksheets("sheetB").Range("A1").PasteSpecial xlPasteAllMergingConditionalFormats
Worksheets("sheetB").Range("A1").Formula = strTemp

更新

显然,工作表名称和范围已更改(在更新中)。因此,更新的代码应为:

Dim varTemp As Variant

varTemp = Worksheets("Summary").Range("F15:F21").Formula
Worksheets("People").Range("G3:G9").Copy
Worksheets("Summary").Range("F15:F21").PasteSpecial xlPasteAllMergingConditionalFormats
Worksheets("Summary").Range("F15:F21").Formula = varTemp

请注意,您希望一次存储多个公式。因此,您需要一个数组变量来保存它而不再是字符串变量。

我不确定你在做什么。但它确实对我有用(应该如此):

enter image description here

答案 1 :(得分:2)

为什么不取出DisplayFormat并保持这样:

t1.Interior.Color = s1.Interior.Color

答案 2 :(得分:1)

这应该有用 - 至少我了解你的要求

Set s1 = PeopleSheet.Range("G3:G9").DisplayFormat
Set t1 = TargetSht.Range("F15:F21")

t1.Interior.Color = s1.Interior.Color