Excel 保留列标题为彩色的列,并删除其余列

Excel 保留列标题为彩色的列,并删除其余列,excel,vba,Excel,Vba,我正在尝试阅读或查找带有任何颜色的列标题,并仅保留这些标题,删除其余标题 每次数据变化时,任何列名称或标题都可以是任何颜色 我明白了 错误438“对象不支持此属性方法” 在行Set Body=….. 我无法确定我的select case方法的逻辑是否正确,或者if语句是否可以解决问题 选项显式 亚德尔科() 标题作为范围,正文作为范围,列作为长度,查找为布尔值,wsh作为工作表,wb作为工作簿 暗淡的颜色范围 将currentColumn设置为整数 Set header=ActiveWorkbo

我正在尝试阅读或查找带有任何颜色的列标题,并仅保留这些标题,删除其余标题

每次数据变化时,任何列名称或标题都可以是任何颜色

我明白了

错误438“对象不支持此属性方法”

在行
Set Body=…..

我无法确定我的select case方法的逻辑是否正确,或者if语句是否可以解决问题

选项显式
亚德尔科()
标题作为范围,正文作为范围,列作为长度,查找为布尔值,wsh作为工作表,wb作为工作簿
暗淡的颜色范围
将currentColumn设置为整数
Set header=ActiveWorkbook.Worksheets(“Main”).UsedRange.Rows(1).Columns
Set body=ActiveWorkbook.Worksheets(“Main”).Offset(1).Columns
对于col=1到header.Count
found=HASCALOR(主体(col),vbGreen)
选择案例标题
案例被发现
其他情况
如果指令(1_
ActiveWorkbook.Worksheets(“Main”).UsedRange.Cells(1,currentColumn).Value_
“找到”,vbBinaryCompare)=0,然后
Active工作簿。工作表(“主”)。列(列)。删除
如果结束
结束选择
下一个
端接头

你能把全部代码都贴出来吗?我看不到有人在排队

SetBody=...
然而,你的目标是什么

HasColor(body(col), vbGreen)
你到底是怎么做的

但有一个问题:您试图实现在执行时删除所有列,其中标题(例如顶部单元格)不是任何颜色的,对吗?

删除标题中不包含指定颜色的列
  • 这是一个初级中间解决方案,它将使用指定工作表的标题行计算最后一列。然后,它将从最后一列循环到指定的第一列,并检查标题行中的每个单元格的填充颜色是否为绿色(
    vbGreen
    )。如果是(非绿色),它将隐藏/删除该列
  • 该代码仅适用于标题行中手动设置的颜色(包括通过
    VBA
    )。它不适用于
    条件格式
  • 代码将被复制到标准模块中,例如
    Module1
  • 如果在包含此代码的工作簿中发生这种情况,则必须将所有出现的
    ActiveWorkbook
    替换为
    ThisWorkbook
  • 运行此代码之前,请调整两个常量:
    hRow
    (标题行)和
    First
    (第一列)
  • 请注意,无法撤消此操作。因此,出于测试目的,代码使用
    Hidden
    而不是
    Delete
    。如果代码对您有效,请注释掉行
    ws.Columns(j).Hidden=True
    并取消注释行
    ws.Columns(j).Delete
代码

Option Explicit

Sub deleteColumns()
    ' Define constants.
    Const hRow As Long = 1
    Const First As String = "A"
    ' Define worksheet.
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Worksheets("Main")
    ' Show all columns.
    ws.Columns.Hidden = False
    ' Calculate First Column.
    Dim FirstCol As Long
    FirstCol = ws.Columns(First).Column
    ' Calculate Last Column.
    Dim LastCol As Long
    LastCol = ws.Cells(hRow, ws.Columns.Count).End(xlToLeft).Column
    ' Declare variables.
    Dim j As Long
    ' Loop through columns from First to Last Column.
    For j = LastCol To FirstCol Step -1
        ' Check color in current cell.
        If Not ws.Cells(hRow, j).Interior.Color = vbGreen Then
            ' Test with 'Hidden', later change to 'Delete'.
            ws.Columns(j).Hidden = True
            'ws.Columns(j).Delete
        End If
    Next j
End Sub

Sub showColumns()
    ActiveWorkbook.Worksheets("Main").Columns.Hidden = False
End Sub

这些细胞是如何获得颜色的?手动,通过
VBA
或通过
条件格式
?代码是否位于
ActiveWorkbook
中?感谢您的详细解释,它可以工作感谢@VBASIC208