Anzeige
Archiv - Navigation
1020to1024
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Löschen beibringen

Löschen beibringen
12.11.2008 12:38:18
Micha
Hallo zusammen, ich schon wieder :-))
Wie kann ich denn folgendem Makro beibringen, das er zuerst die Spalten A:H in der *.xls Datei (Arbeitsblatt "CSV") löschen soll, bevor er die Daten aus der *.csv Datei in diese besagten Spalten hineinkopiert?
Danke euch
Gruss..Micha

Sub CSVKopieren()
Dim wkb As Workbook
Dim quelle As String
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb.Name
Next
Columns("A:H").Select
Selection.Copy
Windows("SCM Gesamt PortsTEST.xls").Activate
Sheets("CSV").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Columns.AutoFit
Range("A1").Select
End Sub


19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen beibringen
12.11.2008 12:46:30
robert
hallo,
ich meine so gehts
gruß
rofu
Sheets("CSV").Select
Sheets("CSV").Columns("A:H").ClearContents
AW: Löschen beibringen
12.11.2008 12:53:00
Micha
Hi rofu,
und wo im Makro muss ich das einfügen?
Hab schon ein paar Stellen versucht, kommt aber immer ne Fehlermeldung
Gruss..Micha
AW: Löschen beibringen
12.11.2008 13:00:00
robert
hallo micha,
nach sheets("CSV").select, so wie in meiner nachricht.
welche fehlermeldung kommt? wäre immer gut zu wissen.....
gruß
rofu
AW: Löschen beibringen
12.11.2008 14:12:35
Micha
Hallo rofu,
habe es jetzt so gemacht wie du gesagt hast, dann kommt aber folgende Fehlermeldung:
Die Paste-Methode des Worksheet -Objektes konnte nicht ausgeführt werden
Gruss..Micha
Anzeige
AW: Löschen beibringen
12.11.2008 14:24:53
Werner
Hallo Micha,
ich würde den Befehl

Sheets("CSV").Columns("A:H").ClearContents"


direkt nach der For-Next-Schleife einbauen, bzw. vor
Columns("A:H").Select,
also bevor das Makro den Inhalt der anderen Tabelle kopiert.
Evtl. klappt es ja dann.
Gruß
Werner

AW: Löschen beibringen
12.11.2008 16:13:22
Micha
Hallo,
klappt leider auch nicht. Kommt Fm:
Laufzeitfehler 9 Index ausserhalb des gültigen Bereichs
Micha
AW: Löschen beibringen
12.11.2008 16:35:25
Reinhard
Hi Micha,
dann wirst du kein Blatt haben was "CSV" heißt.
Gruß
Reinhard
AW: Löschen beibringen
12.11.2008 16:52:00
Micha
Hallo Reinhard,
doch habe ich.Dieses Blatt befindet sich in der *.XLS Datei. Bevor ich die Daten der Spalten A:H aus der *.CSV in die Spalten A:H der *.XLS Datei kopiere, möchte ich halt gerne erstmal den dortigen, alten Inhalt löschen und dann die neuen Daten aus der *.CSV Datei reinkopieren.
Der Makro funktioniert ja sonst einwandfrei.
Ich markieren Zelle A1 in der *.CSV Datei und aktiviere den Makro und schon sind die Daten in der *.XLS.Datei im Blatt CSV. Da es sich bei den *.CSV Dateien aber immer um unterschiedlich Große Dateien handelt (mal mit 30 Zeilen, mal mit 3500 Zeieln usw) wollte ich halt immer vorher gerne den alten Inhalt des Blattes CSV löschen, bevor die neuen Daten reinkommen.
Micha
Anzeige
AW: Löschen beibringen
12.11.2008 17:30:58
rofu
hallo, probier mal diesen code.
gruß
rofu

Sub CSVKopieren()
Dim wkb As Workbook
Dim quelle As String
Sheets("CSV").Select
Sheets("CSV").columns("A:H").Clearcontents
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb. _
Name
Next
Windows("SCM Gesamt PortsTEST.xls").Activate
Columns("A:H").Select
Selection.Copy
Sheets("CSV").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Columns.AutoFit
Range("A1").Select
End Sub


Anzeige
AW: Löschen beibringen
13.11.2008 09:22:00
Micha
Moin rofu,
hier funktionieren nur die ersten beiden Code Zeilen und auch nur, wenn ich in der SCM GesamtPortsTEST.xls stehe. Dann werden die Spalten A:H gelöscht. aber die Spalten A:H aus der *.CSV Datei werden dann nicht rüberkopiert. Der Coursor müsste also erst wieder in die *.CSV Datei "rüber hüpfen" und dort die Daten aus Spalte A:H zu kopieren und in der ...TEST.xls Datei einfügen.
Gruss..Micha
AW: Löschen beibringen
12.11.2008 17:33:00
fcs
Hallo Micha,
folgendermassen sollte es funktionieren:

Sub CSVKopieren()
Dim wkb As Workbook
Dim quelle As String
Workbooks("SCM Gesamt PortsTEST.xls").Columns("A:H").ClearContents
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb.Name
Next
Columns("A:H").Copy _
Destination:=Workbooks("SCM Gesamt PortsTEST.xls").Worksheets("CSV").Range("A1")
With Workbooks("SCM Gesamt PortsTEST.xls")
.Activate
With .Worksheets("CSV")
.Activate
With .Columns("A:H")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.AutoFit
End With
Range("A1").Select
End With
End With
End Sub


Ansonsten reicht es auch, wenn du die folgende Zeile vor der For-Zeile in deiner Version einfügts.


Workbooks("SCM Gesamt PortsTEST.xls").Columns("A:H").ClearContents


Gruß
Franz

Anzeige
AW: Löschen beibringen
13.11.2008 09:14:00
Micha
Moin Franz,
hab jetzt beide Methoden mal ausprobiert, klappt leider nicht. Kommt bei beiden folgende FM:
Objekt unterstützt diese Eigenschaft oder Methode nicht.
Gruss..Micha
AW: Löschen beibringen
13.11.2008 09:42:00
Reinhard
Hi Micha,
Franz meinte das sicher so:
Workbooks("SCM Gesamt PortsTEST.xls").Worksheets("CSV").Columns("A:H").ClearContents
wenn der Code nicht in dem Einzeiler auftaucht, gib bitte die Codezeile an wo er auftritt.
Gruß
Reinhard
AW: Löschen beibringen
13.11.2008 09:43:00
fcs
Hallo Micha,
ich hab jetzt mal alle Datei- und Blattnamen nachgebaut.
Leider waren mir in der 1. Fassung, die nicht testen konnte, zwei Fehler bei den Objektbezeichnungen passiert.
In der nachfolgenden Fassung funktioniert es.
Welchen Sinn hat eigentlich die For-Next-Schleife?
Da du das Ergebnis -den Wert der Variablen "quelle"- in der Prozedur nicht verwendest, ist die For-Next-Schleife eigentlich überflüssig.
Gruß
Franz

Sub CSVKopieren()
Dim wkb As Workbook
Dim quelle As String
Workbooks("SCM Gesamt PortsTEST.xls").Worksheets("CSV").Range("A:H").ClearContents
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb.Name
Next
Range("A:H").Copy _
Destination:=Workbooks("SCM Gesamt PortsTEST.xls").Worksheets("CSV").Range("A1")
With Workbooks("SCM Gesamt PortsTEST.xls")
.Activate
With .Worksheets("CSV")
.Activate
With .Range("A:H")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.Columns.AutoFit
End With
Range("A1").Select
End With
End With
End Sub


Anzeige
AW: Löschen beibringen
13.11.2008 14:25:00
Micha
Hi Franz,
jupp, funzt jetzt:-)
Diese For Next Schleife hatte ich aus einem anderen Makro übernommen. Habe gedacht, das das notwendig wäre, da ja diese *.CSV Datei immer einen anderen Namen hat. Wie gesagt, mit VBA kenn ich mich noch net so gut aus.
Aber vielleicht dürfte ich dich hierzu nochmal was fragen.
Wie müsste ich den Makro anpassen (mach dann natürlich Neues Modul), wenn ich ihn noch für eine andere Kopieraufgabe einsetzten möchte?
Und zwar die Spalten A:G (auch aus einer sich namentlich immer unterscheidenden XLS-Datei) aber ab Zeile 8 und dann auch nicht in das Sheet "CSV" sondern in das jeweilig aktive Sheet?
Danke.
Gruss..Micha
Anzeige
AW: Löschen beibringen
13.11.2008 16:01:18
fcs
Hallo Micha,
hier ein Makro mit der von dir gewünschten Anpassung.
Indem man eine Subroutine erstellt, die per Variablen die zu kopierenden Bereiche von einer Hauptroutine übernimmt kann man mit wenig Aufwand verschiedene Kopier-Varianten erstellen.
Du muss diesen Code nicht unbedingt in einem anderen Modul speichern.
Gruß
Franz

