【问题标题】:Deleting a set of columns after selection of a defined value选择定义的值后删除一组列
【发布时间】:2014-07-21 16:49:52
【问题描述】:

在工作表中,我有一个工作表/列表,用户应在其中选择YES/NO,具体取决于要从哪个工作表保留/删除哪些列。
当用户选择 YES 时不会发生任何事情,因为列已经存在,但如果他选择 NO,则必须删除其他工作表的列。

直到现在我做了这段代码,但没有任何改变:

选项显式 选项基础 1 常量 TEMPLATE_SHE As String = "TemplateSHE"

Sub GenerateSHE()

Dim ws, wsh As Worksheet, Cel1 As Range
Dim Var1 As String
Dim Col_num As Integer
Dim Col_name As String
Dim MyRange As Range

 Set ws = Worksheets(4)
            For Each Cel1 In ws.UsedRange
               If (Cel1.Value = "NO") Then
                   For Each wsh In ActiveWorkbook.Sheets
                          With wsh.Name <> TEMPLATE_SHE
                                Col_num = .Range("A1").End(xlToRight).Column
                                Set MyRange = .Range(.Cells(1, 1), .Cells(1, Col_num)).Cells.Find(Col_name)
                                If Left(MyRange, 3) = "LEW" Then
                                    Columns("AY:BC").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 3) = "RMS" Then
                                    Columns("AT:AX").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 3) = "AMS" Then
                                    Columns("AR:AS").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 2) = "MM" Then
                                    Columns("AM:AQ").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 2) = "QM" Then
                                    Columns("AH:AL").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 3) = "TEM" Then
                                    Columns("AC:AG").Delete Shift:=xlToLeft
                                    ElseIf Left(MyRange, 3) = "LMM" Then
                                    Columns("X:AB").Delete Shift:=xlToLeft
                                End If
                        End With
                   Next wsh
               End If
            Next
        Set ws = Nothing
End Sub

有人可以帮我更正我的代码吗?

【问题讨论】:

  • NO 按钮是否与子/宏正确链接?
  • 实际上它是一个 activeX 组合框而不是一个按钮.. Cel1.Value 真的不起作用吗?如何将其链接到宏?
  • 你能发布你完整的子/宏吗?这样我就可以验证触发器是否正确。
  • 有没有办法向您发送一个合适的 excel 文件示例,以便您了解我的请求?
  • 我找到了解决方案,如果有人要寻找解决方案,请问我 :)

标签: vba excel excel-2007


【解决方案1】:

这是对我有用的解决方案,它与我开始使用的完全不同:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, [B2:E5]) Is Nothing Then Exit Sub
  If Target.Count > 1 Then Exit Sub
  If Target.Value = "YES" Then Exit Sub
  Call Del_Colns(Target.EntireRow.Cells(1, 1).Value, _
                         Target.EntireColumn.Cells(1, 1).Value)
End Sub

Private Sub Del_Colns(sheeet As String, colns As String)
Dim i As Long

  With Worksheets(sheeet).UsedRange.Rows(1)
    For i = .Cells.Count To 1 Step -1
      If InStr(1, .Cells(1, i).Formula, colns) = 1 Then
        .Cells(1, i).EntireColumn.Delete
      End If
    Next i
  End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多