[gelöst] Excel Sheet vor Export leeren

30. November 2009 14:00

Hallo Leute,

ich hab mal wieder ne Frage :wink:

Ist es möglich ein Excel Sheet vor dem Export zu leeren? Das Sheet soll nicht gelöscht werden, lediglich alle Daten im Sheet.
Wenn ich mir in Excel nen Makro aufzeichne sieht das ganze so aus:
Code:
Sub Makro1()
'
' Makro1 Makro
'

'
    Range("A1:M67").Select
    Range("M1").Activate
    Selection.ClearContents
End Sub


Eventuell kann man daraus etwas bauen. Weiß aber nicht genau wie. Vielleicht gibt es ja auch noch eine andere Möglichkeit :?:

Grüße
Zuletzt geändert von EDING am 1. Dezember 2009 17:36, insgesamt 3-mal geändert.

Re: Excel Sheet vor Export leeren

30. November 2009 14:33

Falls du die MS Object Library verwendest siehe hier nach: :greenarrow: viewtopic.php?f=40&t=8849&p=43330#p43213

Der Befehl wäre dann:
Code:
Sheet.Range('A1:M67').ClearContents;


Es gibt nur damit Probleme falls du Zellen verbunden hast (MERGE), die aber nur teilweise in deinem Bereich liegen.
Also z. B Zelle A1 bis Z1 sind verbunden und du willst A1 bis M67 löschen.

Gruß,
winfy
Zuletzt geändert von winfy am 30. November 2009 14:38, insgesamt 1-mal geändert.

Re: Excel Sheet vor Export leeren

30. November 2009 14:35

Hey winfy,

Problem wird dabei sein, dass die Range nicht immer "A1:M67" sein wird, sondern sehr variabel.

Grüße

Re: Excel Sheet vor Export leeren

30. November 2009 15:02

EDING hat geschrieben:Hey winfy,

Problem wird dabei sein, dass die Range nicht immer "A1:M67" sein wird, sondern sehr variabel.

Grüße


Falls du den Inhalt des gesamten Sheets (ohne Formatierung) löschen willst:
Code:
Sheet.Cells.ClearContents;


Falls du nur die Formatierungen löschen willst:
Code:
Sheet.Cells.ClearFormats;


Falls du es jedoch variabler brauchst, musst du dir den Range-String dynamisch zusammenbauen:
Code:
// RangeString vom Typ Text
RangeString:='A1:IV65535':
// oder String manipulieren
Sheet.Range(RangeString).ClearContents;


Gruß,
winfy
Zuletzt geändert von winfy am 30. November 2009 15:28, insgesamt 3-mal geändert.

Re: Excel Sheet vor Export leeren

30. November 2009 15:13

okay,das sollte klappen...

vielen Dank winfy

grüße

EDIT:

Leider bekomm ich folgende Fehlermeldung:
Bild

und habe folgenden QuelltexT:
Code:
IF FileName = '' THEN
  ERROR(Text001);

IF SheetName = '' THEN
  ERROR(Text002);

IF NOT EXISTS(FileName) THEN
  ERROR(Text003,FileName);

IF NOT CREATE(XlApp,TRUE) THEN
  ERROR(Text000);

XlApp.Workbooks._Open(FileName);
XlWrkBk := XlApp.ActiveWorkbook;
i := 1;
EndOfLoop := XlWrkBk.Worksheets.Count;
WHILE (i <= EndOfLoop) AND (NOT Found) DO BEGIN
  XlWrkshts := XlWrkBk.Worksheets.Item(i);
  IF SheetName = XlWrkshts.Name THEN
    Found := TRUE;
  i := i + 1;
END;
IF Found THEN
  XlWrkSht := XlWrkBk.Worksheets.Item(SheetName)
ELSE BEGIN
  XlWrkBk.Close(FALSE);
  XlApp.Quit;
  CLEAR(XlApp);
  ERROR(Text004,SheetName);
END;

TE_RangeString:='A1:IV65535';
XlWrkSht.Range('TE_RangeString').ClearContents;


Was ist noch falsch?

Grüße

Re: Excel Sheet vor Export leeren

30. November 2009 16:25

EDING hat geschrieben:EDIT:
Leider bekomm ich folgende Fehlermeldung:
Bild

und habe folgenden QuelltexT:
Code:
TE_RangeString:='A1:IV65535';
XlWrkSht.Range('TE_RangeString').ClearContents;


Was ist noch falsch?

Grüße


Mir fällt auf das du den String in Anführungsstriche gesetzt hast, daher wird auch die Fehlermeldung resultieren.

Code:
XlWrkSht.Range('TE_RangeString').ClearContents;
statt:
Code:
XlWrkSht.Range(TE_RangeString).ClearContents;


Zum Löschen des Inhalts des gesamten Sheet kannst du auch folgenden Befehl nehmen:
Code:
lWrkSht.Cells.ClearContents;


Gruß,
winfy

Re: Excel Sheet vor Export leeren

30. November 2009 16:41

Oh mist...

das war ein echt dummer Fehler.. nicht gesehen...

Jetzt kommt folgendes... mit beiden Varianten:

Bild
Im Debugger springt er raus bei:
Code:
  CLEAR(XlApp);


nochma gesamter code:
Code:
BO_Clear := TRUE;
IF FileName = '' THEN
  ERROR(Text001);

IF SheetName = '' THEN
  ERROR(Text002);

IF NOT EXISTS(FileName) THEN
  ERROR(Text003,FileName);

IF NOT CREATE(XlApp,TRUE) THEN
  ERROR(Text000);

XlApp.Workbooks._Open(FileName);
XlWrkBk := XlApp.ActiveWorkbook;
i := 1;
EndOfLoop := XlWrkBk.Worksheets.Count;
WHILE (i <= EndOfLoop) AND (NOT Found) DO BEGIN
  XlWrkshts := XlWrkBk.Worksheets.Item(i);
  IF SheetName = XlWrkshts.Name THEN
    Found := TRUE;
  i := i + 1;
END;
IF Found THEN BEGIN
  XlWrkSht := XlWrkBk.Worksheets.Item(SheetName);
  TE_RangeString:='A1:IV65535';
  XlWrkSht.Range(TE_RangeString).ClearContents;
END ELSE BEGIN
  XlWrkBk.Close(FALSE);
  XlApp.Quit;
  CLEAR(XlApp);
  ERROR(Text004,SheetName);
  BO_Clear := FALSE;
END;

IF BO_Clear THEN BEGIN
  XlWrkBk.Close(FALSE);
  XlApp.Quit;
  CLEAR(XlApp);
END;


gelöscht worden scheint sie aber zu sein..

Re: Excel Sheet vor Export leeren

1. Dezember 2009 10:35

Kann so auf den ersten Blick keinen Fehler erkennen.
Welche Automation Variablen von welchem Subtype hast du angelegt?

Gruß,
winfy

Re: Excel Sheet vor Export leeren

1. Dezember 2009 17:28

Habe den Fehler gefunden.. war irgendwo in meiner Tabelle...

Habe nun aber noch eine Frage =P

Kann man auch andere Formatierungen, wie z.B. farbliche Hintergründe entfernen? Die bleiben nämlich bei diesem ClearContents erhalten.

Grüße

Re: Excel Sheet vor Export leeren

1. Dezember 2009 17:32

EDING hat geschrieben:Habe den Fehler gefunden.. war irgendwo in meiner Tabelle...

Habe nun aber noch eine Frage =P

Kann man auch andere Formatierungen, wie z.B. farbliche Hintergründe entfernen? Die bleiben nämlich bei diesem ClearContents erhalten.

Grüße


Probier mal:
Code:
XlWrkSht.Cells.ClearFormats;


Gruß,
winfy

Re: Excel Sheet vor Export leeren

1. Dezember 2009 17:35

Vielen Dank winfy.

Nun klappt alles so,wie ich es brauche =)

Grüße