Option Explicit
Sub KopierenSpalten_A_bis_G_ab_Zeile_8()
Call Kopieren_Spalten_abZeile(strZielWorkbook:="SCM Gesamt PortsTEST.xls", _
Spalte1:=1, Spalte2:=7, Startzeile:=8)
End Sub
Sub KopierenCSV_Spalten_A_bis_H_ab_Zeile_1()
Call Kopieren_Spalten_abZeile(strZielWorkbook:="SCM Gesamt PortsTEST.xls", _
Spalte1:=1, Spalte2:=8, Startzeile:=1, strZielWorksheet:="CSV")
End Sub
Sub Kopieren_Spalten_abZeile(strZielWorkbook As String, Spalte1 As Long, _
Spalte2 As Long, Startzeile As Long, Optional strZielWorksheet As String = "")
'Kopieren von Daten aus dem aktiven Tabellenblatt in das aktive Blatt der Zieldatei
'strZielWorkbook = Name der ZielDatei
'Spalte1 = Nummer der 1. Spalte
'Spalte2 = Nummer der Letzten Spalte
'Startzeile = Nummer der Zeile ab der kopiert werden soll
'strZielWorksheet = Name des Ziel-Tabellenblatts, Wenn ="" dann aktives blatt
On Error GoTo Fehler
Dim wksQuelle As Worksheet, rngBereich As Range, wb As Workbook, wksZiel As Worksheet
' Prüfen, ob ZielArbeitsmappe geöffnet
For Each wb In Workbooks
If LCase(wb.Name) = LCase(strZielWorkbook) Then
Exit For
End If
Next
If wb Is Nothing Then
MsgBox "Die Zieldatei """ & strZielWorkbook & """ ist nicht geöffnet!"
GoTo Fehler
End If
Set wksQuelle = ActiveSheet
With wksQuelle
'zu kopierenden Bereich ermitteln in Spalten ab StartZeile
Set rngBereich = .Range(.Cells(Startzeile, Spalte1), _
.Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, Spalte2))
End With
With Workbooks(strZielWorkbook)
.Activate
If strZielWorksheet = "" Then
Set wksZiel = ActiveSheet
Else
Set wksZiel = .Worksheets(strZielWorksheet)
wksZiel.Activate
End If
With wksZiel
'alles löschen in Spalten ab StartZeile
.Range(.Cells(Startzeile, Spalte1), .Cells(.Rows.Count, Spalte2)).Clear
'Daten kopieren und ab StartZeile einfügen
rngBereich.Copy Destination:=.Cells(Startzeile, Spalte1)
'Spalten formatieren
With .Range(.Columns(Spalte1), .Columns(Spalte2))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.Columns.AutoFit
End With
Range("A1").Select
End With
End With
Fehler:
If Err.Number  0 Then
MsgBox "Fehler-Nr. " & Err.Number & vbLf & Err.Description
End If
End Sub


Anzeige
AW: Löschen beibringen
13.11.2008 16:35:00
Micha
Hallo Franz,
ist ja klasse :-)) Klappt super. Aber ist es richtig, das der Part KopierenSpalten_A_bis_G_ab_Zeile_8() die Werte in der Zieldatei auch erst wieder ab Zeile 8 Einfügt? Die Zeilen 2-7 bleiben immer leer, nur die Überschrift in Zeile 1 bleibt bestehen.
Gruss..Micha
AW: Löschen beibringen
13.11.2008 17:33:36
fcs
Hallo Micha,
ich hab die Zeile und Spalte für das EInfügen in der Zieltabelle noch als Optionale Parameter eingebaut.
Standardmäßig wird ab der 1. Zeile eingefügt.
Gruß
Franz

Sub KopierenSpalten_A_bis_G_ab_Zeile_8()
Call Kopieren_Spalten_abZeile(strZielWorkbook:="SCM Gesamt PortsTEST.xls", _
Spalte1:=1, Spalte2:=7, Startzeile:=8, ZeileZiel:=1)
End Sub
Sub KopierenSpalten_A_bis_H_ab_Zeile_1()
Call Kopieren_Spalten_abZeile(strZielWorkbook:="SCM Gesamt PortsTEST.xls", _
Spalte1:=1, Spalte2:=8, Startzeile:=1, strZielWorksheet:="CSV")
End Sub
Sub Kopieren_Spalten_abZeile(strZielWorkbook As String, Spalte1 As Long, _
Spalte2 As Long, Startzeile As Long, Optional strZielWorksheet As String = "", _
Optional ZeileZiel As Long = 1, Optional SpalteZiel As Long = 1)
'Kopieren von Daten aus dem aktiven Tabellenblatt in das aktive Blatt der Zieldatei
'strZielWorkbook = Name der ZielDatei
'Spalte1 = Nummer der 1. Spalte
'Spalte2 = Nummer der Letzten Spalte
'Startzeile = Nummer der Zeile ab der kopiert werden soll
'strZielWorksheet = Name des Ziel-Tabellenblatts, Wenn ="" dann aktives blatt
'ZeileZiel = Nummer der Zeile ab der eingefügt werden soll, Standard = 1
'SpalteZiel = Nummer der Zeile ab der eingefügt werden soll, Standard = 1
On Error GoTo Fehler
Dim wksQuelle As Worksheet, rngBereich As Range, wb As Workbook, wksZiel As Worksheet
' Prüfen, ob ZielArbeitsmappe geöffnet
For Each wb In Workbooks
If LCase(wb.Name) = LCase(strZielWorkbook) Then
Exit For
End If
Next
If wb Is Nothing Then
MsgBox "Die Zieldatei """ & strZielWorkbook & """ ist nicht geöffnet!"
GoTo Fehler
End If
Set wksQuelle = ActiveSheet
With wksQuelle
'zu kopierenden Bereich ermitteln in Spalten ab StartZeile
Set rngBereich = .Range(.Cells(Startzeile, Spalte1), _
.Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, Spalte2))
End With
With Workbooks(strZielWorkbook)
.Activate
If strZielWorksheet = "" Then
Set wksZiel = ActiveSheet
Else
Set wksZiel = .Worksheets(strZielWorksheet)
wksZiel.Activate
End If
With wksZiel
'alles löschen in Spalten ab StartZeile
.Range(.Cells(ZeileZiel, SpalteZiel), _
.Cells(.Rows.Count, SpalteZiel + rngBereich.Columns.Count - 1)).Clear
'Daten kopieren und ab StartZeile einfügen
rngBereich.Copy Destination:=.Cells(ZeileZiel, SpalteZiel)
'Spalten formatieren
With .Range(.Columns(SpalteZiel), .Columns(SpalteZiel + rngBereich.Columns.Count - 1))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.Columns.AutoFit
End With
Range("A1").Select
End With
End With
Fehler:
If Err.Number  0 Then
MsgBox "Fehler-Nr. " & Err.Number & vbLf & Err.Description
End If
End Sub


Anzeige
AW: Löschen beibringen
14.11.2008 10:34:34
Micha
Moin Franz,
danke schön. Klappt bisher alles sehr gut.
Gruss..Micha

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige