477 Aufrufe
Gefragt in Tabellenkalkulation von robbi58 Mitglied (978 Punkte)

Einen schönen Tag ans Forum!

Ich habe eine Tabelle mit ca. 1400 Zeilen zu je 35 Spalten angelegt, die zu jeder Person bestimmte Informationen enthalten.

Nun möchte ich zu jeder Person ein Datenblatt erstellen, in dem diese Daten "übersichtlicher" dargestellt werden.

Die Daten liegen auf dem Tabellenblatt mit dem Namen "Datenbank".

Die Daten sollen auf dem Arbeitsblatt ("Datenblatt") übertragen und abgespeichert werden.

Ich möchte nun in das grüne Feld die laufende Nummer eingeben, damit die Daten in die Tabelle übertragen werden.

Ich kopiere dann das Datenblatt und speichere dieses unter der laufenden Nummer ab.

Mithilfe dieses Datenblattes kann ich dann alle Einträge (gefühlte 20.000 Daten) leichter kontrollieren und abspeichern. Dann kann ich dort auch entsprechende Änderungen vornehmen. Ideal wäre es natürlich, dass die Veränderungen dort automatisch auch in das Datenblatt übertragen werden (das würde mir viel Arbeit ersparen.

Viele Fragen auf einmal, aber ich wäre schon um die eine oder andere Lösung meines Vorhabens dankbar.

LG Robert

21 Antworten

0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)

Hallo M.O.,

ich habe alles neu gemacht und bin jetzt auf meinen Bedienungsfehler aufmerksam geworden.
Ich muss jedes Blatt extra bestätigen (kein großer Aufwand) und zwar mit ja.

Ich habe aber stets mit nein bestätigt und dann die Fehlermeldung bekommen:

Somit ist das Problem behoben. Aber danke für dein Bemühen.
Ich schicke dir ein virtuelles Bier als Dankeschön.

Robert

+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Robert,

füge in das Makro vor der Zeile mit der Pfadzuweisung den folgenden Code ein:

'Benachrichtigungen ausschalten
 Application.DisplayAlerts = False

und vor End Sub

 
 'Benachrichtigungen einschalten
 Application.DisplayAlerts = True
Damit sollte das Problem behoben sein.
Gruß
M.O.
P.S. Und vielen Dank für das virtuelle Bier laugh
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Hallo M.O.,

jetzt lassen sich alle Datenblätter mit einem Klick herunterladen und archivieren.
Danke nochmals.

Robert
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Bearbeitet von robbi58
Einen schönen Abend ans Forum!

Hallo M.O.!

Ich hätte noch eine Frage zu deinem Code, mit dessen Hilfe ich die Daten auslesen kann. Im Code ist der Name des Arbeitsblattes mit i, das entspricht der fortlaufenden Nummer, festgelegt.

Für mich wäre es einfacher, wenn ich das Arbeitsblatt nach den Gruppennamen (z.B. G_1, ST_105,…) dieser steht jeweils im Feld B5 des Datenblattes oder im Feld B2 der Datenbank (also in der Zelle rechts von i) abspeichern  könnte. Dann erspare ich mir das Umbenennen der 1400 Arbeitsblätter. Ich habe mit Codes aus dem Web herumexperimentiert, aber leider ohne Erfolg.

Ich sage jetzt schon danke für jede Hilfe.

Robert
0 Punkte
Beantwortet von

Guten Morgen,

sollte eigentlich einfach damit gehen, dass Du den Teil

  'Name für neues Arbeitsmappe festlegen
  strName = i
  'Name auf Länge von 4 Zeichen ggf. auffüllen
  Do Until Len(strName) = 4
    strName = "0" & strName
  Loop
mit
  'Name für neues Arbeitsmappe festlegen
  strName = Cells(5,2).Value
austauscht


Sicherheitshalber aber mal mit einer kürzeren Schleife als bis 1400 testen ;)
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Hallo =LET!

Danke für deine Hilfe und damit der Lösung meines Problems.
Die Abänderung des Codes hat einwandfrei funktioniert.

LG Robert
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Bearbeitet von robbi58
Schönen Abend ins Forum!
Ich möchte nach einer Korrektur der Daten nur einen von mir festgelegten Datensatz auslesen. Die Formel basiert darauf, dass ich immer von der Zeile 1 bis zum Beispiel zur Zeile 240 die Daten auslese.
Nun möchte ich aber z. B. nur den Datensatz von Zeile 1240 bis 1320 auslesen. Ich habe es mit der Äbänderung von "i" probiert, leider hat es nicht zum gewünschten Ergebnis geführt.
Welchen Teil des Codes müsste ich nun abändern, damit ich von mir nicht benötigte Datensätze von vornherein ausschließen kann. Ich bin um jede Hilfe dankbar.
Danke und noch ein angenehmes Wochenende an alle.

Robert

PS: Einfacher ausgedrückt:

For i = 1 To 1020

möchte ich z. B. nur 800 - 1020 auslesen
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Robert,

mit dem i werden ja die einzelnen Blätter in der Mappe angesprochen. In dem geposteten Code werden die einzelnen Blätter jeweils als Ganzes als einzelne Arbeitsmappe gespeichert.

Verstehe ich das richtig, dass du von den einzelnen Blättern immer nur die Zeilen 800 - 1020 in neue Arbeitsmappen kopieren willst?

Und poste doch mal den aktuellen Code, mit all den Ergänzungen. Dann ist es für die Helfer einfacher.

Viele Grüße

M.O.
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)

Hallo M.O.!
Danke für deine Antwort.
Zunächst mal der aktuelle Code, der wunderbar funktioniert!

Sub blaetter_speichern()

Dim i As Long

Dim strPfad As String

Dim strName As String

Application.DisplayAlerts = False

strPfad = "Test\"

If Right(strPfad, 1) <> "\" Then strPfad = strPfad & "\"

For i = 1 To 1432           

  With ThisWorkbook.Worksheets("Datenblatt")

    .Range("A2") = i         

    .Calculate               

    .Copy                    

  End With

   strName = Cells(5, 2).Value

  With ActiveWorkbook

    .SaveAs Filename:=strPfad & strName  

    .Close                                '

  End With

Next i

Application.DisplayAlerts = True

End Sub

Ein kompletter Durchlauf dauert ca. 30 Minuten. Wenn ich nun einen z.B. von Zeile 800 bis 850 eine Änderung vorgenommen habe, möchte ich nur diese Blätter auslesen lassen. Dies gilt dann, wenn neue Personen dazukommen und ich deswegen neue Zeilen anlegegt habe. Dann stimmen die Zeilennummern und die Personen nicht mehr überein.

For i = 1 To 240  , das funktioniert ja problemlos (ich brauche keinen ganzen Durchlauf).

Das Problem für mich sind nur die hohen Zeilennummern, da ich die vorherigen Nummern (noch) nicht ausschließen kann.

Robert

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Robert,

eigentlich sollte es egal sein, ob es

For i = 1 To 240

oder

For i = 800 To 850

heißt.

Du schreibst:

Dann stimmen die Zeilennummern und die Personen nicht mehr überein.

Hängt das mit den Formeln in deinem Datenblatt zusammen? Was funktioniert denn nicht, wenn du den Code nur für hohe Zahlen ausführen lässt?

Gruß

M.O.

...