Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Bereich mit Variable adressieren und erweitern
#11
Hi VondeAn,

schau dir das mal an:


Angehängte Dateien
.xlsm   Kopie von vorlageVariante2.xlsm (Größe: 29,9 KB / Downloads: 7)
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
[-] Folgende(r) 1 Nutzer sagt Danke an Heinz Ulm für diesen Beitrag:
  • VodeAn
Antworten Top
#12
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
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Antworten Top
#13
(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
Antworten Top
#14
Hallo Max,

darum kann ich mich erst nach meinem Arztermin kümmern. Taxi wartet schon.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#15
(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
Antworten Top
#16
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
Antworten Top
#17
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.
Antworten Top
#18
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.
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#19
(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
Antworten Top
#20
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
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top


Gehe zu:


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