我正在尝试创建一个宏,它将在我的工作簿中使用特定的工作表通过某一行,如果一个单元格显式为= 0,则删除该列,然后删除右边的下四列
我对VB的经验很少,所以我很难理解它。
非常感谢任何帮助。
这是我到目前为止的代码:
Sub SaveAsW()
Dim strFilename As String
Dim strpath As String
Dim curCell As Range
Dim TempValue, ColNr, RowNr, SecCol
RowNr = 35
strpath = Sheets("Rebooking Calculations").Range("AK9").Text
strFilename = Sheets("Ticket Input").Range("M10").Text
ThisWorkbook.Sheets("Tickets (1-48)").Copy
With ActiveWorkbook
For ColNr = 8 To 320
TempValue = Cells(RowNr, ColNr)
If (Application.IsNumber(TempValue)) And TempValue.Value = 0 Then
For SecCol = 1 To 4
Cells.EntireColumn.Delete
Next SecCol
End If
Next ColNr
.SaveAs strpath & "\" & strFilename & "(1-48)" & ".xls"
.Close 0
End With
更新:
w / help这就是我解决问题的方法。
ThisWorkbook.Sheets("Tickets (1-48)").Copy
With ActiveWorkbook
For ColNr = 8 To 250
If Cells(RowNr, ColNr - 1) = "0" Then
TempValue = Cells(RowNr, ColNr - 1)
If TempValue = "0" Then
For i = 0 To 9
Cells(RowNr, ColNr - 1).Select
Cells(RowNr, ColNr - 1).EntireColumn.Delete
Next i
ColNr = ColNr - 1
Else
End If
Else
End If
Next ColNr
.SaveAs strpath & "\" & strFilename & "(1-48)" & ".xls"
.Close 0
End With
感谢。 (注意:我最终不得不删除以下9列,因此循环)
答案 0 :(得分:0)
这是一个好的开始,但您的代码中存在一些问题:
首先,当你删除行或列时,通常是更容易降低你的变量,以避免丢失的行/列作为当删除一个(即列他们将转向第(i + 1)将成为删除后柱(I)初始列(i)和你会递增到第(i + 1)和错过初始第(i + 1)在初始重新启动第(i + 2))。
所以改变你的循环以避免这种情况。
一个临时变量来提高效率的想法是好的,但我认为,测试,你就指派到输入变量IsNumber(TempValue)
将无法正常工作,因此这将是不如直接在这里工作与细胞。
最后,如果您使用行和列指定特定单元格,或者在没有循环的情况下直接删除5列,Cells.EntireColumn.Delete
将更准确,请参阅更正的代码:
Sub SaveAsW()
Dim Ws As Worksheet, _
strFilename As String, _
strPath As String, _
ColNr As Integer, _
RowNr As Integer
RowNr = 35
strPath = Sheets("Rebooking Calculations").Range("AK9").Text
strFilename = Sheets("Ticket Input").Range("M10").Text
Set Ws = ActiveWorkbook.Sheets("Tickets (1-48)")
With Ws
'.Copy
For ColNr = 320 To 8 Step -1
If (Application.IsNumber(.Cells(RowNr, ColNr))) And .Cells(RowNr, ColNr) = 0 Then
.Columns(ColNr & ":" & ColNr + 4).EntireColumn.Delete
End If
Next ColNr
.SaveAs strPath & "\" & strFilename & "(1-48)" & ".xls"
.Close 0
End With
Set Ws = Nothing
End Sub