Übertragung multipler Daten aus einer Datei in andere Dateien
#31
(20.05.2024, 13:06)Gast 123 schrieb: Hallo

wo genau befindet sich der Blattschutz, in der Quelle- oder Zieldatei??  
Den können wir per VBA aufheben und wiedereinschalten. Mit und ohne Passwort.
Dazu muss ich aber wissen wo er sich befindet, dann kann ich dir die Befehle im Code einbauen.

Versuchweise gebe ich dir mal die Protect Befehle für die Zieldatei an.
ShtX.Unprotect  '"PW" ** hier ggf. dein Passwort angeben   -  vor lz1, lz2 den Blattschutz aufheben! 
lz1 = ShtX.Cells(Rows.Count, 1).End(xlUp).Row
lz2 = ShtX.Cells(Rows.Count, 4).End(xlUp).Row

ShtX.Protect  '"PW" ** hier ggf. MIT Passwort wieder einfügen   -  vor Save den Blattschutz wiederherstellen
WbEx.Save 'Stundennachweis Save

Wenn es KEIN Passwort gibt nur Protect und Unptotect verwenden, sonst das Passwort in "xxx" setzen.
Du kannst ja in einer leeren Exceldatei den Blattschutz setzen und aufheben zum Testen üben.
Ich hoffe diese Info hilft dir weiter.

mfg Gast 123

Der Blattschutz ist auf der Quelldatei und ist mit Passwort geschützt, genau.
Demzufolge müsste der Code dann so aussehen oder:
....
....
Liste:  ThisWorkbook.Activate
Set WbEx = Workbooks(Klient)
Set ShtX = WbEx.Sheets(1)
ShtX.Unprotect  '"PW"
lz1 = ShtX.Cells(Rows.Count, 1).End(xlUp).Row
lz2 = ShtX.Cells(Rows.Count, 4).End(xlUp).Row
....
....
....
If ü > 0 Then MsgBox Klient & " Stundenabrechnung" & vbLf _
                  & ü & " Zeilen Überlauf", vbInformation
ShtX.Protect  '"PW"
WbEx.Save 'Stundennachweis Save
'Schliessen wenn KEIN Überlauf!
If ü = 0 Then WbEx.Close False
Return

Korrekt?

VG Dschissl
Antworten Top
#32
Hallo

jetzt bin ich etwas verwirrt, ich dachte der Blattschutz sei in der Zieldatei?  Dann stimmt mein Code NICHT!

Ich habe mir das Makro noch mal angesehen, es gibt nur eine Stelle wo der Blattschutz uns stören kann!
Wenn die Zellen X2 bis Z 5 gesperrt sind, kann mein Makro das -Kopier Ergebnis- nicht hineinschreiben!
Weil diese Zellen für deine Mitarbeiter nicht relevant sind, kann uns keiner darin rummutschen!
Wenn du diese Zellen auf "Unlocked" setzt, brauchen wir den Blattschutz NICHT aufheben!

Diese Zellen beeinflussen ja nicht eure Arbeit, sie dienen nur zur Information ob alles geklappt hat.

mfg Gast 123
Antworten Top
#33
(20.05.2024, 18:59)Gast 123 schrieb: Hallo

jetzt bin ich etwas verwirrt, ich dachte der Blattschutz sei in der Zieldatei?  Dann stimmt mein Code NICHT!

Ich habe mir das Makro noch mal angesehen, es gibt nur eine Stelle wo der Blattschutz uns stören kann!
Wenn die Zellen X2 bis Z 5 gesperrt sind, kann mein Makro das -Kopier Ergebnis- nicht hineinschreiben!
Weil diese Zellen für deine Mitarbeiter nicht relevant sind, kann uns keiner darin rummutschen!
Wenn du diese Zellen auf "Unlocked" setzt, brauchen wir den Blattschutz NICHT aufheben!

Diese Zellen beeinflussen ja nicht eure Arbeit, sie dienen nur zur Information ob alles geklappt hat.

mfg Gast 123

Hallo Gast,

du hattest mal wieder Recht. Mit Setzen der Zellen X2 bis Z 5 (reicht nicht auch X2 bis Y5?) auf "Unlocked" klappt es wieder einwandfrei ohne Fehlermeldung  Thumps_up

Nun, mal wieder  Big Grin , noch eine Sache, die mir gerade einfällt, wenn ich das Ganze dann auf 30 Klienten, oder mehr, hochskaliere. 
Für den Fall, dass ich irgendeine Stelle im Code übersehe, welche dahingehend angepasst werden muss. 
Ich muss logischerweise neue evtl. abweichende Pfade für die Abrechnungen einfügen --> Const MyPfad
Ich muss weitere Variablen für die Abrechnungsdateien festlegen --> Const "Name des Klienten" = "ASD Nachname, Vorname_04_2024.xlsx"
Ich muss diese wiederum darunter einfügen -->

