SORU
23 HAZİRAN 2012, CUMARTESİ


Son bulma konusunda hata VBA hücre

Son hücre değeri bulmak istiyorum, ben kullanın:

Dim last_row As Integer
Dim LastRow As Long

LastRow = Range("E4:E48").End(xlDown).Row

Debug.Print LastRow

Bir hücreye tek bir element koymak yanlış çıktı alıyorum. Ancak hücre içine birden fazla değer verdim mi, çıktı doğru mu? Bunun arkasındaki neden nedir?

CEVAP
23 HAZİRAN 2012, CUMARTESİ


NOTBu "bir yazı son satırı bulmak için Correct yol kullanabilirsiniz". dur yapma niyetindeyim Bu da son satır bulma yapmak için, en iyi uygulamaları karşılar. Ve bu yüzden yeni senaryo/bir bilgi karşısında ne zaman bu güncelleme devam edeceğim.


Son satır bulma güvenilmez yollar

Son derece güvenilmez ve bu nedenle asla kullanılmamalıdır olan son satır bulma en yaygın yollarından bazıları.

  1. UsedRange
  2. xlDown
  3. CountA

UsedRangeASLAveri olan son hücreyi bulmak için kullanılacak. Son derece güvenilmez. Bu deney deneyin.

Hücrede türü bir şey A5. Şimdi bu yöntem aşağıda verilen herhangi bir son satır hesaplamak, 5 verecektir. Şimdi renk hücresi A10 kırmızı. Eğer şimdi kod aşağıda herhangi bir kullanımı varsa, hala 5 alacak. Eğer Usedrange.Rows.Count kullanırsanız ne olur? 5 olmayacak.

Burada UsedRange nasıl çalıştığını göstermek için bir senaryo.

enter image description here

xlDown eşit derecede güvenilir değil.

Bu kodu göz önünde bulundurun

lastrow = Range("A1").End(xlDown).Row

Eğer veri olan bir tek hücre (A1) olsaydı orada neler olurdu? Çalışma sayfasındaki son satırı ulaşmadan sona erecek! Hücre A1 seçip basmak gibi bir şeySonundatuşuna basarak ve daha sonraAşağı Okanahtar. Bu da eğer bir aralıktaki boş hücreler varsa, orada size güvenilir olmayan sonuçlar verir.

CountA eğer aralarında boş hücreler varsa, orada yanlış sonuç verecektir, çünkü o da güvenilmez.

Ve bu nedenle bir UsedRange, xlDown CountA kullanımı son hücreyi bulmak için kaçınmalısınız.


Bir sütundaki en Son Satır bulacaksınız

Col E son Satırı bulmak için bunu kullanın

With Sheets("Sheet1")
    LastRow = .Range("E" & .Rows.Count).End(xlUp).Row
End With

Rows.Count önce . olduğunu fark ederseniz. Biz genellikle bunu görmezden gelmeyi tercih ediyor. THIS alabilirsiniz, olası bir hata söz konusu. Ben her zaman Rows.Count Columns.Count önce . kullanarak öneriyoruz. Bu soruyu kodu Rows.Count Excel 2003 ve öncesi için 65536 Excel 1048576 2007 ve daha sonra döner, çünkü başarısız olur klasik bir senaryodur. Benzer şekilde Columns.Count döner 256 16384, sırasıyla.

Yukarıdaki aslında bir Excel 2007 1048576 satır da vurguluyor üzerinde olması gerektiğini hep beyan değişken olan tutar satır değeri olarak Long yerine Integer başka sen-ecek almak bir Overflow hata.


Bir sayfasında Son Satırı bulmak

Sayfası Effective son satırı bulmak için bunu kullanın. Application.WorksheetFunction.CountA(.Cells) kullanımına dikkat edin. Bu veriler çalışma ile hücreler varsa, orada hiçbir zaman .Find Run Time Error 91: Object Variable or With block variable not set vermek için gereklidir

With Sheets("Sheet1")
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
        lastrow = .Cells.Find(What:="*", _
                      After:=.Range("A1"), _
                      Lookat:=xlPart, _
                      LookIn:=xlFormulas, _
                      SearchOrder:=xlByRows, _
                      SearchDirection:=xlPrevious, _
                      MatchCase:=False).Row
    Else
        lastrow = 1
    End If
End With

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010