2012-02-26 21 views
6

Jestem nieco zdezorientowany przez komórki i zakres w vba (excel). Logicznie rzecz biorąc, mógłbym myśleć, że komórka jest zakresem o rozmiarze = 1; i myślę, że łatwo jest uzyskać zasięg z komórki.Excel vba: Zakres i komórka

Po przeczytaniu api właściwości EntireRow here działa ona w zakresie. Ale, praca poniżej kod, oznaczając „cell'variable wewnątrz pętli jest zakres

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

Jednocześnie, poniższy kod zwraca błąd wskazujący niezgodność typów kiedy wezwać removecell funkcję. Jaki powinien być typ targetCell w definicji funkcji?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Masz rację. Cell to Range z 1 pozycją. Czy 'val' jest typu' Boolean'? – shahkalpesh

+0

tak. ta metoda działała poprzednio, gdy przekazałem "cell.Text" i zaakceptowałem ją w metodzie remove cellVal As String. Teraz próbuję przekazać komórkę (zakres) przez przepuszczenie komórki zamiast komórki.Text – bsr

Odpowiedz

4

To kompiluje i działa:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Dzięki. "Dim Cell jako Excel.Range" dał mi wskazówkę, ponieważ wcześniej nie deklarowałem wyraźnie komórki. Jak już wspomniałem, właśnie przekonwertowałem metodę i wcześniej nie musiałem jawnie deklarować komórki. Błąd, który otrzymałem, był trochę mylący. – bsr

+2

Domyślną wartością obiektu Range jest Wartość, więc gdy komórka nie została zadeklarowana jako Zasięg, przyjęto, że komórka jest wartością, która, w uzasadniony sposób, spowodowała "niedopasowanie typu". Bardzo dobrą praktyką jest deklarowanie wszystkich zmiennych. Aby to wymusić, w VBE wybierz Narzędzia> Opcje> Edytor> Wymagaj deklaracji zmiennej. Spowoduje to dodanie opcji Explicit do górnej części wszystkich nowych modułów i wyświetli błąd kompilatora "Zmienna nie zdefiniowana" dla niezadeklarowanych zmiennych. Możesz także po prostu wpisać Option Explicit na górze istniejących modułów. –

+0

+1 na dobrej końcówce do zadeklarowania zmiennych! –

Powiązane problemy