[Excel] FIND geeft error

Pagina: 1
Acties:
  • 783 views sinds 30-01-2008
  • Reageer

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 15-08 17:22
Ik ben bezig met een klein boekhoudssysteempje en wilde maken dat als je een nummer van een rekeningintypt hij de juiste persoon erbij vindt. Maar ook andersom.
Dat werkt nu, maar als ik een rekeningnummer opgeef dat niet bestaat krijg ik de volgende error:
Fout 91 tijdens uitvoering:

Objectvariabele of blokvariabele With niet ingesteld
Ik ben nog maar een beginneling met VBA dus als je nog aanmerkingen hebt op de code, hoior ik het ook graag

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oldRow, newRow, oldColumn, newColumn As Integer
    Dim searchString, value As String
        
    oldRow = Target.Row
    oldColumn = Target.Column

    searchString = Trim(Target.value)
    
    If Not (Target.value = "") Then
        If (oldColumn = "3") Then
            newRow = Worksheets("Rubrieken").Range("Rubrieken").Find(searchString).Row
            newColumn = Worksheets("Rubrieken").Range("Rubrieken").Find(searchString).Column + 1
                    
            value = Worksheets("Rubrieken").Cells(newRow, newColumn).value
            
            If Not (Worksheets("Journaal").Cells(oldRow, 4).value = value) Then
                Worksheets("Journaal").Cells(oldRow, 4).value = value
            End If
        ElseIf (oldColumn = "4") Then
            newRow = Worksheets("Rubrieken").Range("Rubrieken").Find(searchString).Row
            newColumn = Worksheets("Rubrieken").Range("Rubrieken").Find(searchString).Column - 1
                    
            value = Worksheets("Rubrieken").Cells(newRow, newColumn).value
                    
            If Not (Worksheets("Journaal").Cells(oldRow, 3).value = value) Then
                Worksheets("Journaal").Cells(oldRow, 3).value = value
            End If
        End If
    End If
End Sub

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Verwijderd

find geeft als resultaat een bereik (range) terug, als dit bereik niet gevonden wordt, is het leeg (nothing). het best is dus te proberen het resultaatbereik van de findmethode in een rangeobject te stoppen (niet getest):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
dim NieuweCel as range
dim Waarde as string
set nieuwecel=Worksheets("Rubrieken").Range("Rubrieken").Find(searchString)
if not nieuwecel is nothing
'we hebben iets gevonden
 Waarde=nieuwecel.offset(0,1).value
 'bovenstaand levert als het goed is hetzelfde resultaat als jouw
 'value = Worksheets("Rubrieken").Cells(newRow, newColumn).value
else
 msgbox "sorry, niets gevonden!"
end if
nog een paar losse opmerkingen. in vba moet ieder type van een variabele apart gedefinieerd worden: dim oldrow as integer, dim newrow as integer enz... (opgelet dit kan fout aflopen, integer gaat tot 32767, excel heeft 65536 rijen! -> dim newrow as long)
gebruik geen gereserveerde namen voor variabelen, en ook geen namen uit het objectmodel van excel. de naam 'value' komt al voor in het objectmodel, dus gebruik hier een alternatief (bv. waarde)

[ Voor 10% gewijzigd door Verwijderd op 09-02-2006 12:43 ]


  • k0ewl
  • Registratie: December 2003
  • Laatst online: 15-08 17:22
Dankjewel, ik wist dat ik moest kijken of hij leeg was, maar wist niet hoe.
Zat eerst aan NULL te denken, maar dat kent VB dan weer niet.

Maarja, de complete code zoals hij nu is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim searchString As String
    
    Dim oldRow As Integer
    Dim newRow As Integer
    Dim oldColumn As Integer
    Dim newColumn As Integer
    
    Dim cellObject As Range
    Dim cellValue As String

    oldRow = Target.Row
    oldColumn = Target.Column

    searchString = Trim(Target.value)
    
    If Not (searchString = "") Then
        Set cellObject = Worksheets("Rubrieken").Range("Rubrieken").Find(searchString)
        
        If Not cellObject Is Nothing Then
            If (oldColumn = "3") Then
                cellValue = cellObject.Offset(0, 1).value
                                                               
                If Not (Target.Offset(0, 1).value = cellValue) Then
                    Target.Offset(0, 1).value = cellValue
                End If
            ElseIf (oldColumn = "4") Then
                cellValue = cellObject.Offset(0, -1).value
                
                If Not (Target.Offset(0, -1).value = cellValue) Then
                    Target.Offset(0, -1).value = cellValue
                End If
            End If
        End If
    Else
        If (oldColumn = "3") Then
            Target.Offset(0, 1).value = ""
        ElseIf (oldColumn = "4") Then
            Target.Offset(0, -1).value = ""
        End If
    End If
End Sub

[ Voor 5% gewijzigd door k0ewl op 09-02-2006 13:12 ]

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."