【问题标题】:How to delete the empty cells in the rows when the data has been deleted using user form使用用户表单删除数据后如何删除行中的空单元格
【发布时间】:2015-09-18 07:39:44
【问题描述】:

您好,目前我有一个用户表单,允许我根据项目 ID 的用户输入删除选定的行,它将删除该项目 ID 的整行。但是,当数据被删除时,空行不会被删除并保持为空。因此,在使用删除命令按钮删除行中的数据后,我必须自己手动删除空行。我是否必须将任何其他代码添加到我拥有的当前代码中,以便在该特定行中删除数据后,空行也将被自动删除? 下面是我的删除命令按钮的代码。

Private Sub CommandDeleteButton1_Click()

    Dim lastrow
    Dim ProjCode As String
    Dim LabelProjName As String
    Dim LabelObjective As String
    Dim LabelProjSponsor As String
    Dim LabelProjSponsorNew As String
    Dim LabelProjManager As String
    Dim LabelRegulatory As String
    Dim LabelRiskLvl As String
    Dim LabelDatePar As Date
    Dim LabelCostPar As Long
    Dim LabelAffectCust As String
    Dim LabelCustNonRetail As String
    Dim LabelCustRetail As String
    Dim LabOutsourcingImp As String
    Dim LabelKeyUpdate As String
    Dim LabelSector As String

         lastrow = Sheets("Program Status Summary").Range("B" & Rows.Count).End(xlUp).row
         ProjCode = TextBoxProjCode.Text

            For currentrow = 4 To 100
                If Cells(currentrow, 2).Text = ProjCode Then
                    Cells(currentrow, 2).EntireRow.ClearContents
                End If

    Next currentrow

TextBoxProjCode.SetFocus

End Sub

任何帮助将不胜感激。谢谢你:)

【问题讨论】:

  • 请查看@paul bica 答案,这可能符合您的要求。

标签: vba excel userform


【解决方案1】:

尝试在下一个当前行之后插入此代码

With ws.Range("B2:B" & LastRow)
    If WorksheetFunction.CountBlank(.Cells) > 0 Then
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
End With

抱歉,我误读了您的问题。要删除空行,请尝试修改下面给出的标准代码,我用于删除空行。

Sub DeleteRows()
  Dim ws As Excel.Worksheet
  Dim LastRow As Long
  Set ws = ActiveSheet
  LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
   With ws.Range("A2:A" & LastRow)
    If WorksheetFunction.CountBlank(.Cells) > 0 Then
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
   End With
End Sub

请确保在测试代码期间尝试删除之前制作数据副本。

【讨论】:

  • 嗨意味着我必须创建一个新的 Sub 而不是调整我发布的代码? @skkakkar
【解决方案2】:

我优化了您发布的代码并将.EntireRow.ClearContents更改为.EntireRow.Delete

Option Explicit

Private Sub CommandDeleteButton1_Click()
    Const CL As String = "B"
    Dim fRow As Long, lRow As Long, fnd As Variant, v As Variant, prjCode As String

    fRow = 4
    With Worksheets("Program Status Summary")

        lRow = .Range(CL & .Rows.Count).End(xlUp).Row
        prjCode = Val(TextBoxProjCode.Text)

        v = Application.Transpose(.Range(CL & fRow & ":" & CL & lRow))
        fnd = Application.Match(prjCode, Split(Join(v, ","), ","), 0)

        If Not IsError(fnd) Then .Cells(fnd + fRow - 1, 2).EntireRow.Delete '<-----

    End With
    TextBoxProjCode.SetFocus
End Sub

【讨论】:

  • 不错的方法。我很想知道您的 v = Split(Join(Application.Transpose(.Range("B" &amp; fRow &amp; ":B" &amp; lastrow)), ","), ",") 正在尝试做什么
  • @skkakkar:谢谢。我的主要目标是消除循环,并且 Match 比 Find 更快,但它给了我一些我需要研究的问题。拆分正在创建一个一维数组,即使连续的单元格范围也可以正常工作(如.UsedRange.Columns(2)
  • 好的,谢谢你,我会试一试,结果会告诉你的!
  • 您好,我尝试将我的代码从 '.EntireRow.ClearContents 更改为 .EntireRow.Delete' 并且有效!非常感谢@paulbica
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2012-03-20
  • 2011-01-26
相关资源
最近更新 更多