Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
868to872
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
868to872
868to872
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Formeln übernehmen

VBA Formeln übernehmen
08.05.2007 20:19:00
Peter
Hallo alle zusammen,
in meinem alten Code wurden die Formeln in die nächste Zeile übernommen. Im neuen Code nicht mehr. Wie man das im neuen Code schreiben müßte weiß ich nicht. Kann mir jemand helfen?
alter Code: (nur Ausschnitt)
Range("A:A").Find("", after:=[A7]).Activate
ActiveCell.Offset(-1, 0).EntireRow.Copy Destination:=ActiveCell
ActiveCell.EntireRow.SpecialCells(xlCellTypeConstants).ClearContents
ActiveCell.Value = CDate(Me.txtDatum)
ActiveCell.Offset(0, 1).Value = CDate(Me.txtfaellig_zum)
ActiveCell.Offset(0, 2).Value = Me.cboArt
ActiveCell.Offset(0, 3).Value = Me.txtGegenseite
ActiveCell.Offset(0, 4).Value = Me.txtZahlungsgrund
neuer Code: nur Ausschnitt)
Dim nz As Integer
nz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(nz - 1).Copy
Cells(nz, 1).PasteSpecial Paste:=xlPasteFormats
Cells(nz, 1).Value = CDate(Me.txtDatum)
Cells(nz, 2).Value = CDate(Me.txtfaellig_zum)
Cells(nz, 3).Value = Me.cboArt
Cells(nz, 4).Value = Me.txtGegenseite
Cells(nz, 5).Value = Me.txtZahlungsgrund
Danke
Grüße aus Berlin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formeln übernehmen
08.05.2007 20:27:46
Kai
Hallo Peter,
ohne es probiert zu haben, ich würde sagen xlPasteFormats ist der Bösewicht. Da werden doch nur die Formate übertragen, nicht die Formeln. Mit xlAll würdest du auch die Formeln mitbekommen, wenn sie denn in den da kopierten Zellen stehen.
Schon gelöst oder ist es doch anders als ich auf den ersten Blick dachte?
Grüße, Kai

Also, ich sehe da nicht viel Sinn,...
09.05.2007 00:29:00
Luc:-?
...Peter!
Kai hat schon recht, wenn er das SpecialPaste verantwortlich macht, aber ich vermute ja, dass das auch deine Absicht ist, nur die Formate zu übertragen. Macht ja evtl auch Sinn. Ein normales Paste im alten Code überträgt alles. Im alten Code kopierst du die Vorzeile und überträgst sie in Gänze in die Zeile ab aktZelle und überschreibst anschließend die Werte der Folgespalten in der Zeile. Das düfte meines Erachtens nur fkt, wenn da keine Formeln stehen. Im neuen Code machst du das Gleiche, nur dass dort jetzt definitiv keine Formeln stehen, wodurch das wahrscheinlich auch klappt. Wenn in den Folgespalten ab 6 aber Formeln aus der Vorzeile stehen sollen, ist das jetzt auch nicht der Fall, die müsstest du dann noch separat übernehmen (...Formula=...Formula)! Also, irgendwie scheint der alte Code sinnvoller zu sein, wenn er denn richtig fkt hat.
Gruß Luc :-?

Anzeige
AW: VBA Formeln übernehmen
09.05.2007 07:58:04
Erich
Hallo Peter,
was genau möchtest du kopieren? Nur die Formeln oder auch die Formate?
Hier beide Möglichkeiten:

Sub tst1()              ' kopiert alles (Formeln + Formate)
Dim nz As Integer
nz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(nz - 1).Copy Cells(nz, 1)
End Sub
Sub tst2()              ' kopiert nur Formeln, keine Formate)
Dim nz As Integer
nz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(nz, 1).PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
Cells(nz, 1).Select
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA Formeln übernehmen
09.05.2007 18:12:50
Peter
Hallo,
in meinem alten Code habe ich alles kopiert und dann in den Zellen den Inhalt gelöscht in denen Werte standen.
Jetzt habe ich mich dazu entschieden nur die Formeln zu kopieren.
Dazu mußte ich deinen Code noch ein wenig abwandeln.
Dim nz As Integer
nz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Rows(nz - 1).Copy
Cells(nz, 1).PasteSpecial Paste:=xlPasteFormulas
Danke für die Hilfe
Grüße aus Berlin

AW: VBA Formeln übernehmen
09.05.2007 19:44:00
Erich
Hallo Peter,
vielleicht ist noch eine Klarstellung nützlich:
PasteSpecial Paste:=xlPasteFormulas kopiert nicht nur Formeln, sondern auch Konstanten.
Wenn du die konstanten Werte vom Kopieren ausnehmen, also nur "echte" Formeln übernehmen willst,
ginge das z. B. so:

