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

Hilfe bei Codeanpassung

Hilfe bei Codeanpassung
Maris
Hallo zusammen,
mit folgendem Code habe ich immer Daten von 2 Tabs in ein Üebrsichtstab kopiert. Kriterium war die Kalender Woche in einer Zahl... also z.B. 26. Ich habe jetzt das Format geändert, da ich diese Tabelle fortlaufend mit Daten befüllen möchte, habe ich das Format um die Jahreszahl ergänzt, also 26/2011. Meine Tabelle hat auch diese Überschriften bekommen allerding funktioniert der Code jetzt nicht mehr.
Hier der alte Code:
Option Explicit
Sub prcStart()
Dim iWeek
iWeek = Application.InputBox("Week?" & vbLf & "99 for all Weeks", "Eingabe", , , , , , 1)
Select Case iWeek
Case False
Case 1 To 53, 99: prcDaten iWeek
End Select
End Sub
Sub prcDaten(ByVal iWeek As Integer)
Dim oDaten As Object, lngRow As Long, lngC, arrSheets, mySheet
Dim arrItems(1 To 20), arrWeeks, myWeek, arrTmp, i As Integer
Set oDaten = CreateObject("Scripting.Dictionary")
arrSheets = Array("Auto", "Motorräder")  'nach Bedarf erweitern
If iWeek = 99 Then
arrWeeks = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Sheets(arrSheets(0)). _
Range("B2:BA2"))) 'anpassen
Else
arrWeeks = Array(iWeek)
End If
For Each myWeek In arrWeeks
For Each mySheet In arrSheets
With Sheets(mySheet)
lngC = Application.Match(myWeek, .Rows(2), 0)
If Not IsError(lngC) Then
For lngRow = 20 To .Cells(Rows.count, 1).End(xlUp).Row Step 17
arrTmp = Split(.Cells(lngRow, 1), ">")
arrItems(1) = myWeek
arrItems(2) = arrTmp(0)
If UBound(arrTmp) > 0 Then
arrItems(3) = arrTmp(1)
End If
arrItems(4) = .Cells(lngRow, 1)
For i = 5 To 20
arrItems(i) = .Cells(lngRow + i - 4, lngC)
Next
oDaten(.Cells(lngRow, 1).Value & "_" & myWeek) = arrItems
Next
End If
End With
Next
Next myWeek
If oDaten.count > 0 Then
Application.ScreenUpdating = False
With Sheets("TotalsRaw")
.Cells(Rows.count, 1).End(xlUp).Offset(1).Resize(oDaten.count, 20) = _
WorksheetFunction.Transpose(WorksheetFunction.Transpose(oDaten.items))
End With
End If
End Sub
Beipieltabelle:
https://www.herber.de/bbs/user/76097.xls
Vielen lieben Dank schon mal im voraus!!!
Grüsse,
Maris

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Hilfe bei Codeanpassung
11.08.2011 00:37:07
fcs
Hallo Maris,
ich hab dir das Makro mal angepasst.
Da war doch etliches anzupassen, da du ja jetzt
a) statt Zahlen (1 bis 53 oder 99) Text (z.B. 27/2011) eingibst
b) die Ausgabe auf 2 verschiedene Tabellenblätter erfolgen soll mit Inhalten aus unterschiedlichen Zeilen
c) die Option Eingabe 99 (alle KW) eigentlich das Eintragen der KW in eine extra-Spalte und auf eigenen Tabellenblättern erfordert.
d) Eingabewerte für Wochen 1 bis 12 (z.B. 01/2011) beim Eintragen in die Rohdatenblätter in ein Datum umgewandelt wurden.
https://www.herber.de/bbs/user/76118.xls
Gruß
Franz
Anzeige
AW: Hilfe bei Codeanpassung
11.08.2011 11:08:45
Maris
Hallo fcs,
vielen Dank für deine Hilfe beim anpassen. Zu Buchstabe b gebe ich dir vollkommen recht... Hab leider die falsche Beispieldatei hochgeladen... Echt sorry, das ich dir soviel Arbeit gemacht habe.
Rohdaten_Kategorien
Rohdaten_Produkte
sollen nur auf die Kategorien Auto und Motorrad exportiert werden nicht aus den anderen Tabs heraus...
Um Sie wieder zurückzuholen hast du mir glaub ich auch mal einen Code geschrieben und da wirds nur in ein Tabellenblatt zurückkopiert (Also aus den KAtegorien zurück nach TotalsRaw):
Option Explicit
Sub prcStart()
Dim iWeek
iWeek = Application.InputBox("Week?" & vbLf & "99 for all Weeks", "Eingabe", , , , , , 1)
Select Case iWeek
Case False
Case 1 To 53, 99: prcDaten iWeek
End Select
End Sub
Sub prcDaten(ByVal iWeek As Integer)
Dim oDaten As Object, lngRow As Long, lngC, arrSheets, mySheet
Dim arrItems(1 To 20), arrWeeks, myWeek, arrTmp, i As Integer
Set oDaten = CreateObject("Scripting.Dictionary")
arrSheets = Array("Auto", "Motorräder")  'nach Bedarf erweitern
If iWeek = 99 Then
arrWeeks = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Sheets(arrSheets(0)). _
Range("B2:BA2")))
Else
arrWeeks = Array(iWeek)
End If
For Each myWeek In arrWeeks
For Each mySheet In arrSheets
With Sheets(mySheet)
lngC = Application.Match(myWeek, .Rows(2), 0)
If Not IsError(lngC) Then
For lngRow = 20 To .Cells(Rows.Count, 1).End(xlUp).Row Step 17
arrTmp = Split(.Cells(lngRow, 1), ">")
arrItems(1) = myWeek
arrItems(2) = arrTmp(0)
If UBound(arrTmp) > 0 Then
arrItems(3) = arrTmp(1)
End If
arrItems(4) = .Cells(lngRow, 1)
For i = 5 To 20
arrItems(i) = .Cells(lngRow + i - 4, lngC)
Next
oDaten(.Cells(lngRow, 1).Value & "_" & myWeek) = arrItems
Next
End If
End With
Next
Next myWeek
If oDaten.Count > 0 Then
Application.ScreenUpdating = False
With Sheets("TotalsRaw")
.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(oDaten.Count, 20) = _
WorksheetFunction.Transpose(WorksheetFunction.Transpose(oDaten.items))
End With
End If
End Sub
Tut mir wirklich leid :-(!!! Das ist die Datei:
https://www.herber.de/bbs/user/76127.xls
Der Makro befindet sich in modul1
DANKE für deine Hilfe!!!
Gruß,
Maris
Anzeige
AW: Hilfe bei Codeanpassung
11.08.2011 22:21:06
fcs
Hallo Maris,
ich hab in deiner Datei jetzt folgendes eingerichtet.
1. Makro, das die Daten aus "Rohdaten_Produkte" nach "Auto", "Motorräder" überträgt.
2. Makro, das die Daten aus "Rohdaten_Kategorien" nach "Auto", "Motorräder" überträgt.
Diese beiden Makros nutzen eine gemeinsame Basis, die über Parameter gesteuert wird.
3. Makro, das Daten aus "Auto", "Motorräder" nach "TotalsRaw" überträgt.
https://www.herber.de/bbs/user/76137.xls
Gruß
Franz
AW: Hilfe bei Codeanpassung
16.08.2011 11:50:23
Maris
Hi Fcs,
vielen Dank für deine Überarbeitung :-)! Der Code funktioniert soweit sehr gut!!! Ich hab noch ein paar kurze Fragen dazu:
ich habe gesehen, das der Code falls etwas nicht vorhanden ist selbständig kopiert... verstehe aber die Logik nicht...
Ich hatte mal eine Prüfroutine drin fall eine Kategorie nicht existiert dann hat er mir eine Fehlermeldung ausgespuckt... Wie macht das dein Code wenn eine Kategorie nicht vorhanden ist?
Sub DatenHolen(shQ As Worksheet, intSpalten As Integer, Optional intZVersatz As Integer,  _
Optional intSVersatz As Integer)
Dim shZ As Worksheet
Dim rngZelle As Range, rngFinden As Range
Dim lngS As Long, lngZ As Long
Dim intKW As Integer, intKWSpalte As Integer
intKW = Val(shQ.Range("C3"))
If intKW  53 Then MsgBox "KW """ & intKW & """ existiert nicht.": Exit Sub
Set shZ = Sheets("RawData_Products")
For Each rngZelle In shQ.Range(shQ.Cells(5, 1), shQ.Cells(Rows.count, 1).End(xlUp))
If rngZelle  "" Then
If shZ.Name  rngZelle Then
If Not SheetExist(rngZelle.Text) Then
rngZelle.Interior.ColorIndex = 3
Application.GoTo rngZelle
If MsgBox("Blatt """ & rngZelle & """ existiert nicht!", vbOKCancel, " _
Fehler") = vbCancel Then
Call Aktivieren
End
End If
Else
Set shZ = Sheets(rngZelle.Text)
Set rngFinden = shZ.Rows(2).Find(intKW, , xlValues, xlWhole)
If rngFinden Is Nothing Then MsgBox "KW """ & intKW & """ existiert in """ & _
shZ.Name & """ nicht.": Exit Sub
intKWSpalte = rngFinden.Column
End If
End If
Set rngFinden = shZ.Columns(1).Find(rngZelle.Offset(0, 1), , xlValues, xlWhole)
If rngFinden Is Nothing Then
rngZelle.Offset(0, 1).Interior.ColorIndex = 3
Application.GoTo rngZelle.Offset(0, 1)
If MsgBox("Eintrag """ & rngZelle.Offset(0, 1) & """ existiert nicht!",  _
vbOKCancel, "Fehler") = vbCancel Then
Call Aktivieren
End
End If
Else
rngFinden.Offset(1 + intZVersatz, intKWSpalte - 1).Resize(intSpalten, 1) =  _
WorksheetFunction.Transpose(rngZelle.Offset(0, 2 + intSVersatz).Resize(1, intSpalten))
End If
End If
Next
End Sub
Viele Grüsse,
Maris
Anzeige
AW: Hilfe bei Codeanpassung
16.08.2011 13:06:24
Maris
und ich brauch doch alle Kennzahlen...
leider klappt die Anpassung:
 'Kategoriedaten einlesen
For lngRow = 20 To .Cells(Rows.Count, 1).End(xlUp).Row Step 17
arrTmp = Split(.Cells(lngRow, 1), ">")
arrItems(1) = myWeek
arrItems(2) = arrTmp(0)
If UBound(arrTmp) > 0 Then
arrItems(3) = arrTmp(1)
End If
arrItems(4) = .Cells(lngRow, 1)
For i = 5 To 20
arrItems(i) = .Cells(lngRow + i - 4, lngC)
Next
oDaten(.Cells(lngRow, 1).Value & "_" & myWeek) = arrItems
Next
End If
End With
Next

nicht. wie Kriege ich alle Daten:
Anzahl1
Umsatz
Anzahl2
Interessenten
Kosten
Anteil1
Berechnung1
Produkte
Produkte mit Angeboten
Summe1
Summe2
Zugeornet
Lieferanten
Berechnung2
Berechnung3
Berechnung4
in TotalsRaW
Gruß,
Maris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige