Hallo Leute,
Wie ihr oben schon gemerkt habt geht es um LayerVisibleInMap.
Problem:
Wenn ich einen Layer übers VBA auf false setze funktioniert es einwandfrei
Aber wenn ich dann einen weiteren Layer einfügen möchte bekomme ich eine fehlermeldung.
Diese meldung bekomme ich auch dann wenn ich einfach alle Layer durchgehe und diese ebenfals auf false setze knallt es spätestens beim zweitem layer.
Weis jemand woran das liegt?
Der Pfad verweist auf eine txt Datei in CSV format gespeichert ist:
Inhalt
Deutschland Höhenschichten;false
Deutschland Städte 10.-20.000 2004;false
Deutschland Städte >100.000 2004;true
Deutschland Städte 20.-50.000 2004;true
Deutschland Flüsse 2004;true
Deutschland PLZ(5)-Geb. 2004;false
Der Code:
Function AddFolie(Pfad As String, layoutName As String) As Integer
'Start der Variablen definition
Dim Layername As String
Dim clay As rgLayer
Dim layerSamlung As rgMapCollection
Dim i As Integer
Dim layoutNew As rgLayout
Dim variable As String
Dim colName As rgColumnDef
Dim TemplatesPfad As String
Dim ergPfad As String
Dim z() As String
'Dim test As rgcNorthArrow
'---------------------------------
TemplatesPfad = ""
Set layoutNew = project.SearchLayoutByName(layoutName) 'Sucht im Project nach dem Aktuellem Layout und setzt ihn als "Markierten/Activ"
i = 0 'Die Variable i wird auf 0 gesetzt um die reihenfolge der Layer zu gewärleisten
Set layerSamlung = layoutNew.maps 'Setzt die MapCollection = der MapCollection aus dem aktuellem Layout
layerSamlung.Item(0).NorthArrowType = nArrowType2 'Der PfeilTyp der die Himelsrichtung anzeigt wird gesetzt
layerSamlung.Item(0).NorthArrowVisible = True 'Der Pfeil wird auf dem Layout eingeblendet
Open Pfad For Input As #3 'Öffnet die datei zum seuqnziellem lesen und vergib einen alias namen
Do While Not EOF(3) 'Die while schleife läuft so lange die datei durch bis EndOfFile auftritt
Line Input #3, variable 'Liest die zeile und schreibt diese in eine variable
Layername = variable 'Setzt den layerName = der variable
z = Split(Layername, ";") 'String wird zerlegt und in ein Arraygespeichert als Parameter wird der String und trenzeichen übergeben
Set clay = project.SearchLayerByName(z(0)) 'Sucht den layerName im projekt und setzt diesen als markiert
If clay Is Nothing Then 'Wenn der Layer nicht im Projekt vorhanden ist
'MsgBox "nicht im projekt"
TemplatesPfad = TemplatesPfad & z(0) & ".RX5" 'der Pfad wird gesetzt wo sich alle Vorlagen befinden
If FileExists(TemplatesPfad) Then
ergPfad = project.ImportLayerTemplate(TemplatesPfad) 'Wird dieser versucht hinzuzufügen
Else
MsgBox "Der Layer " & z(0) & " wurde nicht gefunden"
End If
If ergPfad = "" Then 'prüfen ob der Layer in den Vorlagen gefunden wurde
'MsgBox "Der Layer wurde nicht gufunden" 'Die Fehlermeldung wird rausgegeben fals es keine Vorlage gufunden wurde
Else
Set clay = project.SearchLayerByName(z(0)) 'ansonsten: Sucht den layerName im Projekt und setzt diesen als markiert
clay.LoadLayer 'Lädt den Layer in den Speicher
layerSamlung.Item(0).AddLayer clay.LayerKey, i 'Setzt den Layer in die LayerCollection
i = i + 1
End If
Else
clay.LoadLayer 'Lädt den Layer in den Speicher
layerSamlung.Item(0).AddLayer clay.LayerKey, i 'Setzt den Layer in die LayerCollection
If z(1) = "false" Then <---------------------------So Hier ist die Prüfung auf den String
layerSamlung.Item(0).MapLayers(i).LayerVisibleInMap = False
End If
'layerSamlung.Item(i).InfoLayerIndex (1)
'MsgBox layerSamlung.Item(i).ID
i = i + 1 'i wird um eins erhöt damit der nächste layer drüber liegt
End If
'clay.CloseLayer
Loop 'Kehr zurück zu while anweisung und alles beginnt von vorne
Close #3 'Schließt die Datei #3
AddFolie = i
End Function