Sub tst3()              ' kopiert nur Formeln, keine Konstanten, keine Formate)
Dim nz As Integer, rngZ As Range
nz = Cells(Rows.Count, 1).End(xlUp).Row + 1
For Each rngZ In Rows(nz - 1).SpecialCells(xlCellTypeFormulas)
rngZ.Copy
Cells(nz, rngZ.Column).PasteSpecial Paste:=xlPasteFormulas
Next
Application.CutCopyMode = False
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA Zeile überprüfen, MsgBox anzeigen
10.05.2007 14:10:33
Peter
Hallo Erich,
du hast recht, danke.
Ich hätte gleich noch ein Anliegen, vielleicht kannst du mir dabei auch helfen.
Der folgende Code soll:
1. überprüfen ob eine (und auch nur eine) Zeile ausgewählt (markiert) ist
2. wenn nicht dann MsgBox
3. dann soll die Zeile ab Spalte 6 nach Konstanten durchsucht werden (es können sich bis zu 4 Konstanten in einer Zeile befinden
4. wenn sich in Spalte 6 oder 7 eine Konstante befindet soll in einer MsgBox "DA/Allgemeines Lewa" erscheinen ,wenn.......
Spalte 14 oder 15, "DA/Allgemeines Euro"
Spalte 18 oder 19, "DA/Kontokorrent Lewa"
Spalte 22 oder 23, "DA/Kontokorrent Euro"
usw.
Wenn in all diesen Spalten (wie gesagt, in max 4 können Konstanten stehen) Konstanten befinden soll in der MsgBox, wenn man mein obiges Bsp. nimmt der folgende Text in der MsgBox erscheinen (untereinander):
"DA/Allgemeines Lewa"
"DA/Allgemeines Euro"
"DA/Kontokorrent Lewa"
"DA/Kontokorrent Euro"
mein Versuch:

Private Sub Konto_Click()
SpeedUp (True)
If ActiveCell.Column = 1 And IsDate(ActiveCell) Then 'wenn Zelle in Spalte A aktiviert, bis  _
jetzt mein Ersatz für eine markierte Zeile
If ActiveCell.Columns(6)  0 Or ActiveCell.Columns(7)  0 Then
If ActiveCell.Columns(14)  0 Or ActiveCell.Columns(15)  0 Then
If ActiveCell.Columns(18)  0 Or ActiveCell.Columns(19)  0 Then
If ActiveCell.Columns(22)  0 Or ActiveCell.Columns(23)  0 Then
MsgBox 'keine Ahnung
End If
End If
End If
End If
Else
MsgBox "Sie haben keine Zeile markiert!"
End If
SpeedUp (False)
End Sub


Grüße aus Berlin

Anzeige
AW: VBA Zeile überprüfen, MsgBox anzeigen
10.05.2007 15:22:00
Erich
Hallo Peter,
das gehört wohl kaum in diesen Thread - jetzt gehts doch um ein ganz neues Thema.
Warum soll der Benutzer unbedingt eine ganze Zeile markieren? Für diese Anwendung reicht es aus,
wenn die Zeile eindeutig klar ist, also nicht Zellen aus mehreren Zeilen markiert sind.
Ein Klick in eine Zelle mit Datum in Spalte A würde m. E. ausreichen.
Cells(lngZ, 6) <> 0 trifft übrigens auch zu, wenn in der Zelle ein Text steht.
Probier mal diese beiden Versionen:

Option Explicit
Private Sub Konto_Click()
Dim lngZ As Long, strM As String
If Selection.Areas.Count > 1 Or Selection.Rows.Count > 1 Then
strM = "Sie haben Zellen in mehr als einer Zeile markiert!"
Else
lngZ = ActiveCell.Row
If Not IsDate(Cells(lngZ, 1)) Then
strM = "In Spalte A der ausgewählten Zeile steht kein Datum!"
Else
If Cells(lngZ, 6)  0 Or Cells(lngZ, 7)  0 Then strM = "DA/Allgemeines Lewa"
If Cells(lngZ, 14)  0 Or Cells(lngZ, 15)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Allgemeines Euro"
If Cells(lngZ, 18)  0 Or Cells(lngZ, 19)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Kontokorrent Lewa"
If Cells(lngZ, 22)  0 Or Cells(lngZ, 23)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Kontokorrent Euro"
End If
End If
If strM > "" Then MsgBox strM
End Sub
Private Sub Konto_Click2()
Dim lngZ As Long, strM As String
'SpeedUp (True)                              '  1 Or Selection.Rows.Count > 1 Then
strM = "Sie haben Zellen in mehr als einer Zeile markiert!"
ElseIf ActiveCell.Column > 1 Then
strM = "Bitte markieren Sie per Klick" & vbLf & vbLf _
& "links auf die Zeilennummer " & ActiveCell.Row
ElseIf Selection.Address  ActiveCell.EntireRow.Address Then
MsgBox "Sie haben nicht die ganze Zeile markiert!"
ElseIf Not IsDate(ActiveCell) Then
strM = "In Spalte A der ausgewählten Zeile steht kein Datum!"
Else
lngZ = ActiveCell.Row
If Cells(lngZ, 6)  0 Or Cells(lngZ, 7)  0 Then strM = "DA/Allgemeines Lewa"
If Cells(lngZ, 14)  0 Or Cells(lngZ, 15)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Allgemeines Euro"
If Cells(lngZ, 18)  0 Or Cells(lngZ, 19)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Kontokorrent Lewa"
If Cells(lngZ, 22)  0 Or Cells(lngZ, 23)  0 Then _
strM = IIf(strM > "", strM & vbLf, "") & "DA/Kontokorrent Euro"
End If
If strM > "" Then MsgBox strM
'SpeedUp (False)
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: VBA Zeile überprüfen, MsgBox anzeigen
10.05.2007 17:53:00
Peter
Hallo Erich,
wunderbar!
Danke
Grüße aus Berlin

Danke für Rückmeldung - Gerne! (oT)
10.05.2007 18:25:00
Erich

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige