Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除B-G列中没有信息的所有行_Excel_Vba - Fatal编程技术网

Excel 删除B-G列中没有信息的所有行

Excel 删除B-G列中没有信息的所有行,excel,vba,Excel,Vba,我试图创建一个程序,删除B-G列中没有信息的所有行,然后将数据从垂直方向重新排列为水平方向 数据仅在A-G列中排列,以便每两行(数字不是常数)显示一行日期。我希望每个带有日期的行彼此水平粘贴,并且日期之间的所有数据都与日期相对应地移动(包括A列) 删除空行的部分工作正常。然而,当我试图编写重新排列程序时,我不断得到一个 “需要对象” 子行(即第一行)中出现的错误。有人能帮我解决这个问题吗?代码粘贴在下面 Sub MovingDeletion() Set rngRange = Selectio

我试图创建一个程序,删除B-G列中没有信息的所有行,然后将数据从垂直方向重新排列为水平方向

数据仅在A-G列中排列,以便每两行(数字不是常数)显示一行日期。我希望每个带有日期的行彼此水平粘贴,并且日期之间的所有数据都与日期相对应地移动(包括A列)

删除空行的部分工作正常。然而,当我试图编写重新排列程序时,我不断得到一个

“需要对象”

子行(即第一行)中出现的错误。有人能帮我解决这个问题吗?代码粘贴在下面

Sub MovingDeletion()


Set rngRange = Selection.CurrentRegion
lngNumRows = rngRange.Rows.Count
lngFirstRow = rngRange.Row
lngLastRow = lngFirstRow + lngNumRows - 1

columns("B").Select
lngCompareColumn1 = ActiveCell.Column
columns("C").Select
lngCompareColumn2 = ActiveCell.Column
columns("D").Select
lngCompareColumn3 = ActiveCell.Column
columns("E").Select
lngCompareColumn4 = ActiveCell.Column
columns("F").Select
lngCompareColumn5 = ActiveCell.Column
columns("G").Select
lngCompareColumn6 = ActiveCell.Column

columns("A").Select
lngCompareColumn7 = ActiveCell.Column
Set MedicationRow = 0
'Deletion Code (Works  Fine)
For lngCurrentRow = lngLastRow To lngFirstRow Step -1
Mrow = True
If (Cells(lngCurrentRow, lngCompareColumn1).Text = "" And Cells(lngCurrentRow, lngCompareColumn2).Text = "" And Cells(lngCurrentRow, lngCompareColumn3).Text = "" And Cells(lngCurrentRow, lngCompareColumn4).Text = "" And Cells(lngCurrentRow, lngCompareColumn5).Text = "" And Cells(lngCurrentRow, lngCompareColumn6).Text = "") Then _
Rows(lngCurrentRow).Delete

'Rearrangement Code (Does not  work. Gives Object Requiered error)

Dim counter As Integer
Dim NextRow  As Integer
Dim i As Integer
i = lngCurrentRow
 counter = 0
 Number = 0
 If (Cells(lngCurrentRow, lngCompareColumn7).Text <> "Days") Then
   counter = counter + 1
   If counter > 1 Then
    NextRow = lngCurrentRow - 1
    While (Cells(NextRow, lngCompareColumn7).Text <> "Days")
     NextRow = NextRow - 1
     Number = Number + 1
     Wend
     End If
   Range("A" & CStr(i) & ":G" & CStr(NextRow)).Cut Range("H1" & CStr(i) & ":P" & CStr(NextRow))
  End If

Next lngCurrentRow

End Sub

子移动删除()
设置rngRange=Selection.CurrentRegion
lngNumRows=rngRange.Rows.Count
lngFirstRow=rngRange.Row
lngLastRow=lngFirstRow+lngNumRows-1
列(“B”)。选择
lngCompareColumn1=ActiveCell.Column
列(“C”)。选择
lngCompareColumn2=ActiveCell.Column
列(“D”)。选择
lngCompareColumn3=ActiveCell.Column
列(“E”)。选择
lngCompareColumn4=ActiveCell.Column
列(“F”)。选择
lngCompareColumn5=ActiveCell.Column
列(“G”)。选择
lngCompareColumn6=ActiveCell.Column
列(“A”)。选择
lngCompareColumn7=ActiveCell.Column
设置MedicalationRow=0
'删除代码(工作正常)
对于lngCurrentRow=lngLastRow到lngFirstRow步骤-1
Mrow=真
如果(单元格(lngCurrentRow,lngCompareColumn1).Text=“”和单元格(lngCurrentRow,lngCompareColumn2).Text=“”和单元格(lngCurrentRow,lngCompareColumn3).Text=“”和单元格(lngCurrentRow,lngCompareColumn5).Text=“”和单元格(lngCurrentRow,lngCompareColumn6).Text=“”),则_
行(lngCurrentRow)。删除
'重新排列代码(不起作用。提供所需对象错误)
作为整数的Dim计数器
Dim NextRow为整数
作为整数的Dim i
i=lngCurrentRow
计数器=0
数字=0
如果(单元格(lngCurrentRow,lngCompareColumn7).Text“Days”),则
计数器=计数器+1
如果计数器>1,则
NextRow=lngCurrentRow-1
While(单元格(下一步,LNGCOMPARE7列)。文本“天”)
NextRow=NextRow-1
数字=数字+1
温德
如果结束
范围(“A”和CStr(i)&“:G”和CStr(NextRow))。切割范围(“H1”和CStr(i)&“:P”和CStr(NextRow))
如果结束
下一个lngCurrentRow
端接头

在VBA中,使用Select/Activate不是一个好的过程,它会使代码变得脆弱,难以调试。请参阅-
范围(“H1”和CStr(i)和“:P”和CStr(NextRow))
看起来有误。它最终可能与您刚才剪切的范围不同(列和行都不匹配),使用Select/Activate在VBA中不是一个很好的过程,并且会使代码变得脆弱,难以调试。请参阅-
范围(“H1”和CStr(i)和“:P”和CStr(NextRow))
看起来有误。它可能最终与您刚才剪切的区域的形状不同(列和行都不匹配)