2016-07-19 5 views
0

ファイル名が "A"列のどこかにあるスプレッドシートで作業しています。私は、その場所を見つけて、ファイル名が見つかった行の上にあるすべての行を削除するコードを書こうとしています。しかし、私のコードで何かが間違っています&エラーrun time error "91" object variable or with block variable not setが表示されます。ファイル名を含むセルの上の行を削除する

Option Explicit 

Sub abcd() 

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
Dim currentRowValue As String 
Dim oSht As Worksheet 
Dim lastRow As Long 
Dim strSearch As String 
Dim aCell As Range 

rowCount = 20 
sourceCol = 1 
lastRow = 22 
strSearch = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) 

Set oSht = Sheets(1) 
Set aCell = oSht.Range("1:" & lastRow).Find(What:=strSearch, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

If Not aCell Is Nothing Then 
    Rows(1 & ":" & aCell.Row - 1).EntireRow.Delete 
End If 

End Sub 
+0

ファイル名が行番号1にあるとどうなりますか?どのように行0を削除しますか?おそらくそれがあなたの問題です。 – cyboashu

+0

@Nafisこの範囲設定の 'Set aCell = oSht.Range(" 1: "&lastRow)'は​​このように使用できません。 "" Rangeを使う場合は "A5"のように設定する必要があります。数字が必要な場合はRange(Cells(Row、Col)、Cells(Row、Col))を使う必要があります。 ' –

+0

速い応答に感謝しますが、私はすでにこの方法も疲れています。 Range( "A5:A10")OR行(1:5)に同じ問題が発生しても、 私のフォーマット名では行1には見つからないので、これを心配する必要はありません。 – Nafis

答えて

0

編集:コメントに記載されているとおり、私の元のコードは上記の1行だけを削除しました。以下は修正されたコードです。私はあなたの問題がRowsだと思っています。それはActiveSheetです。oShtで作業したいという資格があります。

次の方法でIfブロックを置き換えることができます:EntireRowsが不要であることに注意してください、Rowsはすでに全体の行を返す

If Not aCell Is Nothing Then 
    oSht.Rows(1 & ":" & aCell.Row - 1).Delete 
End If 

+0

これは1行だけを削除します。ナフィスは上記のすべての行を削除したい –

+0

その作業に感謝します! – Nafis

関連する問題