Autor
|
Thema: Zeile in Tabelle kopieren, dabei Format, Dropdown und Formeln behalten (2265 mal gelesen)
|
BMTS Mitglied
Beiträge: 3 Registriert: 24.06.2015
|
erstellt am: 24. Jun. 2015 10:57 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich versuche eben mein erstes Excel-VBA zu schreiben. Das Ziel ist es einen Button zu haben, der mir eine neue Zeile einfügt, welche das gleiche Format, Dropdown-Menüs und Formeln besitzt wie die Zeile darüber, jedoch sollen keine Inhalte in den Zellen sein. Das kopieren und einfügen habe ich mit folgendem Code gelöst: Code: Sub CommandButton1_Click() If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData i = 8 Do i = i + 1 Loop While Cells(i, 1) <> "" If i = 9 Then Cells(i, 1) = 1 Else Cells(i, 1) = Cells(i - 1, 1) + 1 For j = 1 To 24 Cells(i - 1, j).Activate Selection.Copy Cells(i, j).Activate Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Next j End If End Sub
Das funktioniert auch erstmal hervorragend, sodass er immer unter die letzte ausgefüllte Zeile eine neue Zeile einfügt. Allerdings haben alle Zellen auch den Inhalt der Zelle davor. Wie lösche ich hier nun gezielt im letzten Schritt die Inhalte heraus, behalte jedoch die Formeln? Ich habe mit
Code: Selection.SpecialCells(xlCellTypeConstants).ClearContents
herumprobiert, aber dabei löscht er mir direkt alle Inhalte im ganzen Worksheet und noch dazu bricht er beim einfügen der neuen Zeile ab! Ich müsste eigentlich nur nach dem einfügen der neuen Zeile sagen: Lösche in der neuen Zeile alle Inhalte, behalte aber Zellen mit Formeln bei. Jemand einen Tip wie das korrekt in den obigen Code implementiert wird?
Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 24. Jun. 2015 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für BMTS
Hallo BMTS, Willkommen im Forum So ganz klar ist mir Dein Anliegen noch nicht. Ist denn gewährleistet dass unter den eingefügten Werten keine Daten mehr vorhanden sind? Ansonsten wäre eine Vorgehensweise wie diese sicherer:
Code:
Rows("35:35").Select Selection.Copy Rows("36:36").Select Selection.Insert Shift:=xlDown
Zum Löschen von Wertefeldern könntest Du dieses verwenden: Code:
For j = 1 To 24 If Not Cells(i, j).HasFormula = True Then Cells(i, j).ClearContents End If Next j
Was meinst Du mit Dropdown-Menüs in der Zeile ? Evtl. kannst Du ja ein Beispielarbeitsblatt hochladen Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BMTS Mitglied
Beiträge: 3 Registriert: 24.06.2015
|
erstellt am: 24. Jun. 2015 14:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, vielen Dank für deine Antwort und danke fürs Willkommen heißen Ja unter den eingefügten Werten sind keine Daten mehr vorhanden, dort ist alles leer. Wo genau binde ich diese For-Anweisung in meinen obigen code ein? Etwa so:
Code:
Sub CommandButton1_Click() If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData i = 8 Do i = i + 1 Loop While Cells(i, 1) <> "" If i = 9 Then Cells(i, 1) = 1 Else Cells(i, 1) = Cells(i - 1, 1) + 1 For j = 1 To 24 Cells(i - 1, j).Activate Selection.Copy Cells(i, j).Activate Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False For j = 1 To 24 If Not Cells(i, j).HasFormula = True Then Cells(i, j).ClearContents End If Next j Next j End If End Sub
Viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 24. Jun. 2015 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für BMTS
Hi, schon mal den Code probiert? Im Prinzip ja aber es geht auch einfacher wenn Du beim Zellenweisen kopieren bleiben möchtest Code:
Sub CommandButton1_Click() If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData i = 8 Do i = i + 1 Loop While Cells(i, 1) <> "" If i = 9 Then Cells(i, 1) = 1 Else Cells(i, 1) = Cells(i - 1, 1) + 1 For j = 1 To 24 Cells(i - 1, j).Activate Selection.Copy Cells(i, j).Activate Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False '' For j = 1 To 24 ' die Schleife muß ja nicht doppelt sein und 576 mal ' durchlaufen werden '' Hier bist Du ja schon an der richtigen Stelle If Not Cells(i, j).HasFormula = True Then Cells(i, j).ClearContents End If '' Next j ' Schleife hier überflüssig Next j End If End Sub
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BMTS Mitglied
Beiträge: 3 Registriert: 24.06.2015
|
erstellt am: 24. Jun. 2015 15:10 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|