Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

VBA Daten verschieben und löschen


Betrifft: VBA Daten verschieben und löschen von: Florian
Geschrieben am: 10.09.2019 10:57:55

Guten Morgen zusammen,
ich versuche nun schon seit 60 Minuten hier einen Beitrag zu verfassen, weil ich nicht mehr weiter weiß mit meiner Excel Datei. Ich hoffe ihr könnt mir dabei helfen, denn sonst muss ich nach Alternativen suchen.
Ich habe eine Excel Datei erstellt die zur Überwachung von Vorhaben benötigt wird. Sie ist folgendermaßen aufgebaut:
-Eingabe erfolgt über ein Userform auf Tab1
-Die Daten werden zum Teil in Tab2 (Inhaltsverzeichnis) übernommen und in Tab4 (Bearbeitung laufende Vorhaben), hier findet die eigentliche Bearbeitung statt.
Wenn nun die Zelle DONE (H10, als Beispiel für den ersten Bereich von A7-M12) mit einem "x" gekennzeichnet ist, dann soll der Datensatz aus dem Bereich in das Tabellenblatt 5 verschoben werden und aus Tabellenblatt 4 gelöscht werden. Ebenfalls sollen die Daten zu diesem Vorhaben aus Tabelle 2 (Inhaltsverzeichnis) gelöscht werden. Die Eintragung beider Tabellen ist über VBA verknüpft.

Da es sich hier um eine datensammlung handeln wird, ist es notwendig das die Daten untereinander aufgeführt werden. Keine Überschreibung bitte.

Ich hoffe innigst das ihr mir helfen könnt, im Anhang findet ihr ein paar Bilder.

Tabellenblatt 2 (Inhaltsverzeichnis für laufende Vorhaben)


Tabellenblatt 4 (laufende Vorhaben)


Tabellenblatt 5 (Laufende Vorhaben) DONE


Vielen Dank im Vorraus!!

Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712207.html
Geschrieben am: 10.09.2019 11:10:54

Hallo Florian,

könntest du bitte eine Mustermappe hochladen? Keiner ist gewillt Tabellen von einem Bild abzutippen.

Gruß
Nepumuk

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712229.html
Geschrieben am: 10.09.2019 12:06:15

Entschuldige, das kann ich voll und ganz nachvollziehen. Habe in der Zwischenzeit eine Muster Tabelle erstellt und hoffe das euch diese weiterhelfen kann.

https://www.herber.de/bbs/user/131949.xls

LG Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712236.html
Geschrieben am: 10.09.2019 12:19:05

Hallo Florian,

ein Datensatz in IM Published Orders hat 6 Zeilen. Die Liste in Published Order List nur eine. Welche Daten sollen übertragen werden?

Gruß
Nepumuk

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712240.html
Geschrieben am: 10.09.2019 12:30:55

Von IM Published Orders soll die erste Zeile nahezu komplett übernommen werden. Also B7, C7, D7 und eine priorisierte Auswahl von H7:H10 (Status). Die Reihenfolge nach Priorität ist von oben (niedrig) nach unten (hoch) angeordnet.

Nochmal so, um dir direkt zu antworten

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712275.html
Geschrieben am: 10.09.2019 14:50:06

Hallo Florian,

1. Teil: In das Modul "IM Purpose". Rechtsklick auf den Tabellenreiter - Code anzeigen. In das Modul folgenden Code einfügen:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim objRange As Range, objCell As Range
    Dim objworksheet As Worksheet
    Dim lngRow As Long, lngEmtyRow As Long
    Dim strTemp As String
    Set objRange = Intersect(Target, Columns(8))
    If Not objRange Is Nothing Then
        Set objworksheet = Worksheets("Published Order List")
        With objworksheet
            lngEmtyRow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        End With
        For Each objCell In objRange
            If (objCell.Row - 4) Mod 6 = 0 Then
                objworksheet.Cells(lngEmtyRow, 1).Value = _
                    Join(Application.Transpose(objCell.Offset(-3, -6).Resize(6, 1).Value2), " ")
                objworksheet.Cells(lngEmtyRow, 2).Value = _
                    Join(Application.Transpose(objCell.Offset(-3, -5).Resize(6, 1).Value2), " ")
                objworksheet.Cells(lngEmtyRow, 3).Value = _
                    Join(Application.Transpose(objCell.Offset(-3, -4).Resize(6, 1).Value2), " ")
                For lngRow = objCell.Row - 3 To objCell.Row - 3 + 5
                    If Not IsEmpty(Cells(lngRow, 8).Value) Then _
                        objworksheet.Cells(lngEmtyRow, 4).Value = Cells(lngRow, 7).Value2
                Next
                Application.EnableEvents = False
                Call Range(objCell.Offset(-3, -7).Address & ":" & objCell.Offset(2, -2).Address & "," & _
                    objCell.Offset(-3, 0).Address & ":" & objCell.Offset(2, 5).Address).ClearContents
                Application.EnableEvents = True
            End If
        Next
    End If
End Sub

Der Code enthält das Übertragen nach "Published Order List" und das löschen des Datensatzes in "IM Purpose". Jetzt musst du mir nur noch verraten wie ich den Datensatz in "List of staffing procedures" finde. Also, was ist der eindeutige Bezug (Zeilennummer / Start Date ….)?

Gruß
Nepumuk
  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712284.html
Geschrieben am: 10.09.2019 15:40:18

Boah, schonmal vielen Dank für deine Arbeit. Bin begeistert über den Code, allerdings funktioniert er bei mir nicht. Die Daten werden von IM Purpose nicht in IM Published Orders übernommen und auch nicht gelöscht. Warum weiß ich leider auch nicht.
Außerdem soll die Datenübertragung von IM Purpose nach IM Published Orders erst stattfinden wenn in das Feld DONE! (H10) ein "x" eingetragen wurde. Außerdem ist es wichtig das diese Funktionen für jeden Zellbereich der umrahmt ist, festgelegt ist.

Der Bezug zur List of staffing procedures ist direkt im UserForm hinterlegt, wie auf dem Bild zu sehen.


  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712287.html
Geschrieben am: 10.09.2019 15:59:00

Hallo Florian,

trag mal in Zelle H10 ein x ein:

https://www.herber.de/bbs/user/131957.xlsm

Gruß
Nepumuk

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712290.html
Geschrieben am: 10.09.2019 16:04:52

Ist das CRAAAAZY, ja genau so stelle ich mir das vor. Funktioniert in meiner Originaldatei nicht. Werde nochmal ganz genau durchgehen. Danke dafür!

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712292.html
Geschrieben am: 10.09.2019 16:07:21

Hallo Florian,

ist immer noch die Frage offen wie ich den Datensatz in "List of staffing procedures" finde. Also, was ist der eindeutige Bezug (Zeilennummer / Start Date ….)?

Gruß
Nepumuk

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712296.html
Geschrieben am: 10.09.2019 16:18:12

Der eindeutige Bezug wäre das Startdate, aber ich denke wenn ich einfach in den Zellen von der List of staffing procedures einen direkten Bezug zu IM Purpose herstelle dann sollte es doch auch funktionieren, oder?

Ich habe noch eine weitere Frage, wo ich gerade mit einem Profi zu tun habe. Ich habe in meinem Userform in jede TextBox einen Text zur Beschreibung drin, was dort eingetragen werden soll. Allerdings muss man diesen vor Eintrag löschen. Geht das auch anders, so das es sich selbstständig ausblendet?

Außerdem würde ich gern (wenn möglich) die Textzeichen zur Eingabe beschränken auf 58 Zeichen, damit die Zeilenbreite im Tabellenblatt auch ausreicht. Ist das irgendwie möglich? Evtl sogar mit Fehlermeldung wenn Zuviel Text eingegeben wird? Das wäre mir auch beim Eintrag des Datums wichtig, das ein bestimmtes Format eingegeben werden muss

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712302.html
Geschrieben am: 10.09.2019 16:34:09

Hallo Florian,

das Datum würde ich so prüfen:

Private Sub CommandButton1_Click()
    If Not IsDate(TextBox1.Text) Then
        Call MsgBox("Bitte ein gültiges Datum im Format dd.mm.jjjj eingeben.", vbExclamation, "Hinweis")
        With TextBox1
            .SelStart = 0
            .SelLength = .TextLength
        End With
    Else
        'Daten eintragen
    End If
End Sub


Die Länge eines Textes in einer TextBox kannst du über die Eigenschaft MaxLength der TextBox einstellen. Da kommt zwar keine Fehlermeldung beim Überschreiten der Länge, aber es lässt sich einfach kein längerer Text eintragen.

Gruß
Nepumuk
P.S.: Den Rest vom Programm mache ich morgen. Achso, in welcher 6 Zeilen pro Projekt in der Tabelle "IM Purpose" ist das korrelierende Datum zur Tabelle "List of staffing procedures"?
  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712315.html
Geschrieben am: 10.09.2019 17:12:08

Super, Dankeschön!! Habe jetzt auch die Funktion des Verschiebens hinbekommen, allerdings werden die Daten aus IM Purpose direkt in die Published Order List kopiert. Die müssten zusätzlich auch in IM Published Order kopiert werden. Ist das noch nachträglich möglich in dem Code zu ergänzen? Hier würde ich dann gerne das die Zellinhalte bei Überschreiten des Datums aus Accomplishment im Vergleich zu heute, gelöscht werden.

Das korrelierende Datum ist das eingetragene Startdate in Spalte A

Vielen Dank nochmal, dann bis morgen!

Gruß
Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712452.html
Geschrieben am: 11.09.2019 13:10:45

Hallo Florian,

in "IM Published Order" befinden sich Formeln die sich auf "IM Purpose" beziehen. Sollen die Formeln überschrieben werden?

Kannst du mal eine Mustermappe hochladen aus der das Ganze hervorgeht?

Gruß
Nepumuk

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712479.html
Geschrieben am: 11.09.2019 15:15:16

Hi Nepumuk,

die Formeln die in IM Published Orders vorhanden sind können überschrieben werden. Diese spiegeln letztlich genau die Funktion wieder.
So wie du es festgelegt hast, das die Daten von IM Purpose in die Published Order List übertragen werden bei "x" im Feld DONE!, so die Daten auch in IM Published Order übertragen werden. Und aus IM Published Order sollen sie gelöscht werden wenn Accomplishment, also ein Datum abgeschlossen ist (in der Vergangenheit liegt).

Ich wüsste nicht wie ich das in Form einer Mustermappe darstellen sollte, hab ja bereits eine Mustermappe hochgeladen.

Gruß
Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712790.html
Geschrieben am: 13.09.2019 08:10:54

Moin, ich benötige noch immer deine Hilfe. Komme gerade nicht mehr weiter.
Lg Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712829.html
Geschrieben am: 13.09.2019 09:57:03

Hallo Florian,

liegt das Accomplishment-Datum immer in der ersten der sechs Projektzeilen also D7, D13, D19 …

Ich bin noch etwas verwirrt. Sollen die Daten aus "IM Purpose" erst übertragen und dann wieder gelöscht werden wenn das Datum in der Vergangenheit liegt? Oder sollen beim Übertragen der Daten auch alle Datensätze in der Vergangenheit gelöscht werden?

Gruß
Nepumuk
P.S.: Hatte gestern keine Muse um an deinem Programm zu arbeiten. Aber ich bin dafür bekannt bis zum endgültigen Erfolg dran zu bleiben.

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1713247.html
Geschrieben am: 16.09.2019 08:54:36

Moin, zunächst mal eine Antwort auf deine Frage. Die ist mir etwas durch gesickert am Wochenende. Also die Accomplishment Daten sind immer in der ersten der sechs spalten wie du angegeben hast.

Die Daten werden bei DONE in IM Published orders verschoben und wenn die Daten durchgeführt wurden, also das Datum in der Vergangenheit liegt dann sollen die Daten gelöscht werden. Das Thema ist ja in der published order list hinterlegt

Hoffe könnte dir weiterhelfen.

Lg Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1713186.html
Geschrieben am: 15.09.2019 13:28:02

Hallo Florian,

ich hab mal ein bisschen weiter gemacht. Teste mal:

In die Tabelle "IM Purpose"

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim objRange As Range, objCell As Range
    Dim objworksheet As Worksheet
    Dim lngRow As Long, lngEmtyRow As Long
    Dim strTemp As String
    Set objRange = Intersect(Target, Columns(8))
    If Not objRange Is Nothing Then
        Set objworksheet = Worksheets("Published Order List")
        With objworksheet
            lngEmtyRow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        End With
        For Each objCell In objRange
            If (objCell.Row - 4) Mod 6 = 0 Then
                If Not IsEmpty(objCell.Value) Then
                    objworksheet.Cells(lngEmtyRow, 1).Value = _
                        Trim$(Join(Application.Transpose(objCell.Offset(-3, -6).Resize(6, 1).Value2), " "))
                    objworksheet.Cells(lngEmtyRow, 2).Value = _
                        Trim$(Join(Application.Transpose(objCell.Offset(-3, -5).Resize(6, 1).Value2), " "))
                    objworksheet.Cells(lngEmtyRow, 3).Value = _
                        Trim$(Join(Application.Transpose(objCell.Offset(-3, -4).Resize(6, 1).Value2), " "))
                    For lngRow = objCell.Row - 3 To objCell.Row - 3 + 5
                        If Not IsEmpty(Cells(lngRow, 8).Value) Then _
                            objworksheet.Cells(lngEmtyRow, 4).Value = Cells(lngRow, 7).Value2
                    Next
                    Set objworksheet = Worksheets("IM Published Orders")
                    With objworksheet
                        For lngRow = 7 To .Cells(.Rows.Count, 1).End(xlUp).Row Step 6
                            If .Cells(lngRow, 1).Value = vbNullString Then
                                lngEmtyRow = lngRow
                                Exit For
                            End If
                        Next
                    End With
                    Call Range(objCell.Offset(-3, -7).Address & ":" & objCell.Offset(2, 5).Address).Copy
                    Call objworksheet.Cells(lngEmtyRow, 1).PasteSpecial(Paste:=xlPasteValuesAndNumberFormats)
                    Application.EnableEvents = False
                    Call Range(objCell.Offset(-3, -7).Address & ":" & objCell.Offset(2, -2).Address & "," & _
                        objCell.Offset(-3, 0).Address & ":" & objCell.Offset(2, 5).Address).ClearContents
                    Application.EnableEvents = True
                End If
            End If
        Next
    End If
End Sub


In die Tabelle "IM Published Orders":

Option Explicit

Private Sub Worksheet_Activate()
    Dim lngRow As Long
    For lngRow = 7 To Cells(Rows.Count, 4).End(xlUp).Row Step 6
        If IsDate(Cells(lngRow, 4).Value) Then
            If Cells(lngRow, 4).Value < Date Then
                Call Cells(lngRow, 1).Resize(6, 6).ClearContents
                Call Cells(lngRow, 8).Resize(6, 6).ClearContents
            End If
        End If
    Next
End Sub

Damit werden die "alten" Projekte gelöscht sobald du die Tabelle aktivierst.

Gruß
Nepumuk
  

Betrifft: AW: VBA Daten verschieben und löschen von: 1713211.html
Geschrieben am: 15.09.2019 16:13:23

Schon mal vielen Dank, werde es morgen direkt mal testen.

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1713265.html
Geschrieben am: 16.09.2019 10:32:57

Moin nochmal,
Habe jetzt dein Programm getestet. Es funktioniert bis auf ein paar Einschränkungen :

1. Die Daten werden bei IM Published orders in Zeile 9 kopiert wenn in IM Purpose DONE mit x befüllt wurde. Allerdings muss die Auflistung in Zeile 7 beginnen.

2. Wenn das Datum überschritten ist tut sich leider nichts. Also die Daten werden dann nicht gelöscht. Dies betrifft immer nur den jeweiligen Datensatz. Ist dafür ein bestimmtes Format Datum zu berücksichtigen?

3. Wenn ich über mein userform Eintragungen mache, die dann in IM Purpose übernommen werden, werden die Datensätze überschrieben, wenn kein Start date eingegeben ist. Wie kann ich das ändern? Der Bezug soll das Thema (Purpose) werden.

4. Des Weiteren möchte ich gern das immer eine leere freie Zeile zur Eintragung gesucht wird bei IMPurpose, IM Published orders. Zb hab ich eine Eintragung bei IM Purpose gemacht und mit DONE befüllt. Sie wird in IM Published orders verschoben immer unter die bereits eingetragenen Datensätze. Ich möchte aber das auch eine Eintragung in ein darüber liegendes Feld getätigt, sofern es frei ist. Ist das realisierbar oder utopisch?

5. Die Eintragungen aus List of staffing procedures sollen ebenfalls gelöscht werden wenn in IM Purpose DONE befüllt wurde

Das sind die letzten Punkte die noch offen sind bis zum Abschluss! Bin dir jetzt schon sehr dankbar!

Lg Florian

  

Betrifft: AW: VBA Daten verschieben und löschen von: 1712239.html
Geschrieben am: 10.09.2019 12:28:36

Von IM Published Orders soll die erste Zeile nahezu komplett übernommen werden. Also B7, C7, D7 und eine priorisierte Auswahl von H7:H10 (Status). Die Reihenfolge nach Priorität ist von oben (niedrig) nach unten (hoch) angeordnet

Beiträge aus dem Excel-Forum zum Thema "VBA Daten verschieben und löschen"