VBA - Übertragen von Zeilen basierend auf dem Zellenwert von einer Tabelle zu anderen
#1
Guten Morgen
 
In VBA soll...
eine ganze Zeile von Blatt 1 zu Blatt 2 springen, basierend auf dem Wert von Zelle C, der entweder die Nummer Eins (1) oder die Nummer Null (0) sein kann.
Wenn ich zum Beispiel die Zahl 0 in Zelle C3 eingebe, werden alle Daten in Zeile 3 automatisch aus Blatt 1 gelöscht und in Blatt 2 eingefügt.
In ähnlicher Weise wird durch Eingabe von 1 anstelle von 0 in Zelle C3 von Blatt 2 die Operation in die entgegengesetzte Richtung ausgeführt.
All dies unter Beibehaltung der bedingten Formatierung und Berechnungsformeln für jede Zelle.


Wie kann ich so etwas in VBA bewerkstelligen?
Bitte zu bedenken das ich kein VBA Profi bin, eher ein Schnippsler (Copy/paste syndrom).
 
 
Jede Hilfe ist Willkommen
 
  78
   Niko
Antworten Top
#2
Hi,

das kann man machen, sollte man aber nicht tun!

Erstens:
Wozu Daten auf zwei Blätter verteilen? Das erschwert nur jegliche Auswertung.
Üblicherweise ist die Antwort darauf: Weil ich es übersichtlicher finde, wenn "erledigte Aufgaben", "ausgelieferte Teile", "jede Abteilung"... ihr eigenes Blatt hat.
Die Gegenantwort: Dafür gibt des den Autofilter oder ein getrenntes Auswerteblatt, das die Daten per Formel aus dem Ursprungsblatt holt.

Zweitens:
Beim Kopieren / Verschieben können ganz leicht Fehler passieren.

Drittens:
Zitat:All dies unter Beibehaltung der bedingten Formatierung
Das führt ganz sicher dazu, dass die Datei ganz schnell extrem langsam wird.

Also lautet die Lösung:
Lass das mit den getrennten Blättern und verwende den Autofilter auf deine 0/1-Spalte und du bist glücklich.
Und wenn jetzt als Gegenargument kommt: Ja, aber das soll von Mitarbeitern benutzt werden können, die keine Ahnung von Excel haben. Dann kann ich nur sagen: entweder bringst du denen bei, wie der Autofilter funktioniert (ist wahrlich kein Hexenwerk!) oder due machst zwei benutzerdefinierte Ansichten mit den beiden Einstellungen des Autofilters und legst deren Aufruf auf jeweils einen eigenen Button. Das kann auch der Unbedarfte mit Hilfe des Makrorekorders erledigen.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
Danke für dein Hinweis und Lösungsansatz, doch brauche es letztendlich in VBA für mein vorhaben.

Ein VBA code würde mir sehr weiterhelfen 17
Antworten Top
#4
Hi,

halte mich ruhig für arrogant oder auch einen Deppen, aber so lange du mir keinen vernünftigen Grund nennst, wieso du das machen musst und daher einen VBA-Code benötigst, wirst du von mir nichts weiter hören.

Nur so viel: Du benötigst so etwas wie
Code:
Worksheet(xxx).Rows(yy).Copy Worksheet(zz).range(Rowe.count, 1).End(xlUp).EntireRow
und wenn es automatisch passieren soll, dann verwende das Worksheet_Change-Event.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
Halte dich, weder noch ein anderen für arrogant oder sogar noch für ein Deppen.
Du hast bestimmt deine Gründe dich so zu positionieren, doch warum und wieso ich es so brauch möchte ich nicht benennen,
aus Gründen die nicht mit dir oder irgendeinen anderen hier im Forum zu tun hat.
 
Wie auch immer vielen Dank das du dir Zeit genommen hast für mein Anliegen, schätze ich sehr.
Muss mir wohl ein anderen Weg suchen um es so zu bewerkstelligen wie es möchte.
 
Danke nochmals

78
  Niko
Antworten Top
#6
Hallo Niko,

im VBA-Modul von Blatt 1:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target.Cells(1)
    If .Column = 3 Then
      If .Value = 0 Then
        .EntireRow.Cut Worksheets("Blatt 2").Cells(Rows.Count, 3).End(xlUp).Offset(1).EntireRow
        .EntireRow.Delete
      End If
    End If
  End With
End Sub

im VBA-Modul von Blatt 2:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Target.Cells(1)
    If .Column = 3 Then
      If .Value = 1 Then
        .EntireRow.Cut Worksheets("Blatt 1").Cells(Rows.Count, 3).End(xlUp).Offset(1).EntireRow
        .EntireRow.Delete
      End If
    End If
  End With
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Niko
Antworten Top
#7
Sry für die verspätete Antwort und Danke für die Antwort
…hätte nicht erwartet, dass ich eine Antwort bekommen…schön und Danke nochmals.

Habe den Code in dieser eingefügten Datei als Beispiel eingefügt, denn es kommt immer Fehler auf.
Datei:
.xlsm   VBA_copy_zustand_(0-1).xlsm (Größe: 16,74 KB / Downloads: 1)
 
Wahrscheinlich mache ich irgendwo ein Fehler, wäre schön, wenn Sie sich mal die Datei anschauen mit dem Beispiel und mir sagen könnten wo ich den Fehler mache.

Danke,

78
  Niko
Antworten Top
#8
Hi,

du solltest die Nachricht von Uwe genau lesen: Er schreibt
Zitat:m VBA-Modul von Blatt 1:
und
Zitat:im VBA-Modul von Blatt 2:
Du hast die Codes eben nicht in die genannten Module sondern in eigene Module gepackt.

Übrigens: Das zeugt davon, dass du nicht weißt, wie man mit VBA umgeht. Umso mehr möchte ich auf meine Antworten hinweisen und nochmals sagen, dass man keine Daten verschiebt, nur weil sich ein Zustand ändert.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • Niko
Antworten Top
#9
Danke für deine Antwort.

Habe nie behauptet das ich etwas von VBA weiß.

Auch wenn ich scheitere – habe ich 10.000 Wege entdeckt, die nicht funktioniert haben.
(frei nach Thomas Alva Edison)

Danke nochmals an alle.

78
Antworten Top


Gehe zu:


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