zeilen in denen ein bestimmter Name vorkommt in eine bestimmte Exceldatei kopieren
Hallo an Alle,
ich habe eine Excel Datei in der Datensätze für bestimmte User sind.
Meier -->
Huber -->
Hinz ->
Huber-->
Jeder User darf nur seine Zeilen sehen, und dazu sollen diese in eine Exceldatei kopiert werden auf die dann nur der User zugriff hat.
Nach möglichkeit sollte das automatisch gehen.
So wie bei Verknüpfungen in Zellen in anderen Dokumenten
Der User öffnet seine Datei und bekommt immer die aktuellen Daten.
Leider ist die Anzahl der Zeilen mit Namen nicht immer gleich.
So das, wie ich denke eine Art "If Huber dann copy to "Huber.xls"
Leider habe ich so gar keine Erfahrung mit Programmierung,
und diese Ewige kopiererei is sowas von aufwendig u. dauert Stunden.
Ich habe schon tolle Lösungen hier gesehen, für Ähnlich Problem, aber ich schaff es leider nicht die für meinen Bedarf abzuändern.
Wäre toll wenn hier jemand eine Lösung weis.
Ich sag schon mal, vielen Dank und viele Grüße
Julia
In dieser Datei sind z.B. 3000 Zeilen,
für 30 User. Nun sollen immer automatsch die für den User bestimmten
Zeilen in ein neues Excel-Dok eportiert und für den User breitgestellt werden.
Ich hab schon mit Excel-Abrage probiert, aber da kann der User ja dann trozdem
die ganz Tabelle und nicht nur seine Daten sehen.
Momentan kopiere ich alle sehr sehr mühsam von Hand, was super aufwendig ist.
Hat hier jemand eine Idee wie das zu lösen ist, ich finde es
klingt eigentlich ganz einfach, aber leider kenne ich mit der Programmererei nicht
besonders gut aus.
Vielen Dank schon mal
Grüße Anrie
Antwort schreiben
Antwort 1 von lorf55 vom 25.06.2020, 21:02 Options
Hallo Julia und Anrie,
ich habe mal ein Makro gebastelt, dass das macht, was ihr wollt (hoffe ich). Da ich nicht weiß,von wo bis wo ihr genau kopieren wollt, habe ich in der 3. Zeile des makros
Range("A1", "B8").Select
stehen. Da müsst ihr A1 und B8 an eure Tabelle anpassen. Das makro muss in ein Modul (Alt+F11, Einfügen - Modul).
In Blatt1 meiner testdatei steht
Name Wert
Franz 67
Huber 34
Huber 56
Karl 45
Meier 45
Meier 56
Sub Makro1()
'hier den Kopierbereich festlegen
Range("A1", "B8").Select
'>>>> ab hier gibts nichts mehr zu ändern
Dim R As Range
Dim name As String
Dim datei As String
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Set R = Application.Selection
For i = R.Row + 1 To R.Rows.Count
name = R.Cells(i, R.Column)
'Schauen, ob der name nochmal vorkommt, um mehrere Zeilen auf einmal zu kopieren
For j = i + 1 To R.Rows.Count
If name <> R.Cells(j, R.Column) Then
j = j - 1
Exit For
End If
Next j
'Der Kopierbereich von Zeile i bis zeile j innerhalb der selektierten Spalten
Range(R.Cells(i, R.Column), R.Cells(j, R.Columns(R.Columns.Count).Column)).Select
Selection.Copy
'Startzeile für das nächste Kopieren setzen
i = j
'Ist die Exceldatei des MA vorhanden
datei = Dir(name & ".XLS")
' Wenn das Feld name leer ist, passiert nichts
If name <> "" Then
If datei = "" Then
' In neue exceldatei kopieren bei neuem MA-namen
Set NewBook = Workbooks.Add
Worksheets("Tabelle1").Activate
ActiveSheet.Paste Destination:=Cells(1, 1)
NewBook.SaveAs Filename:=name & ".XLS"
Workbooks(name & ".XLS").Close
Else
' In vorhandene Exceldatei kopieren
Workbooks.Open name & ".XLS"
Worksheets("Tabelle1").Activate
letzteZeile = Range("A65536").End(xlUp).Row
ActiveSheet.Paste Destination:=Cells(letzteZeile + 1, 1)
Workbooks(name & ".XLS").Close SaveChanges:=True
End If
End If
Next i
' das wars vom Mars
End Sub
Gruß
lorf
PS: Mir fällt gerade kein brauchbarer Uploaddienst ein, da muss denn so gehen.
Antwort 2 von nighty vom 26.06.2020, 21:18 Options
hi all
selectionen und activierungen sind ueberfluessig,bitte direkte zuweisungen
statt einer normalen schleife wuerde sich eine dynamische schleife mit der findfunction anbieten,die dann nur soviel durchlaeufe hat wie es funde gibt,dadurch waere eine sortierung auch nicht unbedingt notwendig
gruss nighty
Antwort 3 von lorf55 vom 27.06.2020, 11:04 Options
Hallo nighty,
Zitat:
selectionen und activierungen sind ueberfluessig,bitte direkte zuweisungen
Ja, mag sein. Gibts hier eigentlich einen VBA-Style-Guide, wo man das mal nachschlagen kann?
Zitat:
statt einer normalen schleife wuerde sich eine dynamische schleife mit der findfunction anbieten,die dann nur soviel durchlaeufe hat wie es funde gibt,dadurch waere eine sortierung auch nicht unbedingt notwendig
Das bietet sich sicherlich an. Vielleicht ist es sogar etwas schneller (wobei die 5 Sekunden mehr oder weniger auch keinen interessieren).
Aber sag mal, wenn du es so genau weißt, denn hätte es sich doch schon längst mal angeboten, mal schnell was aus dem Ärmel zu schütteln, die Frage ist ja nun mehr als 3 Wochen alt, oder?. Oder hätte sie besser unbeantwortet bleiben sollen?
Gruß
lorf
Antwort 4 von nighty vom 27.06.2020, 19:48 Options
hi all
warum antworten wenn du hoch motiviert bist,so geb ich dir ein paar tips,und der rest ist fuer die datenbank.du wirst gar nicht glauben wieviele user darauf zugreifen,daher spielt es generell keine rolle wie alt eine frage ist
dir noch viel spass beim tuefteln
gruss nighty
Antwort 5 von nighty vom 28.06.2020, 14:56 Options
hi lorf :-)
dann noch dies fuer dich
gruss nighty
wenn du die findfunction mit einer set variablen definierst kommst du bei fund ueber diese variable an einige daten ,wie z.b.
variable.row wie auch variable.column
diese kannst du nun der variablen der for next schleife uebergeben und hast somit eine dynamische schleife
bei deinen grundkenntnissen sollte es nun kein problem mehr sein selbiges umzusetzen
schneller waere dann nur noch ein array oder dictionary object
wobei das array deine nachste uebungsaufgabe sein sollte und in der excelhilfe genuegend beschrieben ist