chaos2go
Goto Top

VBA Excel Filter mit vor Definiertem Freien Platz

Hey ihr ,


unzwar habe ich einen Excel Report , für den ich ein VBA script habe , was mir meine direkten sachen Filtert.
Das Filtern funktioniert auch so ohne Problem ,es werden meine Excel Sheets erstellt alles Gut .

Jetzt kommt es zu der Frage

Zur Info : Es sind Status Einträge

Ich erstelle ein Dictenory mit allen Einträgen in meinem Fall ist es [ - A bis ZY ] .

Jetzt sollen alle einträge in dem neuen Sheet nicht am Anfang sondern paar Spalten weiter unten eingefügt werden , da oben für jeden Status ein Seperater Text Spezifisch für den Status mit eingefügt werden soll .


Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen .

Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .


Aufbau des Excel Files

Geht von A - L


Einträge sind

von links nach rechts ...


Beschreibung , Bezeichner ,Betreiberbezeichner , Wert, Einheit ,Objektbeschreibung , Zustand , Typ ;L/S, Parameter, Min, Max

Ich Filter nach Zustand und erstelle für jede Zustands möglichkeit ein neues Sheet wo alle Einträge mit dem Zustand Hinzugefügt werden , das Funktioniert Ohne Probleme .


Es gibt gesamt 14 Zustände


jetzt soll für Jeden Zustand ein Seperater Text am Anfang mit eingefügt werden und darunter die Einträge


Beispiel :


Zustand 1 Es muss das und das Gemacht werden

Datensatz


Datensatz


alle Einträge mit mit Zustand 1 abgearbeitet , kommt Zustand 2


wieder oben der Eintrag

Zustand 2 Hier muss es anders Gemacht werden


Datensatz

Datensatz

...


usw ...


hoffe man versteht es nu besser , es ist immer blöd was zu erklären was man selber nicht ganz versteht ...


code sieht wie folgt aus (beiu dem Wurde mir hier auch geholfen )

Sub CopyUniqueToSheets()

     'Alle Leeren Einträge mit etwas Füllen keine Datei mit Leeren Namen erstellt werden kann   
    Columns("G:G").Select  
    Selection.Replace What:="", Replacement:="empty", LookAt:=xlPart, _  
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False



    Dim ws As Worksheet, newWS As Worksheet, cell As Range, dic As Object, c As Range
    'Dictionary-Objekt erzeugen  
    Set dic = CreateObject("Scripting.Dictionary")  
    'Worksheet festlegen in dem die Daten liegen  
    Set ws = Sheets(1)
    'letze Zeile ermitteln  
    lastRow = ws.UsedRange.Rows.Count
    
    For Each cell In ws.Range("G25:G" & lastRow)  
        'Wenn der Zustand in der aktuellen Zelle noch nicht verarbeitet wurde  
        If Not dic.Exists(cell.Value) Then
            'Zustand zum Dictionary hinzufügen  
            dic.Add cell.Value, ""  
            'neues Worksheet hinzufügen  
            Set newWS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
            'dem Worksheet den Namen des Zustandes geben  
            newWS.Name = cell.Value
            'Überschriftenzeile übertragen  
            ws.Range("A24").EntireRow.Copy newWS.Range("A24")  
            'Suche in Spalte G  
            With ws.Range(cell, "G" & lastRow)  
                'Suche den Zustand in der aktuellen Zelle  
                Set c = .Find(cell.Value, LookIn:=xlValues)
                If Not c Is Nothing Then
                    firstAddress = c.Address
                    Do
                        'Eintrag gefunden, kopiere die gefundene Zeile ins neue Sheet ans Ende  
                        c.EntireRow.Copy newWS.UsedRange.Cells(newWS.UsedRange.Rows.Count + 1, 1)
                        'Suche den nächsten Eintrag  
                        Set c = .FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
            End With
        End If    
    Next
 MsgBox "Its Done"  
End Sub



danke schon mal im voraus für die Hilfe


gruß chaos2go

Content-ID: 260063

Url: https://administrator.de/contentid/260063

Ausgedruckt am: 26.11.2024 um 12:11 Uhr

114757
114757 16.01.2015 aktualisiert um 11:20:38 Uhr
Goto Top
Zitat von @chaos2go:
Also wenn er mir z.B. den Sheet A erstellt Diesen xyz Text mit einfügen und darunter weiter machen mit den Einträgen
Wenn er jetzt zum erstellen von Sheet B kommt Diesen Text mit Blabla einfügen .
Ich glaube keiner versteht hier so ganz was du meinst. Nutze unseren vielfältigen Formatierungsmöglichkeiten um deiner Erklärung etwas mehr Klarheit zu verleihen.
Stell dir immer vor das wir dein Sheet nicht kennen...

Gruß jodel32
Xolger
Xolger 16.01.2015 um 11:37:28 Uhr
Goto Top
Hallo,

ich bin mit VBA Script nicht weiter vertraut, aber ausgehend von VBA sollte es doch möglich sein,
die erste Zeilennummer anzugeben, wo dein Report hingeschrieben wird.

Bzw. hast du eine Variable für den Zeilenindex und fängst mit deinen Texten bei Zele 1 an und die Variable wird dann beim Report weiter hochgezählt.


Gruß
Xolger
chaos2go
chaos2go 16.01.2015 um 11:44:59 Uhr
Goto Top
Wenn ich erlich bin , wusste ich es auch nicht so genau wie ich es beschreiben sollte

aber ich ändere es jetzt gleich nochmal
chaos2go
chaos2go 16.01.2015 um 11:45:52 Uhr
Goto Top
Ja das denke ich schon , man kann ja Ranges erstellen

Problem ist nur für jeden Status einen Direkten Text mit am Anfang anzufügen
Xolger
Xolger 16.01.2015 um 11:59:21 Uhr
Goto Top
Nimmst du VBA Script oder hast du ein Makro welches du unter VBA ausführst?
chaos2go
chaos2go 16.01.2015 um 12:02:09 Uhr
Goto Top
Ich hab ein VBA Script
Xolger
Xolger 16.01.2015 um 12:06:36 Uhr
Goto Top
Keine Ahnung wie du es für den Report realisiert hast aber:
Vor der Ausgabe in einem Sheet kannst du doch erstmal eine Zelle (1,1) ansteuern und deinen Text reinschreiben lassen.
Dann legt der Report los und startet mit der Ausgabe halt bei Zelle (2,1).

Oder sehe ich das zu simpel?

Ansonsten poste mal einen Codeschnipsel damit man sieht wie das Script arbeitet.
chaos2go
chaos2go 16.01.2015 um 12:43:12 Uhr
Goto Top
Ja in der Regel ja aber dann kommt für jeden zustand der Selbe Text

Das Problem ist jeder Zustand hat einen Seperaten Bestimmten Text
Xolger
Xolger 16.01.2015 um 12:54:43 Uhr
Goto Top
Du steuerst doch die Ausgabe für den Report auch Sheetabhängig oder?
Dann erstelle dir doch eine Variable für jeden Sheet bzw. übergebe an eine Variable den Sheetabhängigen Text bevor der Report im Sheet loslegt.
chaos2go
chaos2go 16.01.2015 um 13:20:56 Uhr
Goto Top
Also er erstellt für jeden Zustand Eintrag einen neuen Sheet mit desen namen und allen Einträgen
Xolger
Xolger 16.01.2015 um 14:33:32 Uhr
Goto Top
Und da musst du ansetzen und deinen Text mit unterbringen.
Ohne Codeschnipsel aus deinem Script wird dir hier bloß keiner helfen können.
Wir wissen ja nicht wie dein Script aussieht, um dir genau zu sagen wo was rein muss.
chaos2go
chaos2go 16.01.2015 um 14:45:05 Uhr
Goto Top
hab das script oben mit gepostet face-smile
114757
Lösung 114757 16.01.2015, aktualisiert am 19.01.2015 um 09:18:13 Uhr
Goto Top
Moin,
einfach in einem zweiten Dictionary zu Beginn deine Statustexte mit den Zuständen als Key hinterlegen:
set dicZustandstexte = CreateObject("Scripting.Dictionary")  
dic.add "Zustand1","Es muss das und das Gemacht werden"  
dic.add "Zustand2","Hier muss es anders Gemacht werden "  
dic.add "Zustand3","Und hier noch was anderes"  
' und so weiter  
Und dann hinter Zeile 30 folgendermaßen in das jeweilige Sheet einfügen
if dicZustandstexte.Exists(cell.Value) then
    newWS.Range("A22").Value = dicZustandstexte.Item(cell.Value)  
End if
Gruß jodel32
chaos2go
chaos2go 19.01.2015 um 09:18:10 Uhr
Goto Top
merci ,
ich werde es mal versuchen umzusetzten face-smile


gruß chaos2go