On Error Resume Next
Set WbEx = Workbooks(Name)
If Err > 0 Then Workbooks.Open Filename:=MyPfad & Name
Set WbEx = Workbooks(Name)
Klient = "Name wie er in der Datei zu finden ist":  GoSub Liste

Und ich muss doch den Range von X2 bis Y5 mit den neuen Namen erweitern bis, keine Ahnung Y20, je nachdem wie viele Klienten ich auswerten will, oder?

ThisWorkbook.Sheets("Woche 1").Range("X2:Y20") = Empty

Was noch? Hab ich etwas übersehen?

VG Dschissl
Antworten Top
#34
Hallo

du hast inzwischen VBA ganz gut verstanden. Aber bitte auf Spalte Z erweitern, weil das Makro bei Datei Öffnen Fehler in Spalte Z eine "Öffnen Error" Meldung ausgibt. Die kommt ja auch NUR bei Datei Öffnen Fehlern, sonst nicht! Den Bereich kannst du Problemlos nach unten beliebig erweitern. Da gibt es keine Grenzen.

Wenn du viele Mitarbeiter hast, ca. 20-30, wäre zu überlegen in den Spalten ab Z jeweils den Pfad und  Dateinamen in eine eigene Zelle abzulegen. Die Spalten um Pfad und Dateinamen erweitern. Dann könnte ich diese Daten aus den Zellen laden. Diese Zellen mit Pfad und Dateiname sollten aber bitte auf "Locked" gesetzt werden, damit sie nicht versehentlich gelöscht werden. Du kannst dir ja bitte selbst etwas ausdenken, wie es dir am besten passt, und als Beispieldatei hochladen. Dann schaue ich mal ob wir das Makro auf diese neue Aktion umschreiben können.

Ich denke das würde für dich die Sache noch mal vereinfachen. Sind aber erheblich Änderungen am bisherigen Makro.
Macht aber Spass die Sache zu optimieren.  Ist mein persönlicher Ehrgeiz.  Freut mich aber das es bisher so gut klappt!

mfg Gast 123

Nachtrag   wenn wir die Daten aus Zellen laden kann ich mit einer For Next Schleife arbeiten. Das vereinfacht bei so vilen Personen die Sache erheblich. Ich brauche aber genug Zeit um das zu realisieren. Sezte mich heute Abend mal aus Spass dran.
Antworten Top
#35
Hallo

ich habe dir diese Beispieldatei auf For Next umgestellt. Dazu benötige ich Dateiname + Pfad in den Spalten X+Y.
Dieses Makro ist für max. 200 Personen ausgelegt, ich denke das wird für euch reichen. (Kann noch weiter gehen)
Bitte den ganzen Code kopieren, da hat es doch einige Änderungen gegeben.


Die Zellen Z2:AB50 oder AB100 bitte auf Unlocked setzen.  Stört ja nicht wenn es mehr sind als benötigt wird.
Ich bin gespannt wie sich diese Variante in der Praxis bewährt.  Das Auflisting Programm ist gleich geblieben.
Nur ein paar Änderungen wo sich die Spalten verschoben haben.


mfg Gast 123

PS Weil mein PC nur einen kleinen Bildschrim hat habe ich die Schriftgrösse für X+Y stark verkleinert.


Angehängte Dateien
.xls   Testmappe_Test_Forum 3.xls (Größe: 288 KB / Downloads: 4)
Antworten Top
#36
(21.05.2024, 15:45)Gast 123 schrieb: Hallo

ich habe dir diese Beispieldatei auf For Next umgestellt. Dazu benötige ich Dateiname + Pfad in den Spalten X+Y.
Dieses Makro ist für max. 200 Personen ausgelegt, ich denke das wird für euch reichen. (Kann noch weiter gehen)
Bitte den ganzen Code kopieren, da hat es doch einige Änderungen gegeben.


Die Zellen Z2:AB50 oder AB100 bitte auf Unlocked setzen.  Stört ja nicht wenn es mehr sind als benötigt wird.
Ich bin gespannt wie sich diese Variante in der Praxis bewährt.  Das Auflisting Programm ist gleich geblieben.
Nur ein paar Änderungen wo sich die Spalten verschoben haben.


mfg Gast 123

PS Weil mein PC nur einen kleinen Bildschrim hat habe ich die Schriftgrösse für X+Y stark verkleinert.

