| Autor |
Nachricht |
Gast
Verfasst am: 08. März 2010, 11:38 Rufname:
|
|
| Version: Office 2003 |
|
Hallo,
ich will ein Makro in Excel erstellen.
Das habe ich auch schon hinbekommen.
Das Problem ist jetzt, wenn die Zeilen in Tabelle1 ergänzt werden, also 614, 615 usw.
Das festgelegte Makro kopiert mir ja nur die Zellen bis 613.
Es soll aber immer bis 2 Zeilen über "Anzahl" kopieren.
Hat jemand eine Idee?
Die Excel-Datei und eine Aufzeichnung meines Problems (Video) findet ihr hier:
http://ul.to/zson4p
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
Danke schonmal.
|
|
Gast
Verfasst am: 08. März 2010, 11:41 Rufname:
|
| |
| Version: Office 2003 |
|
Hallo,
würdest Du uns mal das Skript hier reinstellen? Auf Deine Datei kann ich leider nicht zugreifen!
LG Gerd
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 12:13 Rufname:
|
|
| Version: Office 2003 |
|
Ich habe hier das Aufzeichnungsvideo nochmal hochgeladen.
Das müsste jetzt eigentlich klappen.
Ich hoffe, ihr könnt mir so helfen:
http://www.vidup.de/v/YX2O4/
|
|
bst
Programmierer
Verfasst am: 08. März 2010, 12:16 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Auch Hallo,
versuche das mal so.
P.S.: Wie bzw. mit welchem Programm hast Du das denn aufgezeichnet?
cu, Bernd
--
| Code: | Option Explicit
Sub x()
With Worksheets("Tabelle1")
.Range(("A4"), .Range("A4").End(xlDown).Offset(, 12)).Copy Worksheets("Tabelle2").Range("A4")
End With
End Sub
|
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 12:56 Rufname:
|
| |
| Version: Office 2003 |
|
Ich habe das mit dem Programm CamStudio aufgezeichnet und dann auf www.vidup.de hochgeladen.
Wie muss ich das Skrip abändern?
Ich habe jetzt identische (der Aufbau) Tabellen wie die Tabelle1
also:
Tabelle1
Tabelle2
Tabelle3
Ich will jetzt in Tabelle4 das Makro anwenden.
In Tabelle4 sollen dann untereinander die Zeilen aus Tabelle1, Tabelle2 und Tabell3 aufgelistet werden.
|
|
bst
Programmierer
Verfasst am: 08. März 2010, 13:20 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Hi,
versuche das mal so. CamStudio schau ich mir mal an
cu, Bernd
--
| Code: | Option Explicit
Sub x()
Dim wsDst As Worksheet
Dim lngZeile As Long
Dim varItem As Variant
Dim rngSrc As Range
Set wsDst = Worksheets("Tabelle4")
With wsDst
lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
If lngZeile >= 4 Then .Range("A4", .Cells(lngZeile, 1)).EntireRow.Delete
lngZeile = 4
End With
For Each varItem In Array("Tabelle1", "Tabelle2", "Tabelle3")
With Worksheets(varItem)
Set rngSrc = .Range(("A4"), .Range("A4").End(xlDown).Offset(, 12))
rngSrc.Copy wsDst.Cells(lngZeile, 1)
lngZeile = lngZeile + rngSrc.Rows.Count
End With
Next
End Sub
|
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 13:44 Rufname:
|
|
| Version: Office 2003 |
|
Danke schön,
genau so habe ich mir das vorgestellt. SUPER
2 Punkte habe ich allerdings noch:
1. ich will in Tabelle4 noch eine Sortierung hinzufügen.
Es soll erst nach Spalte K (absteigend) dann nach L (absteigend) und zum Schluss nach Spalte A (aufsteigend) sortiert werden.
Kann man das in das Makro noch einbauen?
2. Wie würde das Skrip aussehen, wenn nach Zufall sortiert wird, also die Zeilen wild durcheinander (Mix)?
|
|
bst
Programmierer
Verfasst am: 08. März 2010, 14:07 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Hi,
so?
P.S. keine PNs mehr bitte.
cu, Bernd
--
| Code: | Option Explicit
Sub x()
Dim wsDst As Worksheet
Dim lngZeile As Long
Dim varItem As Variant
Dim rngSrc As Range
Set wsDst = Worksheets("Tabelle4")
With wsDst
lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
If lngZeile >= 4 Then .Range("A4", .Cells(lngZeile, 1)).EntireRow.Delete
lngZeile = 4
For Each varItem In Array("Tabelle1", "Tabelle2", "Tabelle3")
With Worksheets(varItem)
Set rngSrc = .Range(("A4"), .Range("A4").End(xlDown).Offset(, 12))
rngSrc.Copy wsDst.Cells(lngZeile, 1)
lngZeile = lngZeile + rngSrc.Rows.Count
End With
Next
Set rngSrc = .Range(("A4"), .Range("A4").End(xlDown).Offset(, 12))
rngSrc.Sort Key1:=.Range("K4"), Order1:=xlDescending, _
Key2:=.Range("L4"), Order2:=xlDescending, _
Key3:=.Range("A4"), Order3:=xlAscending, Header:=xlNo
End With
End Sub
Sub y()
Dim lngLastRow As Long
Dim rngSrc As Range
With Worksheets("Tabelle4")
lngLastRow = .Range("A4").End(xlDown).Row
.Range("N4:N" & lngLastRow).Formula = "=rand()"
Set rngSrc = .Range(("A4"), .Cells(lngLastRow, 14))
rngSrc.Sort Key1:=.Range("N4"), Order1:=xlDescending, Header:=xlNo
.Columns("N:N").Delete
End With
End Sub
|
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 14:55 Rufname:
|
|
| Version: Office 2003 |
|
Hat auch super geklappt, danke.
Allerdings soll das Mix-Makro (zufällige Sortierung) in Tabellle5 ausgeführt werden.
Dort kann es dann ja nicht mehr funktionieren.
Wie lautet das korrekte Makro?
|
|
bst
Programmierer
Verfasst am: 08. März 2010, 15:27 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Hi,
Ändere in der Sub y die eine Zeile in:
With Worksheets("Tabelle5")
cu, Bernd
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 15:42 Rufname:
|
|
| Version: Office 2003 |
|
Ne, das klappt leider nicht.
Wenn ich das Makro in Tabelle5 ausführe, sehe ich, dass in Spalte N etwas gerechnet wird. Aber in Tabelle5 steht in Spalte A bis Spalte M ja noch nichts.
Das "x" Makro und das "y" Makro müssten zusammengefügt werden.
Sehe ich das richtig?
|
|
bst
Programmierer
Verfasst am: 08. März 2010, 20:46 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Hi,
dann kopiere eben vorher den Inhalt von Tabelle4 nach Tabelle5. Wie wäre es denn mit etwas mehr Eigeninitiative?
cu, Bernd
--
Ungetestet:
| Code: | | Worksheets("Tabelle4").UsedRange.Copy Worksheets("Tabelle5").Range("A1") |
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 08. März 2010, 22:36 Rufname:
|
|
| Version: Office 2003 |
|
Das klappt leider nicht.
Besser ist es, wenn das Makro aus Tabelle1, Tabelle2 und Tabelle3 die Daten herausholt und es in Tabelle5 beliebig sortiert.
Wie würde das Makro lauten?
Danke schonmal für die vielen, hilfreichen Antworten.
|
|
bst
Programmierer
Verfasst am: 09. März 2010, 00:05 Rufname: Bernd
Wohnort: Ilsfeld
|
|
| Version: Office 2003 |
|
Abend,
das Zusammen-Kopieren der habe ich Dir bereits oben codiert, alles was Du da nun tun musst ist es tabelle4 durch tabelle5 zu ersetzen.
Am Ende rufst Du y auf, oder kopierst den Inhalt von y darunter. Fertig.
cu, Bernd
|
|
anton8
Im Profil kannst Du frei den Rang ändern
Verfasst am: 09. März 2010, 09:34 Rufname:
|
| |
| Version: Office 2003 |
|
Ich bekomme es leider nicht hin, die zwei Formeln zusammen zufügen.
Ich habe die Formel so abgeändert:
Option Explicit
Sub Tabelle5()
Dim wsDst As Worksheet
Dim lngZeile As Long
Dim varItem As Variant
Dim rngSrc As Range
Set wsDst = Worksheets("Tabelle5")
With wsDst
lngZeile = .Cells.SpecialCells(xlCellTypeLastCell).Row
If lngZeile >= 4 Then .Range("A4", .Cells(lngZeile, 1)).EntireRow.Delete
lngZeile = 4
For Each varItem In Array("Tabelle1", "Tabelle2", "Tabelle3")
With Worksheets(varItem)
Set rngSrc = .Range(("A4"), .Range("A4").End(xlDown).Offset(, 12))
rngSrc.Copy wsDst.Cells(lngZeile, 1)
lngZeile = lngZeile + rngSrc.Rows.Count
End With
Next
Dim lngLastRow As Long
Dim rngSrc As Range
With Worksheets("Tabelle5")
lngLastRow = .Range("A4").End(xlDown).Row
.Range("N4:N" & lngLastRow).Formula = "=rand()"
Set rngSrc = .Range(("A4"), .Cells(lngLastRow, 14))
rngSrc.Sort Key1:=.Range("N4"), Order1:=xlDescending, Header:=xlNo
.Columns("N:N").Delete
End With
End Sub
|
|