Clever-Excel-Forum

Normale Version: VBA: Bereich mit Variable adressieren und erweitern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hi VondeAn,

schau dir das mal an:
Hallo Max,

wenn du nur den Bereich jetzt 10 mal kopieren willst, würde ich gar kein VBA nehmen und einfach 10 mal kopieren.

über VBA wäre das

Code:
Option Explicit
Sub versiv()
Dim i As Long
With Worksheets("Tabelle2")
    For i = 1 To 10
    'kopiere den Bereich von Tabelle3 (A1:D4) 10 mal alle 5 Zeilen beginnend ab E5
    Worksheets("Tabelle3").Range("A1:D4").Copy _
         Destination:=.Range("E" & i * 5)
    Next
End With
End Sub
(27.06.2014, 10:46)chris-ka schrieb: [ -> ]Hallo Max,

wenn du nur den Bereich jetzt 10 mal kopieren willst, würde ich gar kein VBA nehmen und einfach 10 mal kopieren.

Na ja, es geht ja schlussendlich darum, dass dieses Dokument als Vorlage verwendet wird, die dann verschiedene Leute zu verschiedenen Zwecken mehrmals ausfüllen werden. Dabei soll man dann diesen Bereich, der vordefinierte Felder zum Ausfüllen hat, ausfüllen und bei Bedarf einen neuen anfügen können. Natürlich ist die Anzahl dieser Bereiche aber nicht immer dieselbe. Daher der Button.

Vielen Dank für eure Hilfe, ich seh mir jetzt beides mal an.

Gruß Max
Hallo Max,

darum kann ich mich erst nach meinem Arztermin kümmern. Taxi wartet schon.
(27.06.2014, 10:42)Heinz Ulm schrieb: [ -> ]Hi VondeAn,

schau dir das mal an:

Okay, das funktioniert immerhin so, wie ich mir das vorgestellt hatte. Der Code ist recht umfangreich, und es wäre mir persönlich lieber gewesen, ihn so einfach wie möglich zu halten, damit ich ihn dann besser an mein Layout anpassen kann... Eben eine Abwandlung des einfachen Kopiercodes, den ich am Anfang dieses Threads gepostet hatte, nur noch erweitert um die Verschiebung des Einfügepunktes...

Nichtsdestotrotz bin ich schon mal sehr dankbar dafür! Ich werde mich mal durchwühlen und schauen, ob ich das an meine Zwecke angepasst bekomme. Die Kommentare sind auf jeden Fall sehr hilfreich. Vielen Dank dafür!

Falls ich noch eine Frage habe, schreib ich sie hier rein.

Grüße,

MAx
Hey Heinz,

ich habe mal versucht, deinen Code etwas zu "verschlanken" und alles rauszuschmeißen, was nicht mehr nötig ist. Dabeu habe ich aber anscheinend irgendwas falsch gemacht. Der Code sieht momentan so aus:

Code:
Sub Uebersicht()
  
   Dim ZZeile As Integer
   Dim kZeile As Integer
   Dim kSpalte As Integer
  
    'Kopieren des Bereiches F5:L22
    Range("C5:I22").Select
    Selection.Copy
    
        'Festlegung des Einfügepunktes, welche Spalte (Zspalte = der Wert aus der H3 und
    ' der Zeile ZZeile =Wert aus der Zelle F4
    Range(???? & kZeile).Select
    
    'Einfügen der Werte und Formate des kopierten Bereiches
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range(ZSpalte & kZeile).Select
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        
    'Erhöhung der Anzahl und der Zeilen für die nächste Einfügeoperation
    ZZeile = ZZeile + 18
    
    'Zurücksetzen der Werte auf die Ausgangsposition
    Range("C4").Value = 5

End Sub

Ich habe die Zählung bis 8 (ich hatte diesen Wert nur angegeben, weil eine unbegrenzte Anzahl an Wiederholungen nicht möglich ist) und die Sache mit der zweiten Spalte in der "Bereichsliste" (nette Idee, aber nicht nötig, weil die endgültigen Bereiche viel flacher werden) rausgenommen, inklusive der entsprechenden Variablen.

Dort, wo bei 'Range' jetzt ???? steht, soll einfach ein fester Wert rein. Blöderweise weiß ich nicht, wie da die Syntax auszusehen hat, und egal, wie ich es versuche, kommt immer folgendes:

Laufzeitfehler '1004':

Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen


Was mache ich falsch? Mein Ziel ist ein Code, der wirklich NICHTS anderes tut als: Kopieren, unter den vorhandenen Einträgen Einfügen, fertig. Und das nach Möglichkeit ohne irgendwelche sichtbaren Werte in irgendwelchen sichtbaren Zellen.

Vielen Dank!!!

Max
Hi Max,

(27.06.2014, 11:35)VodeAn schrieb: [ -> ]Dort, wo bei 'Range' jetzt ???? steht, soll einfach ein fester Wert rein. Blöderweise weiß ich nicht, wie da die Syntax auszusehen hat, und egal, wie ich es versuche, kommt immer folgendes:

Laufzeitfehler '1004':

Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen

Range benötigt eine Zellangabe in "
Also z.B. Range("C5")
Damit legst Du die Zelle C5 fest.
Wenn Du es variabel haben willst, mußt Du den Variablen auch Werte zuweisen.

Code:
'Festlegung des Einfügepunktes, welche Spalte (Zspalte = der Wert aus der H3 und
    ' der Zeile ZZeile =Wert aus der Zelle F4
    Range(???? & kZeile).Select

Range(???? + kZeile) ist keine Zellangabe, egal, was Du anstelle ???? einsetzt.

Denn
1. ist kZeile nirgends mit einem Wert gefüllt
2. die Variable heißt kSpalte und nicht ZSpalte => deswegen gibt es den Parameter "Option Explicit", dann werden solche Fehler verhindert / angezeigt.
3. kSpalte hat keinen Wert
4. ZZeile hat keinen Wert
5. Syntax stimmt nicht.
6. mMn ist da Cells(ZZeile, ZSpalte) besser geeignet


versuchs mal so:

Code:
kSpalte = Range("H3").Value
ZZeile = Range("F4").Value
kZeile = 5  ' oder auch ein Zellwert oder so was

Cells(ZZeile+kZeile, kSpalte).Select

Noch ein Tipp zur Verschlankung:

xxx.Select
Selection.YYY

kann meistens durch xxx.YYY ersetzt werden.
Hi Max,

der Code läuft so bei mir:

Code:
Sub Uebersicht()
  
    Dim ZZeile As Integer
    Dim kZeile As Integer
    Dim kSpalte As Integer
    
    ZZeile = Range("C4").Value
    kZeile = Range("E4").Value
     'Kopieren des Bereiches F5:L22
     Range("C5:I22").Select
     Selection.Copy
    
         'Festlegung des Einfügepunktes, welche Spalte (Zspalte = der Wert aus der H3 und
     ' der Zeile ZZeile =Wert aus der Zelle F4
     Range("C" & kZeile).Select
    
     'Einfügen der Werte und Formate des kopierten Bereiches
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
         :=False, Transpose:=False
     Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Range("C" & kZeile).Select
     Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
        
     'Erhöhung der Anzahl und der Zeilen für die nächste Einfügeoperation
     ZZeile = ZZeile + 22
     Range("C4").Value = ZZeile
'     'Zurücksetzen der Werte auf die Ausgangsposition
'     Range("C4").Value = 5

End Sub

Die Formeln brauchst du:


Eingabe
ABCDE
4Zeile7193

verwendete Formeln
Zelle Formel Bereich N/A
E4=WENN(E3="K";C4-66;C4+22)
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.24 einschl. 64 Bit



mach die Schriftfarbe "weiss", dann siehst du auch nichts.
(27.06.2014, 12:18)Heinz Ulm schrieb: [ -> ]Die Formeln brauchst du:


Eingabe
ABCDE
4Zeile7193

verwendete Formeln
Zelle Formel Bereich N/A
E4=WENN(E3="K";C4-66;C4+22)
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 14.24 einschl. 64 Bit



mach die Schriftfarbe "weiss", dann siehst du auch nichts.

Aber das ist doch jetzt wieder für die zweite Spalte! Diese Funktion will ich doch rausnehmen, weil ich sie nicht brauche, darum geht es doch! Wenn ich das nicht würde rausnehmen wollen, hätte ich deinen ursprünglichen Code ja auch einfach übernehmen können.

Ich zitiere mich nochmal selbst:

(27.06.2014, 11:35)VodeAn schrieb: [ -> ]Mein Ziel ist ein Code, der wirklich NICHTS anderes tut als: Kopieren, unter den vorhandenen Einträgen Einfügen, fertig.

KEINE 2 Spalten in der Auflistung!

Gruß,

Max
Hi Max,

bei dem Code wird alles untereinander in der Spalte C kopiert.

Die Berechnung brauchst du, weil es ja nicht immer die gleiche ANZAHL der Kopien ist.
Wenn du das wolltest, geht's einfach mit einer Schleife, 8 mal kopieren. Fertig.

Das wurde dir aber schon mal von chris-ka vorgeschlagen
Seiten: 1 2 3