Hallo Gast,

auch diese Variante klappt wunderbar. Ich danke dir  Shy  Thumps_up
Ich habe nur noch nicht richtig den Sinn der Änderung verstanden. Ist das jetzt vom Code her effizienter bzw. übersichtlicher wenn wir die Dateien und Pfade in die Zellen schreiben oder wo genau ist der Hintergrund? 

Und nochmal zum Verständnis der OpenError-Spalte. Diese wird nur beschrieben, wenn beim Ausführen des Makros eine Abrechnung geöffnet ist, richtig? Quasi als Reminder, dass man die Abrechnung bitte schließen soll?

VG Dschissl
Antworten Top
#37
Hallo

in AW 33 hast du ja selbst den Set Block eingefügt, der vorher im alten Code für JEDEN Mitarbeiter einzeln ausgefüllt werden musste.
Das wäre für dich bei 30 Mitarbeitern viel Schreibarbeit, der Code würde sehr lang werden. Fehlermöglichkeiten sind da eher gegeben.

Im neuen Code gibt es nur einen SET Block, da ändern sich dann die Mitarbeiter, Pfad- und Dateinamen über die Zellen Informationen!
Deine Zellen müssen natürlich stimmen, aber das ist nur einmal Schreibarbeit.  Sind die Zellen danach geschützt kann da nix passieren!
Es erspart dir viel Schreibarbeit, denn du müsstest ja sonst im Code für 30 Mitarbeiter 60 Const Anweisungen (Pfad, Datei) ausfüllen!

Open Error heisst, beim - Datei Öffnen - ist ein Fehler entstanden, weil der Pfad- oder Dateiname NICHT stimmt!
Diese Zelle wird also NUR im Fehlerfalle angezeigt, sonst bekommst du dort keine Meldung.

Wenn das Makro einen Überlauf feststellt, bekommst du den Überlauf angezeigt. Sonst bleiben diese Zellen LEER!
Im Normalfall wird jede Mitarbeiter Datei automatisch geschlossen, nur die - ÜBERLAUF Dateien - bleiben offen.
Das gibt dir die Möglichkeit dort weitere Zeilen einzufügen und das kopieren noch mal komplett zu wiederholen.

mfg Gast 123

PS  Viel Erfolg bei eurer Arbeit mit diesem Code.  Hat Spass gemacht ihn zu entwickeln.

PS    Bitte die Spalten W, X, Y für Mitarbeiter, Pfad- und Dateiname nach der Eingabe auf "Locked" für den Blattschutz setzen.
Antworten Top
#38
(22.05.2024, 17:05)Gast 123 schrieb: Hallo

in AW 33 hast du ja selbst den Set Block eingefügt, der vorher im alten Code für JEDEN Mitarbeiter einzeln ausgefüllt werden musste.
Das wäre für dich bei 30 Mitarbeitern viel Schreibarbeit, der Code würde sehr lang werden. Fehlermöglichkeiten sind da eher gegeben. -->Macht Sinn

Im neuen Code gibt es nur einen SET Block, da ändern sich dann die Mitarbeiter, Pfad- und Dateinamen über die Zellen Informationen!
Deine Zellen müssen natürlich stimmen, aber das ist nur einmal Schreibarbeit.  Sind die Zellen danach geschützt kann da nix passieren!
Es erspart dir viel Schreibarbeit, denn du müsstest ja sonst im Code für 30 Mitarbeiter 60 Const Anweisungen (Pfad, Datei) ausfüllen! -->Hast du Recht, leuchtet ein!

Open Error heisst, beim - Datei Öffnen - ist ein Fehler entstanden, weil der Pfad- oder Dateiname NICHT stimmt!
Diese Zelle wird also NUR im Fehlerfalle angezeigt, sonst bekommst du dort keine Meldung. -->OK geht klar, danke, verstanden!

Wenn das Makro einen Überlauf feststellt, bekommst du den Überlauf angezeigt. Sonst bleiben diese Zellen LEER!
Im Normalfall wird jede Mitarbeiter Datei automatisch geschlossen, nur die - ÜBERLAUF Dateien - bleiben offen. 
Das gibt dir die Möglichkeit dort weitere Zeilen einzufügen und das kopieren noch mal komplett zu wiederholen. Sehr gut, vielen Dank!

mfg Gast 123

PS  Viel Erfolg bei eurer Arbeit mit diesem Code.  Hat Spass gemacht ihn zu entwickeln.

PS  Bitte die Spalten W, X, Y für Mitarbeiter, Pfad- und Dateiname nach der Eingabe auf "Locked" für den Blattschutz setzen. -->Hab ich  Thumps_up

Hallo Gast,

mir ist leider noch etwas Essentielles eingefallen, was dich, so meine Hoffnung, nicht noch einmal allzu sehr beanspruchen wird. In den Abrechnungsdateien wird, neben dem Datum, der Zeit und dem entsprechenden Mitarbeiter, auch die Tätigkeit in der verbundenen Zelle "E,F und G" hinterlegt. Könntest du diese große verbundene Zelle einfach mit dem Inhalt der in den farblich markierten Zellen aus der Einsatzliste füllen? Quasi einfach den TextString "Alex" oder HPG Alex" oder was auch immer im Zusammenhang mit "Alex" bzw. Richard, Manu oder wem auch immer dort drinsteht übertragen? Wäre das ein großer Aufwand? Ich hoffe du verstehst was ich meine.

VG Dschissl
Antworten Top
#39
Hallo

nein, kein großes Problem dir auch da noch zu helfen, im Augenblick habe ich aber noch nicht verstanden wo ich die Tätigkeit finde??
Ist das der Zusatztext in Zeile 5-7, z.B. "HPG Mirko"??   Falls ja kannst du den unteren Codeteil in deiner Originaldatei tauschen.

Neu eingefügt habe ich diese beiden Codezeilen.  Der 1. Teil lädt den Namen mit Zusatzinfo, der zweite Befehl löscht den Klientennamen.
Damit bleibt die Zusatzinfo im Stundennachweis bestehen.  Liege ich da mit meiner Idee richtig??  Wenn nein erkläre es mir bitte noch mal. 
ShtX.Cells(z, 5) = .Cells(AC.Row + j, s)
ShtX.Range("E18:E" & z).Replace Klient, "", xlPart

Hinweis:
Mein erster Versuch klappte nicht, weil zu meiner Überraschung sich im Blatt Stundennachweis Alex auch ein Blatttschutz befindet.
Und zwar für die verbundenen Zellen E-G, und für die Spalte H.  Die Zellen sollten dann bitte auch auf "Unlocked" gesetzt werden.

Mal sehen ob meine Idee richtig liegt, sonst muss ich mir was anderes ausdenken.

mfg Gast 123

Code:
     'Alle Namen (Fett) in Testmappe auswerten
     For Each AC In .Range("A2:A" & lz1)
         If AC.Font.Bold = True And AC.Value <> "" Then
            'Alle Spalten mit Klientnamen übertragen
            For s = 2 To lsp Step 4
              For j = 5 To 7   'Zeile 5 bis 7 auswerten
                If InStr(.Cells(AC.Row + j, s), Klient) And _
                   .Cells(AC.Row + j, s + 1) <> Empty Then
                   If z < lz2 Then
                      ShtX.Cells(z, 8) = AC.Value
                      ShtX.Cells(z, 1) = .Cells(1, s)
                      ShtX.Cells(z, 2) = .Cells(AC.Row + j, s + 1)
                      ShtX.Cells(z, 3) = .Cells(AC.Row + j, s + 2)
                      '** 23.5.  MTA eingefügt (mit Info)
                      ShtX.Cells(z, 5) = .Cells(AC.Row + j, s)
                      z = z + 1
                   Else
                      ü = ü + 1   'Überlauf Zähler
                   End If
                End If
              Next j
            Next s
         End If
     Next AC
     '** der Klientname wird hier gelöscht!
     ShtX.Range("E18:E" & z).Replace Klient, "", xlPart

Du brauchst meinen Text aber nicht jedesmal zu wiederholen. Ich verstehe auch so deine Antwort.
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Dschissl
Antworten Top
#40
Hallo Gast,

du hast es, mal wieder, exakt so verstanden und umgesetzt, wie ich es meinte und mir vorstellte, eine Glanzleistung, danke dir, klappt auf Anhieb. Eigentlich hast du sogar, wahrscheinlich intuitiv, weiter gedacht  Biggrinsmiley
Ich meinte es ursprünglich so, dass der gesamte TextString, also auch der Klientenname mit in die verbundene Zelle übertragen wird, was ja aber quatsch ist, weil es sich ja um die Abrechnungsdatei eben des Klienten handelt. Wieso sollte da also nochmal sein Name mit drinstehen. Der Zusatztext allein z.B. HPG oder OKG, oder was auch immer, macht viel mehr Sinn. Super Arbeit. So ich hoffe das wars jetzt auch an dieser Stelle. Vielleicht war das ja auch für den einen oder anderen nützlich, der hier mitgelesen hat. Laut Forums-Icon und den Views ist das ja ein "heißes" Thema  Shy

VG Dschissl
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste