Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1196to1200
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ergebnis festhalten

Ergebnis festhalten
Claudia
Hallo zusammen,
im Unternehmen wird mit einer Excel-Vorlage gearbeitet. Die Mitarbeiter haben sich hierauf eine Verknüpfung gelegt - sie öffnen eine Kopie.
Der Mitarbeiter muss in eine bestimmte Zelle einen Datencode aus der Zwischenablage einfügen. Mittels der Funktion Private Sub Worksheet_SelectionChange(ByVal Target As Range) wird dieser Coce entsprechend aufbereitet und ein Ergebnis in C11 angezeigt.
Dieses Ergebnis soll in einem ausblendeten Reiter festgehalten werden. In Spalte A wird durchnummiert, in Spalte B wird das Ergebnis aus C11 angezeigt. A1 + B1 ergeben die Überschrift, so dass also ab Zeile 2 der Eintrag erfolgen soll-
A2 00001 B2 Inhalt aus C11
A3 00002 B3 Inhalt aus C11
A4 00003 B4 Inhalt aus C11
usw.
Wie kann man hier am besten vorgehen? Insbesondere ist es überhaupt möglich dieses Ergebnis in der Vorlage festzuhalten, wenn der Mitarbeiter in der Kopie arbeitet?
Mein VBA-Wissen ist Makrorecorder und nicht mehr. Habe also keine Ahnung!
Vielen Dank!
LG
Claudia

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Ergebnis festhalten
18.01.2011 16:04:32
Eugen
Hallo Claudia
ist das wirklich eine excel votlage ( *.xlt ) ?
wo soll der vesteckte Reiter (ich nehme mal an, Du meinst ein Tabellenblatt) denn sein ?
in der vorlage selbst oder in der geöffneten Kopie des Mitarbeiters ?
und wenn in der Vorlage, wie heisst das Tabellenblatt dann ?
Grüsse aus München
Eugen
AW: Ergebnis festhalten
18.01.2011 16:32:10
Claudia
Ja das ist eine Vorlage. Der Mitarbeiter ruft eine schreibgeschützte Kopie auf.
Die Auswertung muss also in der Vorlage erfolgen. Die Erfassung soll im Reiter Daten erfolgen.
AW: Ergebnis festhalten
18.01.2011 19:54:58
Nepumuk
Hallo,
1. Der Klon einer Vorlage hat aber keine Ahnung wo sich die Vorlage befindet. Und es gibt auch keine Möglichkeit sie aus dem Klon heraus zu finden. Du müsstest also in der Vorlage hinterlegen in welchem Verzeichnis sie sich befindet. Den der Klon erbt ja außer dem Namen alles von der Vorlage, damit auch den hinterlegten Pfad.
2. Wie willst du es regeln, wenn plötzlich mehrere User gleichzeitig Daten zurückschreiben wollen? Wer hat Vorrang? Wie werden Konflikte (Datenkollision wenn zwei User in die selbe Zelle schreiben) gelöst?
Gruß
Nepumuk
Anzeige
AW: Ergebnis festhalten
18.01.2011 20:03:11
Claudia
Hallo Nepumuk,
dass heisst - wenn ich dich richtig verstehe - das Projekt ist gestorben? :-(
Es besteht auch nicht die Möglichkeit dem Klon zu sagen, er soll die Daten beim beenden in eine Datei schreiben?
Viele Grüße
Claudia
AW: Ergebnis festhalten
19.01.2011 10:50:28
Nepumuk
Hallo,
doch natürlich, du musst in deinem Programm nur angeben was wohin geschrieben werden muss. Und du kannst natürlich auch in die Vorlage schreiben, aber das ganze Sicher zu machen ist ein gewisser Aufwand.
Gruß
Nepumuk
AW: Ergebnis festhalten
19.01.2011 08:18:52
Eugen
Hi Claudia und moin
ich versteh immer noch nicht, warum mit einer Vorlage gearbeitet wird.
Warum macht Ihr das nicht mit Arbeitsmappe freigeben ?
Genau dafür wurde dieses Feature in Excel implementiert !!
Wieso soll der selection_change event die Umformung des eingefügten Datencode besorgen und
nicht der Change event ?
Ich lade mal eine Datei hoch, die noch nicht freigegeben ist und in deren
change event meine (simple) Auswertung erfolgt. An der Stelle müsstest Du
noch Deine Umformung einbringen.
https://www.herber.de/bbs/user/73138.xls
gruss
Eugen
Anzeige
VBA-Experte benötigt
19.01.2011 19:41:25
Claudia
Hallo Eugen, Hallo die anderen,
wie ich in ein anderes Blatt schreibe habe ich schon ausprobiert. Datei freigegeben, ist keine Lösung, auch wenn ich die Funktion ansonsten gut finde.
Die Datei ist tatsächlich eine Vorlage. Meine Überlegung ist, dass in der Kopie, mit der der Mitarbeiter arbeitet, die Werte auch in einem ausgeblendeten Reiter weggesschrieben werden. Und nun meine Idee, wo ich Hilfe benötige.
Beim schliessen der Datei soll eine Auswertungadatei im Hintergrund geöffnet und die bisher angesammelten Daten werden dort reingeschrieben und die Auswertungsdatei wird anschliessend gespeichert und geschlossen.
Reiter in der Auswertungsdatei = Gesamt
Reiter in der Kopie = Einzel
Es sollen immer die Werte von A2 bis Z (letzte Zelle in Spalte A) in den Reiter Gesamt kopiert. Immer in die erste leere Zelle in Spalte A, so dass es fortgeschrieben wird.
Nun aber auch zwei weitere Herausfordungen.
Hat der Mitarbeiter keinen Zugriff auf die Datei "Auswertungsdatei" oder ist die Datei gerade geöffnet, so darf der Mitarbeiter davon nichts mitgebekommen. Keimm Abbruch, keine Fehlermeldung.
Ist das für einen VBa-Experten lösbar?
Liebe Grüße
Claudia
Anzeige
AW: VBA-Experte benötigt
20.01.2011 21:08:59
Claudia
Hallo Tino,
vielen Dank für Deine Hilfe. Ist nicht so ganz, was ich will oder ich habe es noch nicht durchblickt.
Wir haben folgenden Ablauf:
1. Alle Mitarbeiter rufen eine Excel-Vorlage auf und erzeugen somit eine normale Arbeitsmappe. In dieser Arbeitsmappe nehmen Sie alle immer im gleichen Bereich Eingaben vor (deshalb macht eine freigegebene Datei auch keinen Sinn, ausserdem sollen keine Eingaben in der Originaldatei gespeichert werden) und erhalten dann ein Ergebnis. Dieses Ergebnis geben sie dann in eine Hostanwendung ein. Dieser Vorgang wiederholt sich mehrfach. Jetzt ist mein Chef aber auf die Idee gekommen, dass man diese Ergebnisse auch mal auswerten könnte. Das soll im Hintergrund passieren und kein Mitarbeiter soll sich darüber Gedanken machen bzw. in seiner Arbeit gestört werden.
2. Die Überlegung war, dass das Ergebnis in einem ausgeblendeten Reiter dieser Datei zusätzlich festgehalten und wenn man so will fortgeschrieben wird. Zelle 2 = Ergebnis 1, Zelle Ergebnis 2 usw. werden. Das kriege ich selbst hin.
With Sheets("Einzel")
If Sheets("Eingabe").Range("C11") "" Then
.Range("A10000").End(xlUp).Offset(1, 0).Value = Sheets("Eingabe").Range("C11") 'Ergebnis
Else
.Range("A10000").End(xlUp).Offset(1, 0).Value = " "
End If
........
If Sheets("Eingabe").Range("C30") "" Then
.Range("Z10000").End(xlUp).Offset(1, 0).Value = Sheets("Eingabe").Range("A30") 'Ergebnis
Else
.Range("Z10000").End(xlUp).Offset(1, 0).Value = " "
End If
3. Beim schliessen der Mitarbeiterdatei müssen diese Daten (Bereich A2 bis Z letzte belegte Zelle) aus dem ausgeblendeten Reiter (Name = Einzel) geretttet werden, in dem man die Daten in die Datei "Auswertungsdatei" (Reiter = GEsamt) kopiert und in der Datei des Mitarbeiter löscht. Dann kann die Datei, mit der der Mitarbeiter gearbeitet hat, ohne Speicherung geschlossen werden. Will der Mitarbeiter die Datei speichern, so steht dem auch nichts im Wege (daher sollen die Daten halt beim Kopieren immer gelöscht werden, damit sie nicht eventuell doppelt gezählt werden).
Da sich die Daten nun in der Auswertungsdatei befinden, muss diese natürlich gespeichert werden.
4. Wichtig dabei ist, dass der Mitarbeiter davon überhaupt nichts mitbekommt. Das soll im Hintergrund passieren. Kann zum Beispiel das Kopieren nicht erfolgen, weil die Datei nicht vorhanden, geöffnet oder der Mitarbeiter keinen Zugriff auf diesen Ordner hat, dann soll einfach die Datei des Mitarbeiters lediglich geschlossen werden. Es soll kein Abbruch oder Fehlerhinweis kommen. In diesem Fall verzichtet man halt auf die Speicherung der Ergebnisse in der Auswertungsdatei
5. Die Auswertungsdatei von der wir sprechen (hier werden die Daten reinkopiert) kann eine normale Exceldatei sein.
Vermutlich bist Du nun erschlagen.
Vielen Dank und die Frage, ob sowas machbar ist?
Viele Grüße
Claudia
Anzeige
AW: VBA-Experte benötigt
21.01.2011 16:57:40
Tino
Hallo,
dann drehe einfach den Spieß um.
Mach aus der Auswertungsdatei.xlt eine Auswertungsdatei.xls und
aus der Einzel.xls eine Einzel.xlt.
In der Einzel.xlt müsstest Du irgendwo den Pfad zu der Auswertungsdatei.xls hinterlegen
und die Daten dorthin schreiben,so wie ich es im Beispiel in die Auswertungsdatei.xlt mache.
Also einfach andersherum und mit festem Pfad zu der Auswertungsdatei.
Gruß Tino
AW: VBA-Experte benötigt
22.01.2011 18:54:59
Claudia
Hallo Tino,
es klappt. :-)
Wie kann ich es nun hinbekommen, dass die Daten beim schliessen der Einzel-Datei in die Auswertungsdatei reingeschrieben werden?
Habe es mit dem Befehl Private Sub Workbook_BeforeClose(Cancel As Boolean) versucht. aber es passiert nix, vermutlich weil die Einzel-DAtei nicht gespeichert wird. Könnte man dies per Timer regeln, dass immer mal wieder gespeichert wird? Wichtig wäre, dass nach dem - erfolgreichen - Datentransfer die Daten in der Einzel-DAtei gelöscht.
Wenn das auch noch klappen würde, wäre das genial.
Vielen Dank!
Viele Grüße
Claudia
Anzeige
AW: VBA-Experte benötigt
22.01.2011 19:30:20
Tino
Hallo,
eigentlich sollte es so funktionieren.
Die Tabellen und den Pfad im Code evtl. noch anpassen.
Habe das alles jetzt ohne zu testen geschrieben, sollte es nicht funktionieren,
lade mal ein geziptes Beispiel mit der Einzel und der Auswertungsdatei hoch.
Da die Einzel eine Vorlage ist,
ist sie doch immer so wie sie erstellt wurde wenn diese aufgerufen wird?
Verstehe jetzt nicht was Du dann noch löschen musst.
Evtl. können wir die Daten beim speichern löschen, dann bauen diesen Code noch mit ein.
Kommt in DieseArbeitsmappe
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Einzel").UsedRange.ClearContents
End Sub
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call Save_Data_Ex 
End Sub 
 
 
kommt als Code in Modul1
Option Explicit 
 
Sub Save_Data_Ex() 
Dim oApp As Application 
Dim ArrayDataEx() 
Dim sPath$, lngLetzte As Long 
Dim booSave As Boolean 
 
'Pfad zur Auswertungsdatei.xls evtl. anpassen 
sPath$ = "C:\Ordner\Auswertungsdatei.xls" 
 
Set oApp = New Excel.Application 
     
With oApp 
    With .Workbooks.Open(Filename:=sPath, Editable:=True) 
        If Not .ReadOnly Then 
                'hier die Tabelle wo die Daten in der Einzel stehen 
                With ThisWorkbook.Sheets("Einzel") 
                     lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 
                     If lngLetzte > 1 Then 
                        ArrayDataEx = .Range("A2", .Cells(lngLetzte, 1)).Resize(, 26).Value2 
                     End If 
                End With 
                 
                'hier die Tabelle anpassen wo die Daten in der Auswertungsdatei.xls hin sollen 
                With .Sheets("Tabelle1") 
                    lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row 
                    If lngLetzte < .Rows.Count - Ubound(ArrayDataEx) Then 
                        .Cells(lngLetzte + 1, 1).Resize(Ubound(ArrayDataEx), Ubound(ArrayDataEx, 2)) = ArrayDataEx 
                        booSave = True 
                    End If 
                End With 
        End If 
        .Close booSave 
    End With 
    .Quit 
End With 
 
 
 
Set oApp = Nothing 
End Sub 
Gruß Tino
Anzeige
AW: VBA-Experte benötigt
23.01.2011 16:27:54
Claudia
Hallo Tino,
habe alles so wie Du gesagt hast, gemacht und es klappt. Vielen Dank!
Morgen auf der Arbeit werde ich dann mit mehreren Leuten probieren. Zwei Fragen habe ich noch:
- Was passiert, wenn ich die Auswertungsdatei geöffnet habe? Bekommt der Mitarbeiter dies mit (ggf. per Fehlerhinweis)?
- Kann man den Excel-Fehlerhinweis (Datei nicht gefunden....) noch abfangen?
Vielen Dank!
Liebe Grüße
Claudia
AW: VBA-Experte benötigt
23.01.2011 17:37:25
Tino
Hallo,
sollte eigentlich so schon funktionieren durch die abfrage
If Not .ReadOnly Then
Wird die Auswertungsdatei Schreibgeschützt geöffnet (ist in Verwendung),
wird diese sofort ohne speichern wieder geschlossen.
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige