Fehler 35601 Element not found

23/09/2009 - 10:50 von Leuenberger Christian | Report spam
Dieser Fehler Tritt nur auf unter Access 2007,
mit Access XP i.o.


Dies ist die Fehlerzeile welche markiert wird.
'Mutternode speichern
Set nodParent = Forms(strFormname).Controls(strControlname).Nodes("a" &
varReportToID)

Gruss
Christian

Der Ganze Code:
'== AddBranch Sub Procedure 'Rekursive Sub zur Generierung von TreeView-Ästen.
'Dzt. verwendet zur Darstellung der BP-Hierarchie.
'
' Quelle: Microsoft Knowledge Base, http://support.microsoft.com
' Recursive Procedure to add branches to TreeView Control
'Requires:
' ActiveX Control: TreeView Control
' Name: wie übergeben
'Parameters:
' Formname: Name des Forms, in dem das TreeView-Element steht
(Neu durch M. Seip)
' Controlname: Name des TreeView-Elements (Neu durch M. Seip)
' rst: Self-referencing Recordset containing the data
' strPointerField: Name of field pointing to parent's primary key
' strIDField: Name of parent's primary key field
' strTextField: Name of field containing text to be displayed
' erweitert duch M. Seip: Angabe mehrerer Felder
durch ; getrennt möglich;
' werden dann verkettet mit " / " und gemeinsam
ausgegeben
' z.B. "1300 / Forderungen"
'' ANmerkung M. Seip 05.04.2002:
' Die Add-Methode des TreeView.Node-Objektes interpretiert die
übergebene "Mutterposition" (Variant)
' als *Key*wert, wenn sie als String übrgeben wird und als *Index*wert
(!), wenn sie numerisch ist.
' Ein CStr reicht leider nicht aus, daher wurde an die BPs als Key der
Buchstabe a vorangestellt,
' so daß eine Stringvariable ensteht.


Sub AddBranch(strFormname As String, strControlname As String, _
rst As DAO.Recordset, strPointerField As String, _
strIDField As String, strTextField As String, strIDIcon
As String, _
Optional varReportToID As Variant, Optional strColorField
As String)

'Argumente:
'strFormname = Name des Formulars, auf dem das Treeview steht
'strControlname = name des Treeview-Controls im Formulars
'rst = DAO-Recordset (VBA-tauglich geöffnete Tabelle/Abfarge) der
gesamten darzustellenden Daten.
'strPointerField = Name des Feldes im rst, das die Angaben zur
Parent_ID enthàlt
'strIDField = Name des Feldes im rst, das die ID enthàlt
'strTextField = Namen der Felder, die im Baum als Beschriftung der
Äste darzustellen sind
'varReportToID = optionaler Wert für einen Start-Ast. Es werden dann
nur dessen "Nachkommen" gezeigt.
' wenn leer, wird der gesamte Baum ausgegeben.
'strColorField: Feldname aus rst, der die farbige Hinterlegung des
angelegten Nodes erzwingt, wenn rst in diesem Feld
' einen Wert <> "" hat.


On Error GoTo errAddBranch 'Fehlerrroutine
Dim nodParent
Dim strCriteria As String, strText As String, strKey As String
Dim bk As String
Dim txtfld As Variant


'Ermitteln eines Kriteriums für die erste darzustellende Ebene
If IsMissing(varReportToID) Then 'Baum soll komplett dargestellt werden
strCriteria = strPointerField & " Is Null" 'Äste erster Ebene
erkennt man am fehlenden Parent
Else 'Baum soll ab der ID gezeigt werden, die bei varReportTo
angegeben ist
'Kriterium für "Töchter der varReportToID" bilden
strCriteria = BuildCriteria(strPointerField, _
rst.Fields(strPointerField).Type, "=" & varReportToID)
'Mutternode speichern
Set nodParent =
Forms(strFormname).Controls(strControlname).Nodes("a" & varReportToID)
End If

'Child-Sàtze suchen und rekursiv einbauen
rst.FindFirst strCriteria 'Erste Tochter suchen
Do Until rst.NoMatch 'für alle Töchter folgende DoLoop-Schleife
abarbeiten:

'Anzuzeigende Texte und Keywert (String, s.o.!!) bauen
strText = "" 'Initialiserung, damit der vorige Ast nicht "nachwirkt"
For Each txtfld In Split(strTextField, ";") 'geforderte
Anzeigefelder zusammenbauen
strText = strText & " / " & rst(txtfld)
Next txtfld
strText = right$(strText, Len(strText) - 3) 'letzte 3 Zeichen
abschneiden, da das die letzten " / " sind

'Für jeden Ast (Node) muß eine eindeutige ID vergeben werden, die
ein Text sein muß. Grds. wàre zwar die
'ID aus der Quelltabelle tauglich, aber es bliebe ein Text mit
nuerischem Inhalt. Daher wird ein a vorangestellt,
'um z.B. aus der ID 32 den Key a32 zu machen - einen Text.
strKey = "a" & rst(strIDField)


'Node einbauen
If Not IsMissing(varReportToID) Then
'Es sollen nur die nachkommen einer bestimmten ID gezeigt werden
'dann sind wir hier bei der ersten Tochter der MutterID.
Forms(strFormname).Controls(strControlname).Nodes.Add
nodParent, tvwChild, strKey, strText
If rst(strIDIcon) = 1 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 1

Forms(strFormname).Controls(strControlname).Nodes(strKey).ExpandedImage = 2
Else

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 3
End If

'Forms(strFormname).Controls(strControlname).Nodes(strKey).Tag
= rst!Lieferant_ArtNr
If Not strColorField = "" Then
If Len(rst(strColorField)) <> 0 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).BackColor =
12632256
End If
End If
Else ' Es soll der ganze Baum gebaut werden. Dann sind wir
dzt. beim 1. Node auf 1. Ebene.
' Er hat keine Mutter, hat als Key strKey und als Text
den oben zusammengebauten Text
Forms(strFormname).Controls(strControlname).Nodes.Add ,
, strKey, strText
If rst(strIDIcon) = 1 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 1

Forms(strFormname).Controls(strControlname).Nodes(strKey).ExpandedImage = 2
Else

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 3
End If

'Forms(strFormname).Controls(strControlname).Nodes(strKey).Tag
= rst!Lieferant_ArtNr
If Not strColorField = "" Then
If Len(rst(strColorField)) <> 0 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).BackColor =
12632256
End If
End If
End If
'Aktuelle Position des rst zwischenspeichern, damit spàter
hier weitergemacht wird
bk = rst.Bookmark
'Töchternodes einbauen (Rekursion). Hier wird die ganze Chose
wieder aufgerufen, und zwar
'******* für die Nachkommen der aktuellen ID **********.
AddBranch strFormname, strControlname, rst, strPointerField,
strIDField, strTextField, strIDIcon, strIDField, strColorField
rst.Bookmark = bk ' Aufsuchen der letzten Position vor dem
Tochterzweig
rst.FindNext strCriteria 'nàchster Ast suchen
Loop

exitAddBranch:
Exit Sub

'--Error Trapping --
errAddBranch:
MsgBox "Can't add child: " & Err.Description, vbCritical,
"AddBranch Error:"
'Stop
'Resume exitAddBranch
Resume Next
End Sub
 

Lesen sie die antworten

#1 Leuenberger Christian
23/09/2009 - 13:05 | Warnen spam
Fehler ist gefunden
danke


Leuenberger Christian schrieb:
Dieser Fehler Tritt nur auf unter Access 2007,
mit Access XP i.o.


Dies ist die Fehlerzeile welche markiert wird.
'Mutternode speichern
Set nodParent = Forms(strFormname).Controls(strControlname).Nodes("a" &
varReportToID)

Gruss
Christian

Der Ganze Code:
'== AddBranch Sub Procedure > 'Rekursive Sub zur Generierung von TreeView-Ästen.
'Dzt. verwendet zur Darstellung der BP-Hierarchie.
'
' Quelle: Microsoft Knowledge Base, http://support.microsoft.com
' Recursive Procedure to add branches to TreeView Control
'Requires:
' ActiveX Control: TreeView Control
' Name: wie übergeben
'Parameters:
' Formname: Name des Forms, in dem das TreeView-Element steht
(Neu durch M. Seip)
' Controlname: Name des TreeView-Elements (Neu durch M. Seip)
' rst: Self-referencing Recordset containing the data
' strPointerField: Name of field pointing to parent's primary key
' strIDField: Name of parent's primary key field
' strTextField: Name of field containing text to be displayed
' erweitert duch M. Seip: Angabe mehrerer Felder
durch ; getrennt möglich;
' werden dann verkettet mit " / " und gemeinsam
ausgegeben
' z.B. "1300 / Forderungen"
'> ' ANmerkung M. Seip 05.04.2002:
' Die Add-Methode des TreeView.Node-Objektes interpretiert die
übergebene "Mutterposition" (Variant)
' als *Key*wert, wenn sie als String übrgeben wird und als *Index*wert
(!), wenn sie numerisch ist.
' Ein CStr reicht leider nicht aus, daher wurde an die BPs als Key der
Buchstabe a vorangestellt,
' so daß eine Stringvariable ensteht.


Sub AddBranch(strFormname As String, strControlname As String, _
rst As DAO.Recordset, strPointerField As String, _
strIDField As String, strTextField As String, strIDIcon As
String, _
Optional varReportToID As Variant, Optional strColorField
As String)

'Argumente:
'strFormname = Name des Formulars, auf dem das Treeview steht
'strControlname = name des Treeview-Controls im Formulars
'rst = DAO-Recordset (VBA-tauglich geöffnete Tabelle/Abfarge) der
gesamten darzustellenden Daten.
'strPointerField = Name des Feldes im rst, das die Angaben zur
Parent_ID enthàlt
'strIDField = Name des Feldes im rst, das die ID enthàlt
'strTextField = Namen der Felder, die im Baum als Beschriftung der Äste
darzustellen sind
'varReportToID = optionaler Wert für einen Start-Ast. Es werden dann
nur dessen "Nachkommen" gezeigt.
' wenn leer, wird der gesamte Baum ausgegeben.
'strColorField: Feldname aus rst, der die farbige Hinterlegung des
angelegten Nodes erzwingt, wenn rst in diesem Feld
' einen Wert <> "" hat.


On Error GoTo errAddBranch 'Fehlerrroutine
Dim nodParent
Dim strCriteria As String, strText As String, strKey As String
Dim bk As String
Dim txtfld As Variant


'Ermitteln eines Kriteriums für die erste darzustellende Ebene
If IsMissing(varReportToID) Then 'Baum soll komplett dargestellt werden
strCriteria = strPointerField & " Is Null" 'Äste erster Ebene
erkennt man am fehlenden Parent
Else 'Baum soll ab der ID gezeigt werden, die bei varReportTo
angegeben ist
'Kriterium für "Töchter der varReportToID" bilden
strCriteria = BuildCriteria(strPointerField, _
rst.Fields(strPointerField).Type, "=" & varReportToID)
'Mutternode speichern
Set nodParent =
Forms(strFormname).Controls(strControlname).Nodes("a" & varReportToID)
End If

'Child-Sàtze suchen und rekursiv einbauen
rst.FindFirst strCriteria 'Erste Tochter suchen
Do Until rst.NoMatch 'für alle Töchter folgende DoLoop-Schleife
abarbeiten:

'Anzuzeigende Texte und Keywert (String, s.o.!!) bauen
strText = "" 'Initialiserung, damit der vorige Ast nicht "nachwirkt"
For Each txtfld In Split(strTextField, ";") 'geforderte
Anzeigefelder zusammenbauen
strText = strText & " / " & rst(txtfld)
Next txtfld
strText = right$(strText, Len(strText) - 3) 'letzte 3 Zeichen
abschneiden, da das die letzten " / " sind

'Für jeden Ast (Node) muß eine eindeutige ID vergeben werden, die
ein Text sein muß. Grds. wàre zwar die
'ID aus der Quelltabelle tauglich, aber es bliebe ein Text mit
nuerischem Inhalt. Daher wird ein a vorangestellt,
'um z.B. aus der ID 32 den Key a32 zu machen - einen Text.
strKey = "a" & rst(strIDField)


'Node einbauen
If Not IsMissing(varReportToID) Then
'Es sollen nur die nachkommen einer bestimmten ID gezeigt werden
'dann sind wir hier bei der ersten Tochter der MutterID.
Forms(strFormname).Controls(strControlname).Nodes.Add
nodParent, tvwChild, strKey, strText
If rst(strIDIcon) = 1 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 1

Forms(strFormname).Controls(strControlname).Nodes(strKey).ExpandedImage = 2
Else

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 3
End If

'Forms(strFormname).Controls(strControlname).Nodes(strKey).Tag
= rst!Lieferant_ArtNr
If Not strColorField = "" Then
If Len(rst(strColorField)) <> 0 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).BackColor =
12632256
End If
End If
Else ' Es soll der ganze Baum gebaut werden. Dann sind wir dzt.
beim 1. Node auf 1. Ebene.
' Er hat keine Mutter, hat als Key strKey und als Text den
oben zusammengebauten Text
Forms(strFormname).Controls(strControlname).Nodes.Add ,
, strKey, strText
If rst(strIDIcon) = 1 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 1

Forms(strFormname).Controls(strControlname).Nodes(strKey).ExpandedImage = 2
Else

Forms(strFormname).Controls(strControlname).Nodes(strKey).Image = 3
End If

'Forms(strFormname).Controls(strControlname).Nodes(strKey).Tag
= rst!Lieferant_ArtNr
If Not strColorField = "" Then
If Len(rst(strColorField)) <> 0 Then

Forms(strFormname).Controls(strControlname).Nodes(strKey).BackColor =
12632256
End If
End If
End If
'Aktuelle Position des rst zwischenspeichern, damit spàter hier
weitergemacht wird
bk = rst.Bookmark
'Töchternodes einbauen (Rekursion). Hier wird die ganze Chose
wieder aufgerufen, und zwar
'******* für die Nachkommen der aktuellen ID **********.
AddBranch strFormname, strControlname, rst, strPointerField,
strIDField, strTextField, strIDIcon, strIDField, strColorField
rst.Bookmark = bk ' Aufsuchen der letzten Position vor dem
Tochterzweig
rst.FindNext strCriteria 'nàchster Ast suchen
Loop

exitAddBranch:
Exit Sub

'--Error Trapping --
errAddBranch:
MsgBox "Can't add child: " & Err.Description, vbCritical, "AddBranch
Error:"
'Stop
'Resume exitAddBranch
Resume Next
End Sub

Ähnliche fragen