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

Makro verfeinern

Makro verfeinern
31.03.2003 16:40:47
Rolf St.
Hallo !
Kann mir jemand folgendes Makro verfeinern. Habe es mit dem Recorder aufgezeichnet.

Sub akaktuell31032003()
'
Range("F2:F1000").Select
Selection.ClearContents
Range("D2:E2").Select
Selection.Copy
ActiveSheet.Paste
Range("D3:E3").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet.Paste
Range("D4:E4").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet.Paste
Range("D5:E5").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet.Paste
Range("D6:E6").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet.Paste
Range("D2").Select
End Sub

folgendes Makro funktioniert nicht:

Sub akaktuelltest()
'
Range("F2:F1000").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("D2:E1000").Select
Selection.Copy
Range("D2:E1000").Select
Application.CutCopyMode = False
Selection.Copy
ActiveSheet.Paste
End Sub


Beispiel:
In Zelle D2 gebe ich den Buschstaben m ein und in E2 gebe ich ein 62 ein. Das Makro berechnet durch Überprüfung mit anderen Tabellenblättern das Ergebnis und trägt dieses in F2 ein.

Wunsch:
Aus einer anderen Datei kopiere ich Inhalte nach Spalte D2:E1000
nun möchte ich, das in jeder Zeile wieder das Ergebnic errechnet wird und nach Spalte F in die jeweilige Zelle eingetragen wird.
Ist dies möglich?


Vielen Dank für eure Hilfe!

Tschüß
Rolf



2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Makro verfeinern
31.03.2003 21:21:57
RainerW

Hi Rolf,

Range("F2:F1000").ClearContents
Range("D2:E2").Copy
ActiveSheet.Paste
Range("D3:E3").Copy
ActiveSheet.Paste
Range("D4:E4").Copy
ActiveSheet.Paste
Range("D5:E5").Copy
ActiveSheet.Paste
Range("D6:E6").Copy
ActiveSheet.Paste
Range("D2").Select
End Sub

Um weiter zu verfeinern, müßte man wissen, wo Copy eingefügt wird.
Aber so hast du schon mal einen Anhaltspunkt.
----------------------------------------------------------
"folgendes Makro funktioniert nicht:" - Und warum nicht?

Range("F2:F1000").ClearContents
Range("D2:E1000").Copy ' hier Copy
Range("D2:E1000").Select ' 2*kopieren? und nix einfügen?
Application.CutCopyMode = False ' Kopiermodus aufgehoben
Selection.Copy ' erneut Copy
ActiveSheet.Paste ' zu Fuß eingefügt, gerade da
End Sub ' wo Zellzeiger steht?

Zu deinem Wunsch:
warum kopierst du die Formel nicht mit, oder passt das BerechnenMakro für das neue Tabellenblatt an?
Aber eigentlich werde ich aus deinem Wunsch nicht so recht schlau.
Willst du, das ein Wert aus einer Zelle in einer anderen Zelle in einer anderen Mappe angezeigt wird?

Gruß Rainer





Anzeige
Re: Makro verfeinern
01.04.2003 21:43:18
Rolf St

Hallo Rainer!
Vielen Dank für deine Hilfe!

folgendes Makro läuft in Tabellenblatt Stammdaten

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngZeile As Long
Dim intCounter As Integer
Dim varSuche As Variant, varErgebnis1 As Variant
Dim varErgebnis2 As Variant, varErgebnis3 As Variant
'Makro wird nur bei Eingaben in Spalten D, E und I ausgeführt.
If Target.Column < 4 Then Exit Sub
If Target.Column >= 6 And Target.Column <= 8 Then Exit Sub
If Target.Column > 9 Then Exit Sub
If Target.Column < 9 Then
'Wenn D oder E leer ist, wird der Bereich F:H gelöscht
'und das Makro nicht weiter ausgeführt.
If IsEmpty(Range("D" & Target.Row)) Or _
IsEmpty(Range("E" & Target.Row)) Then
Application.EnableEvents = False
If Selection.Count = 1 Then
'Wurde nur 1 Zelle gelöscht, wird der Bereich F:H in
'der betreffenden Zeile gelöscht.
Range("F" & Target.Row & ":F" & Target.Row).ClearContents
Else 'Wurde ein Zellbereich gelöscht, wird auch der gesamte
'Bereich in F:H gelöscht
Range("F" & ActiveCell.Row & ":F" & ActiveCell.Row + _
Selection.Rows.Count - 1).ClearContents
End If
Application.EnableEvents = True
Exit Sub
'Wenn beide Werte in D und E numerisch sind, wird die Kombination
'der beiden Werte auch als Zahl behandelt.
ElseIf IsNumeric(Range("D" & Target.Row)) And _
IsNumeric(Range("E" & Target.Row)) Then
varSuche = (Range("D" & Target.Row) & Range("E" & Target.Row)) * 1
'Wenn einer der beiden Werte Text ist, wird auch die Kombination
'der beiden Werte als Text behandelt.
Else: varSuche = Range("D" & Target.Row) & Range("E" & Target.Row)
End If
With Worksheets("Klasseneinteilung").Range("A:A")
'Ist der Suchbegriff nicht vorhanden, wird zum ErrorHandler
'verzweigt und eine Fehlermeldung angezeigt.
On Error GoTo ErrorHandler
'Gibt es den Suchbegriff in Tabelle2, Spalte A wird
'die Zeilennummer ermittelt,
lngZeile = WorksheetFunction.Match(varSuche, .Range("A:A"), 0)
'der dazugehörige Wert aus Spalte B ausgelesen,
varErgebnis1 = .Range("B" & lngZeile).Value
'der dazugehörige Wert aus Spalte C ausgelesen,
' varErgebnis2 = .Range("C" & lngZeile).Value
'der dazugehörige Wert aus Spalte C ausgelesen.
' varErgebnis3 = .Range("D" & lngZeile).Value
If Selection.Count = 1 Then
'In Tabelle1, Spalten F, G und H (gleiche Zeile) eintragen.
Range("F" & Target.Row).Value = varErgebnis1
' Range("G" & Target.Row).Value = varErgebnis2
' Range("H" & Target.Row).Value = varErgebnis3
Else 'Wird mit Strg+Enter in einen Bereich eingegeben, werden
'die Ergebnisse aus Tabelle2 in jeder Zeile eingetragen.
For intCounter = 1 To Selection.Rows.Count
Range("F" & ActiveCell.Row - 1 + intCounter).Value _
= varErgebnis1
' Range("G" & ActiveCell.Row - 1 + intCounter).Value _
' = varErgebnis2
' Range("H" & ActiveCell.Row - 1 + intCounter).Value _
' = varErgebnis3
Next intCounter
End If
Exit Sub
End With
Else 'Bei Eingabe in Spalte I
'Ist der Suchbegriff nicht vorhanden, wird zum ErrorHandler_I
'verzweigt, eine Fehlermeldung angezeigt, die Eingabezelle
'ausgewählt und die Prozedur verlassen.
On Error GoTo ErrorHandler_I
'Bei einzelner Zelle wird die Prozedur abgebrochen, wenn diese
'Zelle leer ist, sonst wird die Eingabe als Suchbegriff fest-
'gelegt. Bei Mehrfachauswahl wird die Prozedur abgebrochen,
'wenn die aktive Zelle leer ist, sonst wird der Inhalt der
'aktiven Zelle als Suchbegriff festgelegt.
If Selection.Count = 1 Then
If IsEmpty(Target) Then Exit Sub
varSuche = Target.Value
Else: If IsEmpty(ActiveCell) Then Exit Sub
varSuche = ActiveCell.Value
End If
'Wird der Suchbegriff "varSuche" in Spalte E gefunden, passiert
'nichts weiter. Gibt es ihn nicht, wird durch die "On Error"-
'Anweisung eine Fehlermeldung angezeigt.
lngZeile = WorksheetFunction.Match(varSuche, Worksheets("Klasseneinteilung") _
.Range("E:E"), 0)
Exit Sub
End If
ErrorHandler:
MsgBox "Der Suchbegriff " & varSuche & " ist in " & _
"dem Tabellenblatt Klasseneinteilung nicht vorhanden!", vbCritical
Target.Select
Exit Sub
ErrorHandler_I:
MsgBox "Der Suchbegriff " & varSuche & " ist in " & _
"dem Tabellenblatt Klasseneinteilung nicht vorhanden!", vbCritical
Target.Select
End Sub


Ich möchte das eine Teil des Makros ausgeführt wird, wenn
ich mehrere Inhalte in Spalte D und E einfüge soll Spalte F aktualisiert werden.

Tschüß
Rolf

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige