Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Zeile in drei Tabellenblättern ändern

Betrifft: VBA Zeile in drei Tabellenblättern ändern von: Nik
Geschrieben am: 18.11.2014 11:06:25

Guten Tag,

ich habe folgendes Problem:
Ich habe drei Tabellenblätter, die miteinander verknüpft sind. Es gibt ein Eingabe-Blatt, in dem der Nutzer entscheiden kann wie viele Zeilen er benötigt, um alle seine Inhalte aufzunehmen.

Die anderen beiden Tabellen sind abhängig von der Eingabe-Tabelle. Ich habe unten ein Makro (auch aus dem Internet), welches schonmal in die Richtung geht.
1. Es wird nicht wie erwünscht unter "Fassade" eine Zeile eingefügt, sondern darüber.
2. Wenn ich versuche in den nächsten Reiter zu springen, passiert nicht. Z.B. hier in den Reiter Übersicht.

WICHTIG: Formeln und Formatierungen müssen auch komplett übernommen werden.


Sub NeueZeile()
    Columns("B:B").Select
    Selection.Find(What:="Fassade", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
    ActiveCell.Offset(0, 0).Select
    Selection.Offset(-1).EntireRow.Copy
    Selection.EntireRow.Insert
    Application.CutCopyMode = False
    ActiveCell = x
    End

Worksheets("Übersicht").Select

Columns("B:B").Select
    Selection.Find(What:="Fassade", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
    ActiveCell.Offset(0, 0).Select
    Selection.Offset(-1).EntireRow.Copy
    Selection.EntireRow.Insert
    Application.CutCopyMode = False
    ActiveCell = x

End Sub


Wäre schön, wenn mir einer helfen könnte. Ich kenne mich leider selber nicht mit VBA aus, sondern helfe mir selber sehr mit Foren im Internet!

Danke und lieben Gruß!

  

Betrifft: AW: VBA Zeile in drei Tabellenblättern ändern von: Nik
Geschrieben am: 18.11.2014 11:13:55

Ich habe mich vllt nicht richtig ausgedrückt. Es geht in erster Linie darum, im Eigabe-Blatt, an einer bestimmten Stelle (unter dem Wort "Fassade") eine Zeile einzufügen. AN gleicher Stelle soll nun, auch unter dem Wort "Fassade", in den anderen beiden Blättern eine Zeile eingefügt werden.Die Zeile dessen Formatierung übernommen werden soll ist auch unter "Fassade". "Fassade" ist sozusagen nur die Überschrift, und die Zeilen darunter sind die interessanten, die alle Formatierungen enthalten.


  

Betrifft: Aktivieren von Tabellenblättern von: Frank
Geschrieben am: 19.11.2014 11:37:32

Hallo Nik,

ohne hier den ganzen Code umzustellen, weil die diversen SELECT nicht unbedingt gebraucht werden, zumindest ein Tipp, warum das Worksheet "Übersicht" nicht ausgewählt wird: Es müsste hier korrekt heissen Worksheets("Übersicht").Activate. Allerdings ist auch dieses ACTIVATE so nicht notwendig und könnte anders gelöst werden.
Vielleicht willst Du ja doch mal tiefer in VBA einsteigen. Das hier Columns("B:B").Select für das Blatt "Übersicht" könnte man auch so ausdrücken Sheets("Übersicht").Columns("B:B").Select. Dazu bräuchte man das das Blatt nicht zu aktivieren.
Hat man z.B. 3 Blätter in einer Mappe und will in allen dreien in den gleichen Zellen das gleiche machen, ginge das u.a. auch so:

for i=1 to 3
   with Sheets(i)
      .cells(Zeile, Spalte).value = Berechnung1 'Code für Berechnung in Sub oder Function
      .cells(Zeile, Spalte).EntireRow.Copy
      .cells(Zeile + 1, Spalte).EntireRow.Insert
   End with
next
Grüsse,
Frank


  

Betrifft: AW: Aktivieren von Tabellenblättern von: Nik
Geschrieben am: 19.11.2014 15:36:58

Hallo Frank,

vielen Dank für deine Hilfe. Ich habe den Code nun folgendermaßen:

Sub NeueZeile()
  
  For i = 1 To 3
    With Worksheets(i)
  
     Selection.Find(What:="Fassade", After:=ActiveCell, LookIn:=xlFormulas, _
         LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
           MatchCase:=False).Activate
       ActiveCell.Offset(0, 0).Select
        Selection.Offset(-1).EntireRow.Copy
        Selection.EntireRow.Insert
        Application.CutCopyMode = False
     ActiveCell = x
   
    End With
    Next

    

End Sub
Ich habe nun das Problem, dass er nicht wie erwünscht, in drei verschiedenen Tabellen eine Zeile kopiert und einfügt, sondern in der ersten, drei Zeilen kopiert und einfügt. Daher schaffe ich es noch nicht, in drei verschiedenen Tabellen den Befehl auszuführen.

Leider schaffe ich es nicht mich soweit durch zu schummeln um das erwünschte Ergebnis zu bekommen :(

Danke für Deine Hilfe!!
Nik


  

Betrifft: WITH verwenden von: Frank
Geschrieben am: 19.11.2014 18:09:56

Hallo Nik,

nein, das kann so auch nicht klappen.
Versuch's mal so

Sub test()
For i = 1 To 3
    Sheets(i).Activate
    Cells.Find(What:="Fassade", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
    With Selection
        .Offset(1).EntireRow.Copy
        .Offset(1).EntireRow.Insert
    End With
        Application.CutCopyMode = False
Next
End Sub

und schau Dir den Code an. Dann versuche zu verstehen, was jede Zeile bewirkt.
Nicht ganz unwichtig bei der WITH-Konstruktion ist der Punkt am Anfang jeder Zeile.
Die Offsets zur aktiven Zelle sind in Deinem Code auch falsch gewählt, daher wird sowohl die falsche Zeile kopiert, als auch in der falschen Zeile eingefügt.

Grüsse,
Frank


 

Beiträge aus den Excel-Beispielen zum Thema "VBA Zeile in drei Tabellenblättern ändern"