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

Farben per VBA aus Quelldatei

Farben per VBA aus Quelldatei
10.03.2021 14:13:59
Bo
Hallo zusammen,
gibt es eine Möglichkeit Farben aus einer Quelldatei mittels VBA zu übertragen?
Hintergrund ist eine täglich neu aus SAP generierte Exceldatei, die mit der Version vom Vortag verglichen wird (diverse VLOOKUP Geschichten) und diese Vortagesdatei enthält teilweise Zellen mit Hintergrundfarben die sich auch in der neuen Datei wiederfinden sollen. Leider unterliegt dem erstmal keine mathematische Logik, sondern es müsste quasi auf Vergleichsebene stattfinden, nach dem Motto:
wenn Inhalte aus Zellen a1 und a2 aus quelldatei identisch mit Inhalten aus Zellen a1 und a2 in zieldatei (das muss im Zweifelsfall eine Zellenkombination sein, denn es finden sich z.B. Auftragsnummern mehrfach, und dann muss ein zweiter Bezug her), dann verwende gleiche Hintergrundfarbe wie in Zelle a2.
Ist das einigermassen verständlich?
Danke + Gruss
Boris

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

Betreff
Datum
Anwender
Anzeige
AW: Farben per VBA aus Quelldatei
12.03.2021 00:04:01
Yal
Hallo Boris,
Zu Frage 1: ja.
Zu Frage 2: mässig.
Das Problem in deinem Vorhaben ist die Stabilität der Vorgaben: Wo wird geprüft und wo wird gesetzt, bzw. sind diese beide Blöcke immer genau an dieselbe Stelle?
Entweder kommt es aus eine SAP AO, dann gibt es ein einigermassen pivotierten Bericht:
Für jede Wert gibt es ein festen Anzahl an Zeilüberschriftspalten und ein festen Anzahl an Spaltenüberschriftzeilen.
Oder kommt es aus einer Transaktion: Wenn das obere weiter gilt gut, ansonsten wird schwierig.
Zweitens: auch wenn die Anzahl an Daten immer anders sein können (unterschiedlich viel Zeilen und Spalten), sollten diese ein bleibende Struktur haben: Im Spaltenüberschrift erste Zeile z.B. immer das Jahr, im Spaltenüberschrift 2 z.B. immer der Monat, in Zeilenüberschrift erste Spalte z.B. Immer die Kostenstelle, in zweite Spalte z.B. immer das Konto, usw.
Daten sollten auch immer wieder an genau dieselbe Adresse anfangen (erste Datenzelle).
Dann muss Du die Spaltenüberschriftszeile finden, die immer bis zu Ende befüllt ist, und die Zeilenüberschriftsspalte, die immer bis zur Ende befüllt ist
So kannst Du den kompletten Datenberiech dynamisch erfassen.
Beispiel: erste Datenzelle immer im F12,
aber heute 100 Zeilen als Zeilenüberschrift und 40 Spalten als Spaltenüberschrift, also erstreckt sich dein Datenbereich in F12:AS112
Morgen 120 Zeilen und 42 Spalten: F12:AU132
Das muss Du für den Referenz-Datenbereich (da wo das Format gelesen werden) und für das Ziel-Datenbereich (da wo das Format eingesetzt wird) erfassen können.
Easy, oder?
Wenn Du das hast, helfen wir Dich für den Rest.
VG
Yal
Na jut. Bin heute gut drauf. So sieht den Anfang aus:
Private Type Bereich
ErsteZeile As Long
LetzteZeile As Long
ErsteSpalte As Long
LetzteSpalte As Long
End Type
Sub Datenbereich_ermitteln()
Const cEDZ = "F13" 'Erste DatenZelle
Const cIBSUZ = 11 'Immer befüllte Spaltenüberschriftszeile
Const cIBZUS = 5 'Immer befüllte Zeilenüberschriftsspalte
Const cASUZ = 4 'Anzahl Spaltenüberschriftszeilen (ab Datenzeile, egal ob leer oder nicht)
Const cAZUS = 4 'Anzahl Zeilenüberschirftsspalten (ab Datenspalte, egal ob leer oder nicht)
Dim wQ As Worksheet 'Quelle
Dim wZ As Worksheet 'Ziel
Dim Q_Dat As Bereich
Dim Q_SpÜ As Bereich
Dim Q_ZeÜ As Bereich
Dim Z_Dat As Bereich
Dim Z_SpÜ As Bereich
Dim Z_ZeÜ As Bereich
Set wQ = Workbooks("Report_20210209").Worksheets("KSt") 'Bericht Feb
Set wZ = Workbooks("Report_20210310").Worksheets("KSt") 'Bericht Mrz
' Datenbereich Quelle
Q_Dat.ErsteZeile = wQ.Range(cEDZ).Row
Q_Dat.LetzteZeile = wQ.Cells(100000, cIBZUS).End(xlUp).Row
Q_Dat.ErsteSpalte = wQ.Range(cEDZ).Column
Q_Dat.LetzteSpalte = wQ.Cells(cIBSUZ, 1000).End(xlToLeft).Column
' Spaltenüberschriftsbereich Quelle
Q_SpÜ.ErsteZeile = Q_Dat.ErsteZeile - cASUZ
Q_SpÜ.LetzteZeile = Q_Dat.ErsteZeile - 1
Q_SpÜ.ErsteSpalte = Q_Dat.ErsteSpalte
Q_SpÜ.LetzteSpalte = Q_Dat.LetzteSpalte
' Spaltenüberschriftsbereich Quelle
Q_ZeÜ.ErsteZeile = Q_Dat.ErsteZeile
Q_ZeÜ.LetzteZeile = Q_Dat.LetzteZeile
Q_ZeÜ.ErsteSpalte = Q_Dat.ErsteSpalte - cAZUS
Q_ZeÜ.LetzteSpalte = Q_Dat.ErsteSpalte - 1
Debug.Print "Datenbereich ist"
With Q_Dat
Debug.Print wQ.Range(wQ.Cells(.ErsteZeile, .ErsteSpalte), wQ.Cells(.LetzteZeile, . _
LetzteSpalte)).Address
End With
Debug.Print "Spaltenüberschriftsbereich ist"
With Q_SpÜ
Debug.Print wQ.Range(wQ.Cells(.ErsteZeile, .ErsteSpalte), wQ.Cells(.LetzteZeile, . _
LetzteSpalte)).Address
End With
Debug.Print "Spaltenüberschriftsbereich ist"
With Q_ZeÜ
Debug.Print wQ.Range(wQ.Cells(.ErsteZeile, .ErsteSpalte), wQ.Cells(.LetzteZeile, . _
LetzteSpalte)).Address
End With
End Sub
jetzt Du.

Anzeige
AW: Farben per VBA aus Quelldatei
12.03.2021 10:20:29
Bo
Hallo Yal,
danke - das muss ich mir erst mal in Ruhe anschauen und versuchen zu verstehen. Soweit danke. Die Spaltenanzahl bleibt übrigens immer identisch, die Zeilenanzahl kann in der Tat variieren.
Die Workbookbezeichnung kann ich denke ich nicht festlegen, da die Namen und Speicherorte variabel sind - aber wie gesagt - ich muss das erstmal verdauen.
Merci + Gruss
Boris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige