Sheets('Name').activate, wie einen weiteren

Hallo,

wie kann ich bei unten aufgelisteten Code ein weiteres Tabellenblatt (bsw. Aufträge oder Angebote) auswählen.

Vielleicht hat auch jemand noch eine bessere, andere Idee .Ziel ist es, dass ich im Blatt Aufträge und/oder Angebot eine Zeile einfügen möchte und die Bedinngungen erfüllen.

Sub Zeile_einfügen_Formeln_kopieren()

’ Zeile_einfügen_Formeln_kopieren Makro

Dim i%
izeile = ActiveCell.Row

Sheets(„Aufträge“).Activate
Range(„A“ & izeile).Select
Selection.EntireRow.Insert
Range(„A“ & izeile - 1).Select
Selection.Copy
Range(„A“ & izeile).PasteSpecial
Range(„B“ & izeile).Select
ActiveCell.FormulaR1C1 = „=R[-1]C“
Range(„L“ & izeile - 1).Select
Selection.Copy
Range(„L“ & izeile).PasteSpecial
Range(„N“ & izeile - 1).Select
Selection.Copy
Range(„N“ & izeile).PasteSpecial
Range(„C“ & izeile).Select
End Sub

Danke & Gruß, olli

Hä?

wie kann ich bei unten aufgelisteten Code ein weiteres
Tabellenblatt (bsw. Aufträge oder Angebote) auswählen.

Vielleicht hat auch jemand noch eine bessere, andere Idee
.Ziel ist es, dass ich im Blatt Aufträge und/oder Angebot eine
Zeile einfügen möchte und die Bedinngungen erfüllen.

Also ich habe nicht verstanden, was Du meinst. Tut mir leid.

Kristian

Hallo Kristian,

das liegt vielleicht daran, dass ich nicht genug bzw. kaum Ahnung von der VBA-Programmierung habe.

Aus dem Code geht ja sicherlich heraus, dass diese Funktion im Blatt „Aufträge“ ausgeführt wird und auch funktioniert.
Sheets(„Aufträge“).Activate

Jetzt gibt es aber in diesem Exceldokument noch ein Blatt, nämlich das Blatt „Angebote“ das genau so aufgebaut ist wie „Aufträge“. Dort soll diese Funktion auch verfügbar sein. Wie erreiche ich das? Einfach den kompletten Code kopieren und einfügen und die Zeile „Aufträge“ auf „Angebote“ ändern kann es ja nicht sein (denke ich mir so).

Danke & Gruß, olli

So könnte es gehen …

Hallo Kristian,

das liegt vielleicht daran, dass ich nicht genug bzw. kaum
Ahnung von der VBA-Programmierung habe.

Aus dem Code geht ja sicherlich heraus, dass diese Funktion im
Blatt „Aufträge“ ausgeführt wird und auch funktioniert.
Sheets(„Aufträge“).Activate

Jetzt gibt es aber in diesem Exceldokument noch ein Blatt,
nämlich das Blatt „Angebote“ das genau so aufgebaut ist wie
„Aufträge“. Dort soll diese Funktion auch verfügbar sein. Wie
erreiche ich das? Einfach den kompletten Code kopieren und
einfügen und die Zeile „Aufträge“ auf „Angebote“ ändern kann
es ja nicht sein (denke ich mir so).

Achso, das ist schon genauer.

Es gibt drei Möglichkeiten (mindestens), das zu realisieren. Eine hattest Du selbst schon genannt. Warum sollte das nicht sein können? Weil man den Code auf diese Weise doppelt hat? Das ist natürlich unschön, weil man eventuelle Änderungen in beiden Code-Segmenten vornehmen muß.

Die Varianten 2 und drei schaffen da Abhilfe:

Du kannst in den betroffenen Tabellenblättern je eine Prozedur einbauen, die folgendermaßen aussieht:

Sub Aufruf()
 Call Zeile\_einfuegen\_Formeln\_kopieren( **"Aufträge"** )
End Sub 'Aufruf

Diese ruft dann die Prozedur Zeile_einfuegen_Formeln_kopieren auf und übergibt dabei als Parameter den Namen der zu bearbeitenden Tabelle. Der wird dann dort statt des festen Wertes „Aufträge“ verwendet:

Sub Zeile\_einfuegen\_Formeln\_kopieren( **Tabelle** As String)
Dim izeile 'hier war ´n Fehler bei Dir, glaube ich
 Sheets( **Tabelle** ).Activate
 izeile = ActiveCell.Row 'erst _nach_ dem Aktivieren abfragen
 Range("A" & izeile).Select
 Selection.EntireRow.Insert
 Range("A" & izeile - 1).Select
 Selection.Copy
 Range("A" & izeile).PasteSpecial
 Range("B" & izeile).Select
 ActiveCell.FormulaR1C1 = "=R[-1]C"
 Range("L" & izeile - 1).Select
 Selection.Copy
 Range("L" & izeile).PasteSpecial
 Range("N" & izeile - 1).Select
 Selection.Copy
 Range("N" & izeile).PasteSpecial
 Range("C" & izeile).Select
End Sub 'Zeile\_einfuegen\_Formeln\_kopieren

Diese Prozedur solltest Du in ein globales Modul schreiben (Projekt-Explorer: rechte Maustaste, Einfügen, Modul). Die jeweilige Prozedur „Aufruf()“ rufst Du dann wie üblich vom jeweiligen Tabellenblatt aus auf.

Variante drei ist ähnlich, funktioniert aber ohne die lokalen „Aufruf“-Prozeduren. Voraussetzung ist, daß das richtige Tabellenblatt aktiviert ist:

Sub Zeile\_einfuegen\_Formeln\_kopieren()
Dim izeile
 izeile = **ActiveCell**.Row

 Range("A" & izeile).Select
 Selection.EntireRow.Insert
 Range("A" & izeile - 1).Select
 Selection.Copy
 Range("A" & izeile).PasteSpecial
 Range("B" & izeile).Select
 ActiveCell.FormulaR1C1 = "=R[-1]C"
 Range("L" & izeile - 1).Select
 Selection.Copy
 Range("L" & izeile).PasteSpecial
 Range("N" & izeile - 1).Select
 Selection.Copy
 Range("N" & izeile).PasteSpecial
 Range("C" & izeile).Select
End Sub 'Zeile\_einfuegen\_Formeln\_kopieren

Das „Sheets(Tabelle).Activate“ wird einfach weggelassen. Somit bezieht sich alles auf das derzeit aktive Blatt.

Eine Sache noch, die hier vielleicht nicht so sinnvoll ist, manchmal aber ganz nützlich: Man kann auch auf einem Blatt arbeiten, ohne es zu aktivieren. Dabei kann also ein anderes Blatt aktiv bleiben, und die Aktion auf dem bearbeiteten Blatt findet im Hintergrund statt. Dazu muß man das Blatt und die Zellen überall explizit angeben. Hier sieht das dann so aus:

Sub Zeile\_einfuegen\_Formeln\_kopieren2( **Tabelle** As String, **iZeile** As Integer)
**With** Sheets( **Tabelle** )
 'izeile = ActiveCell.Row Das geht hier nicht mehr. Da das Blatt nicht
 ' unbedingt aktiv ist, gibt es auch keine aktive
 ' Zelle. Die Zeilennummer muß hier also explizit
 ' anggeben werden - z.B. durch Paramterübergabe.
**.** Range("A" & iZeile).EntireRow.Insert
**.** Range("A" & iZeile - 1).Copy
**.** Range("A" & iZeile).PasteSpecial
**.** Range("B" & iZeile).FormulaR1C1 = "=R[-1]C"
**.** Range("L" & iZeile - 1).Copy
**.** Range("L" & iZeile).PasteSpecial
**.** Range("N" & iZeile - 1).Copy
**.** Range("N" & iZeile).PasteSpecial
**End With**'Sheets(Tabelle)End Sub 'Zeile\_einfuegen\_Formeln\_kopieren2

 
Sub Aufruf()
 Call Zeile\_einfuegen\_Formeln\_kopieren2("Sheet1", 5)
End Sub 'Aufruf

Nachteil ist natürlich, daß die Zeile beim AUfruf bekannt oder eben fest sein muß. Aber bei bestimmten Anwendungen ist das der Fall, z.B., wenn man aus einem Blatt etwas immer an gleicher Stelle rauskopieren und in das aktuelle Blatt einfügen möchte, ohne das andere Blatt dazu immer aktivieren zu müssen. Sieht ja doof aus das geflippe auf dem Monitor.

Achso, zur With-Geschichte einfach mal in der Hilfe nachlesen. Cursor drauf und [Strg]+[F1] drücken.

Kristian

1 „Gefällt mir“