Excel .Interior.color索引问题
我有一个sub,它复制列中包含文本的所有单元格,并将它们转置到单独的页面上。它会在变换后更改每个单元格的填充颜色。然后用户可以添加更多数据并重新运行宏,它将通过首先查看填充颜色跳过已复制的单元格 一切正常,只有一个例外。只有复制的单元格在运行宏(预期结果)后变为黄色,但每次输入任何数据时,每个后续单元格都会更改颜色(意外结果)。我尝试添加一行以将下一个空单元格的颜色更改回0,但这没有帮助 运行此宏后,是否有任何方法可以防止Excel重新格式化单元格的颜色 这是完整的潜艇Excel .Interior.color索引问题,excel,vba,Excel,Vba,我有一个sub,它复制列中包含文本的所有单元格,并将它们转置到单独的页面上。它会在变换后更改每个单元格的填充颜色。然后用户可以添加更多数据并重新运行宏,它将通过首先查看填充颜色跳过已复制的单元格 一切正常,只有一个例外。只有复制的单元格在运行宏(预期结果)后变为黄色,但每次输入任何数据时,每个后续单元格都会更改颜色(意外结果)。我尝试添加一行以将下一个空单元格的颜色更改回0,但这没有帮助 运行此宏后,是否有任何方法可以防止Excel重新格式化单元格的颜色 这是完整的潜艇 Sub Transpos
Sub TransposeSubLocation()
Dim sh As Worksheet
Dim sht As Worksheet
Dim lRow As Long
Dim lCol As Long
Dim lYellow As Range
Set sh = Worksheets("Sub Location Lists")
Set sht = Worksheets("Equipment List")
Application.FindFormat.Interior.ColorIndex = 6
For i = 1 To 1000 Step 1
If sh.Cells(5, i).Value <> "" Then
lRow = sh.Cells(sh.Rows.Count, i).End(xlUp).Row
lCol = sht.Cells(5, sht.Columns.Count).End(xlToLeft).Column
On Error Resume Next
Set lYellow = sh.Range(sh.Cells(6, i), sh.Cells(lRow, i)).Find(what:="*", after:=sh.Cells(6, i), SearchDirection:=xlPrevious, SearchFormat:=True).Offset(1, 0)
If lCol > 1 Then
lCol = lCol + 1
End If
If sh.Cells(6, i).Interior.ColorIndex = 6 Then
sh.Range(lYellow, sh.Cells(lRow, i)).Copy
sht.Cells(5, lCol).PasteSpecial Transpose:=True
sh.Range(sh.Cells(6, i), sh.Cells(lRow, i)).Interior.ColorIndex = 6
'Here I attempted to force it back to no fill but this did not help
sh.Cells(lRow, i).Offset(1, 0).Interior.ColorIndex = 0
Else: sh.Range(sh.Cells(6, i), sh.Cells(lRow, i)).Copy
sht.Cells(5, lCol).PasteSpecial Transpose:=True
sh.Range(sh.Cells(6, i), sh.Cells(lRow, i)).Interior.ColorIndex = 6
sh.Cells(lRow, i).Offset(1, 0).Interior.ColorIndex = 0
End If
End If
Next
End Sub
子转置子位置()
将sh设置为工作表
将sht变暗为工作表
暗淡的光线和长的一样
暗淡的lCol尽可能长
昏暗的夜色如射程
Set sh=工作表(“子位置列表”)
Set sht=工作表(“设备清单”)
Application.FindFormat.Interior.ColorIndex=6
对于i=1到1000,步骤1
如果sh.Cells(5,i).值为“”,则
lRow=sh.Cells(sh.Rows.Count,i).End(xlUp).Row
lCol=sht.Cells(5,sht.Columns.Count).End(xlToLeft.Column)
出错时继续下一步
设置lYellow=sh.Range(sh.Cells(6,i),sh.Cells(lRow,i)).Find(what:=“*”,after:=sh.Cells(6,i),SearchDirection:=xlPrevious,SearchFormat:=True)。偏移量(1,0)
如果lCol>1,则
lCol=lCol+1
如果结束
如果sh.Cells(6,i).Interior.ColorIndex=6,则
sh.Range(lYellow,sh.Cells(lRow,i)).复制
短细胞(5,lCol).特殊转置:=真
sh.Range(sh.Cells(6,i),sh.Cells(lRow,i)).Interior.ColorIndex=6
“在这里,我试图迫使它回到没有填充,但这没有帮助
sh.Cells(lRow,i).偏移量(1,0).Interior.ColorIndex=0
其他:sh.Range(sh.Cells(6,i),sh.Cells(lRow,i))。复制
短细胞(5,lCol).特殊转置:=真
sh.Range(sh.Cells(6,i),sh.Cells(lRow,i)).Interior.ColorIndex=6
sh.Cells(lRow,i).偏移量(1,0).Interior.ColorIndex=0
如果结束
如果结束
下一个
端接头
您看到的错误类型是什么?请删除on error语句,然后使用F8逐步完成代码。也许你能用这种方法抓住罪犯。没有错误。代码运行良好。代码中的一切都按预期工作。但是用vba重新格式化单元格颜色会导致excel在数据输入其他单元格时自动更改其单元格颜色。如果单元格包含任何内容,则几乎类似于条件格式。如果我使用vba将A6:A10的单元格颜色更改为黄色,然后手动将数据输入A11,A11在输入后将自动变为黄色。这将持续到A12、A13、A14等。我认为这不是由上述代码引起的。Excel似乎是通过检测当前区域的格式,然后尝试继续。在这种情况下,您需要在单元格A11
中手动覆盖此选项。从那时起,它将不会影响。我签入了Excel>>选项>>校对
,但不幸的是,这里的选项有限。