Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1224to1228
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

Makro erweitern

Makro erweitern
Franky
Hallo Josef und alle anderen zusammen !
Diese Aufgabe richtet sich vorwiegend an Josef Ehrensberger, der mir dieses Makro programmiert hat.
Dieses Makro, was mir Bereiche anhand einer Datumsüberprüfung in eine Zieltabelle kopiert, möchte ich erweitern:
Es sollen 10 unterschiedliche Bereiche aus der Mastertabelle in die Zieltabelle kopiert werden.
z.B.:
1. ("A2:M2")
2. ("B3:B15")
3. ("C4:C20")
4. ("D5:D29")
5. ("E6:E20")
6. ("F7:F20")
7. ("G8:G20")
8. ("H9:H30")
9. ("I10:I40")
10.("J11:J50")
Bisher habe ich jeweils 10 Markos mit den unterschiedlichen Bereichen einzeln aufgerufen. Das ist aber ziemlich umständlich.
Sicherlich könnte man alle 10 Makros zusammenpacken in ein Modul, und mittels Call - Anweisung aufrufen. Das ist aber auch nicht passend, weil man 10 mal das gleiche Datum eingeben muss.
Vielleicht kann man das Makro so umgestalten mit einer Case-Anweisung, wo man die 10 unterschiedlichen Bereiche festlegt. Wenn man dann das Makro startet, braucht man nur einmal das Datum eintragen und alle unterschiedlichen 10 Bereiche werden kopiert.
Wer hat eine Idee?
Vielen Dank im voraus !
Franky
Sub Inhalte_einfügen2()
Dim objMaster As Worksheet, objTarget As Worksheet
Dim lngDate As Long
Dim vntTarget As Variant
Dim bolCopy As Boolean
lngDate = Application.InputBox("Bitte Datum eingeben", "Daten Kopieren", _
Format(Date, "dd.MM.yyyy"), Type:=1)
Set objMaster = ThisWorkbook.Sheets("Mastertabelle")
Set objTarget = Workbooks("liste.xlsx").Sheets("Zieltabelle")
With objMaster
If IsDate(CDate(lngDate)) Then
vntTarget = Application.Match(lngDate, objTarget.Columns(1), 0)
If IsNumeric(vntTarget) Then
bolCopy = Application.CountA(objTarget.Range(objTarget.Cells(vntTarget, 2), _
objTarget.Cells(vntTarget, 14))) = 0
If Not bolCopy Then bolCopy = MsgBox("In der Zieltabelle sind bereits Werte vorhanden!"  _
_
& _
vbLf & "Wollen Sie die Werte überschreiben?", vbQuestion + vbYesNo, "Hinweis") =  _
vbYes
If bolCopy Then
.Range("A2:M2").Copy
objTarget.Cells(vntTarget, 2).PasteSpecial xlPasteValues
Application.CutCopyMode = False
objTarget.Range(objTarget.Cells(vntTarget, 2), _
objTarget.Cells(vntTarget, 14)).Replace What:="0", Replacement:="", _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
MsgBox "Werte wurden erfolgreich übertragen!", vbInformation, "Hinweis"
End If
Else
MsgBox "Datum in Zieltabelle nicht gefunden" & vbLf & "Werte wurden nicht übertragen!",  _
_
_
vbExclamation, "Hinweis"
End If
Else
MsgBox "Datumseingabe ungültig!" & vbLf & "Werte wurden nicht übertragen!", vbExclamation, _
_
_
"Hinweis"
End If
End With
Set objMaster = Nothing
Set objTarget = Nothing
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro erweitern
06.08.2011 02:15:29
fcs
Hallo Franky,
man kann die 10 Bereiche als Array in eine Variable schreiben und dann in einer For-Next-Schleife abarbeiten. In einem Select-Case-Block kannst du dann die Aktioen festlegen, die für den jeweiligen Block ausgeführt werden sollen. Wahrscheinlich ändert sich immer nur die Zielspalte für den Kopiervorgang.
Gruß
Franz
Option Explicit
Sub Inhalte_einfügen2()
Dim objMaster As Worksheet, objTarget As Worksheet
Dim lngDate As Long
Dim vntTarget As Variant
Dim bolCopy As Boolean
Dim vntBereiche As Variant, intK As Integer
lngDate = Application.InputBox("Bitte Datum eingeben", "Daten Kopieren", _
Format(Date, "dd.MM.yyyy"), Type:=1)
Set objMaster = ThisWorkbook.Sheets("Mastertabelle")
Set objTarget = Workbooks("liste.xlsx").Sheets("Zieltabelle")
With objMaster
If IsDate(CDate(lngDate)) Then
vntTarget = Application.Match(lngDate, objTarget.Columns(1), 0)
If IsNumeric(vntTarget) Then
bolCopy = Application.CountA(objTarget.Range(objTarget.Cells(vntTarget, 2), _
objTarget.Cells(vntTarget, 14))) = 0
If Not bolCopy Then
bolCopy = MsgBox("In der Zieltabelle sind bereits Werte vorhanden!" & _
vbLf & "Wollen Sie die Werte überschreiben?", _
vbQuestion + vbYesNo, "Hinweis") = vbYes
End If
If bolCopy Then
vntBereiche = Array("A2:M2", "B3:B15", "C4:C20", "D5:D29", "E6:E20", _
"F7:F20", "G8:G20", "H9:H30", "I10:I40", "J11:J50")
For intK = LBound(vntBereiche) To UBound(vntBereiche)
.Range(vntBereiche(intK)).Copy
Select Case vntbereiche(intK)
Case "A2:M2"
objTarget.Cells(vntTarget, 2).PasteSpecial xlPasteValues
Application.CutCopyMode = False
objTarget.Range(objTarget.Cells(vntTarget, 2), _
objTarget.Cells(vntTarget, 14)).Replace What:="0", Replacement:="", _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False,  ReplaceFormat:=False
Case "B3:B15"
Case "C4:C20"
'usw.
End Select
Next
MsgBox "Werte wurden erfolgreich übertragen!", vbInformation, "Hinweis"
End If
Else
MsgBox "Datum in Zieltabelle nicht gefunden" & vbLf _
& "Werte wurden nicht übertragen!", _
vbExclamation, "Hinweis"
End If
Else
MsgBox "Datumseingabe ungültig!" & vbLf & _
"Werte wurden nicht übertragen!", vbExclamation, "Hinweis"
End If
End With
Set objMaster = Nothing
Set objTarget = Nothing
End Sub

Anzeige
AW: Makro erweitern
06.08.2011 09:13:36
Franky
Hallo Franz !
Vorerst vielen Dank für Deine Lösung ! - Genauso habe ich mir das vorgestellt. Ich werde nachher Deine
Lösung in meine Produktivumgebung einbauen. Ich melde mich später noch einmal, ob alles funktioniert hat.
Vielen Dank für´s erste.
Franky
AW: Makro erweitern
06.08.2011 12:16:26
Franky
Hallo Franz!
Perfekt ! - Alles super ! - Vielen Dank für Deine Lösung !
Franky

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige