2015-07-08 15 views
5

Bu sorunu birkaç günlüğüne denemeye çalışıyorum ve başım ağrıyor. Birden fazla web sitesi aradım (Birkaç kez burada bile), birçok kişinin bu soruyu sorduğunu gördüm ama çözümler benim için çalışmıyor.VBA Bir dizginin son geçtiği yeri bul

Bir dizinin son oluşumunu bir aralıkta bulmak ve adresi bir değişkende saklamak ve nerede olduğunu söyleyen bir ileti görüntülemek istiyorum.

Şimdiye kadar bu

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm as Range 

    job = CmbBoxJob.Value 
    searchTerm = Range("A1:A999").find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious).Column 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

ben ya "geçersiz niteleyici" veya almak gibi tüm

Herhangi bir yardım takdir "nesne değişkeni veya bloğu değişkeni ile ayarlanmamış" var

+5

searchTerm Range ve ayarlanır ve sadece atanmamış olması gerekir. 'Set searchTerm = ..... vs…' – NickSlash

+2

@NickSlash'den bahsedildiği gibi, bir Aralık döndürmek için Set'i kullanmanız gerekir. Ayrıca sonunda bir sütun yerine sütun numarası döndüren .Column özelliğini kullanıyorsunuz. .Column'u terk etmelisin. – Jane

+0

Niçin searchTerm bir sütun döndürüyor? Biliyorsun zaten "1" olacak (sütun A). Sadece kodun bu bölümünü (.column) kaldırın. Sonra "searchTerm - Range (...") 'den önce "Set" yazın ve gideceğiniz zaman iyi olacak. – BruceWayne

cevap

5

İlk sorun, searchTerm'un Range nesnesi olarak tanımlanmış olmasıdır. Nesne atamalarını Set keyword kullanarak ayarlamanız gerekir. atama İkincisi Set searchTerm = Range("A1:A999")...

olur Yani searchTerm bulunmazsa searchTermNothing değeri atanacaktır çünkü, sen hata mesajlarını vuracaktır. Bu sorunu, job'un bulunup bulunmadığını kontrol etmek için basit bir koşul kullanarak önleyebiliriz.

nedenle senin böyle bir şey görünebilir Sub güncelleme:

Private Sub CmdBtnClockIt_Click() 
    Dim job As String 
    Dim searchTerm As Range 

    job = CmbBoxJob.Value 
    Set searchTerm = Range("A1:A999").Find(what:=job, searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    If searchTerm Is Nothing Then 
    MsgBox "Text was not found" 
    Else 
    MsgBox "Last cell is " & searchTerm.Address 
    End If 
End Sub 
+0

biraz yardımcı oldu, Geri dönüyor "Metin bulunamadı" Bu yüzden searchTerm ayarlanmadı – AshWood

+0

@AshWood: Bir satır veya 'MsgBox işi' satırından sonra iş çalışın = CmbBoxJob.Value'. 'CmbBoxJob.Value', arama teriminize sahip değildir veya değer, belirttiğiniz aralıkta hiçbir zaman bulunmaz. – grovesNL

+0

Teşekkürler, nihayet sıralamadım, cevabınız bana çok yardımcı oldu. – AshWood

1

Nasıl hakkında:

Sub dural() 
    Dim job As String 
    Dim searchTerm As Range 
    job = "Happiness" 
    Set searchTerm = Range("A1:A999").Find(what:=job, after:=Range("A1"), searchorder:=xlByColumns, searchdirection:=xlPrevious) 
    MsgBox "last cell is " & searchTerm.Address 
End Sub 

enter image description here

Not Set ürününü kullanıyorum.

+0

Bu ayrıca bana bir hata veriyor "nesne değişkeni veya blok değişkeni ayarlanmadı" – AshWood

+0

Kodum ve verilerim için bu, * A * –

+0

numaralı sütunda * Mutluluk * olmadığına işaret eder. Cevabınız, doğru yönde bana yardımcı oldu – AshWood

İlgili konular