Microsoft Excel

Herbers Excel/VBA-Archiv

Einfuegposition in Tabelle festlegen

Betrifft: Einfuegposition in Tabelle festlegen von: Joachim Guenthner
Geschrieben am: 22.08.2014 11:16:24

Hallo zusammen,

ich bin wirklich kein VBA Experte, benoetige aber eine VBA-Loesung, da herkoemmliche Vorgehensweisen versagen. Ich habe schon viele sehr viele gute Beitraege in diesem Forum gelesen, die mir bisher auch immer weitergeholfen haben und ich finde es beeidruckend, wie sich hier gegenseitig geholfen wird. Fuer mein aktuelles Problem habe ich jedoch bisher keinen Ansatz gefunden.

Ich arbeite gerade an einer VBA Loesung, um woechentliche Produktionszahlen (u.a. Output, Produktivitaet, etc.) in entsprechende Jahresuebersichten zu kopieren. Die Problemstellung ist bei allen zu uebertragenden Produktionszahlen die gleiche, weshalb ich sie hier einmal fuer "Output" darstellen werde.

Nun zur Problemstellung: In einem Sheet ("KPI Figures") der Arbeitsmappe sammle ich alle Produktionszahlen einer Woche (Output Woche xx)
In diesem Sheet steht in D5 die Kalenderwoche, in G14 der geplante Output, in G15 der aktuelle Output (jeweils als Zahlenwerte)
Am Ende der Woche moechte ich dann durch das Klicken eines Buttons diese woechentlichen Produktionsdaten fuer Output in ein entsprechendes separates Sheet "YTD Output" kopieren.

Dieses "YTD Output" sheet ist dabei so aufgebaut, dass es eine Tabelle enthaelt, die die Wochen 1-26 im Bereich D8- AC10 und die Wochen 27-52 unmittelbar darunter im Bereich D12-AC14 abbildet. Innerhalb dieser Bereiche stellt die 1.Zeile die Kalenderwoche, 2.Zeile den geplanten Output und die 3. Zeile den aktuellen Output dar.

Ziel ist es nun, dass nach druecken des Buttons das Makro im "KPI Figures" Sheet schaut in welcher Woche wir uns befinden (also den Wert erkennt der in D5 steht), und gleichzeitig die Outputwerte aus G14 und G15 kopiert. Danach ins Sheet "YTD Output" geht dort in der Tabelle die Woche sucht, die mit der Woche aud D5 uebereinstimmt und dort in die jeweiligen zwei Zeilen darunter die Werte aus G14 und G15 einfuegt.

Das gleiche soll dann identsich fuer die anderen Produktionszahlen wie z.B. Productivity etc. gemacht werden.

Ich habe schon viel herumprobiert, aber leider noch keine anstaendige Loesung gefunden. Bisher arbeite ich mit einem Makro, das immer die naechste freie Zelle in einer extra Datenbank findet dort die Werte einfuegt und dann in meine TYD Output Tabelle einen Zellbezug herstellt. Leider ist dies eine sehr wacklige Angelegenheit, da viele Personen auf diese Arbeitsmappe Zugriff haben und damit in Zukunft arbeiten muessen.

Waere euch sehr dankbar wenn mir jemand von euch weiterhelfen koennte.

Vielen Dank vorab!!

Viele Gruesse und einen schoenen Tag
Joe

  

Betrifft: BeiSpielMappe ? von: Erich G.
Geschrieben am: 22.08.2014 11:51:30

Hi Joe,
du möchtest sicher nicht, dass sich alle potentiellen Antworter die Mühe machen, deine Excelmappe nachzubauen.
Ich werde das nicht tun.

Wenn du schnelle und vielleicht auch gute Antworten haben möchtest, kann ich dir nur empfehlen,
eine kleine anonymisierte BeiSpielMappe hochzuladen, in der alle relevanten Blätter und einige Daten,
aber auch der bisherige Code enthalten sind.
Natürlich sollte zu sehen sein, wie das Ergebnis aussehen soll.

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


  

Betrifft: AW: BeiSpielMappe ? von: Joachim Guenthner
Geschrieben am: 22.08.2014 12:57:06

Hallo Erich,

nein, ich verlange natuerlich nicht von euch, dass ihr die Mappe selbststaendig nachbaut.

habe hier eine Beispielmappe hochgeladen.

https://www.herber.de/bbs/user/92238.xlsm

Momentan funktioniert das Makro wie gesagt so, dass es nach druecken des Buttons die Daten in die Sheets "Output Datenbank", "Productivity Datenbank" etc. einfuegt und zwar auf die Weise, dass in den jeweiligen Sheets die naechste freie Spalte gesucht wird und dort der Wert eingefuegt wird. Danach sind die eigtlichen Zielsheet "YTD Output" etc. mit diesen Datenbanken verknuepft.

Ich moechte aber von diesem Umweg ueber die Datenbanken weg und einen direkten Weg finden. Ich hoffe das ist aus der Problemstellung aus meinem ersten Beitrag von heute morgen klar geworden.

Waere dir wirklich dankbar, wenn du da irgendwas weisst.

Vielen Dank vorab!

Viele Gruesse
Joe


  

Betrifft: Codevorschlag von: Erich G.
Geschrieben am: 23.08.2014 11:17:19

Hi Joachim,
da lässt sich manches vereinfachen, nicht nur der Wegfall der ...Datenbank-Blätter.
Aber es besteht noch einiger Klärungsbedarf.

Du hast die Wochen 01 bis 52 vorgesehen. Sind das DIN-Kalenderwochen?
Dann kann es z. B. sein, das zur KW01 noch bis zu 3 Tage des Vorjahres gehören.
Es gibt auch Jahre mit 53 KWn. Wird dann die 53. KW rechts neben die 52. KW geschrieben?

Heißt das Blatt richtig
YDT Final Inspection oder
YTD Final Inspection ?

Bei den YTD-Blättern steht die wk01 immer in Zeile 9, außer im Blatt 'YTD Output' (Zeile 8). Absicht?

Soll vor dem Übertragen der Daten von 'KPI Figures' auf die andere Blätter geprüft werden, ob alle Daten eingegeben sind?

Wenn eine Zahl fehlt, was soll dann in das YTD-Blatt geschrieben werden? "" oder #NV?

Du hast im Code "xlPasteValuesAndNumberFormats" stehen. Welchen Sinn hat die Übertragung der NumberFormats
für einzelne Zellen? Sollten die Zellen einer Zeile im Zielblatt nicht ein einheitliches Format haben?

Wegen der relativ fixen Struktur der YTD-Blätter muss man keine KW suchen, man kann Zeile und Spalte berechnen.

Hier mal ein erster Codevorschlag:

Option Explicit

Sub Ueber()
   Dim intW As Integer, lngZ As Long, lngS As Long

   With Sheets("KPI Figures")
      intW = .Cells(5, 4)                 ' Woche
      lngS = 3 + intW + 26 * (intW > 26)  ' in Spalte - gilt für alle Ausgabeblätter
      ' --------------------------------------------------------------------------------------
      lngZ = 9 - 4 * (intW > 26)          ' in Zeile
      Sheets("YTD Output").Cells(lngZ, lngS).Resize(2) = .Cells(14, 7).Resize(2).Value
      ' -----------
      lngZ = 10 - 8 * (intW > 26)         ' in Zeile
      Sheets("YDT Final Inspection").Cells(lngZ, lngS).Resize(4) = _
         .Cells(22, 7).Resize(4).Value
      ' -----------
      lngZ = 10 - 4 * (intW > 26)         ' in Zeile
' oder:                                                   ' Suche nach wk01 oder wk27 in Sp. D
      lngZ = Application.Match("wk" & Format(1 - 26 * (intW > 26), "00"), _
         Sheets("YTD Missing Parts").Columns(4), 0) + 1
      Sheets("YTD Missing Parts").Cells(lngZ, lngS).Resize(2) = .Cells(22, 14).Resize(2).Value
      ' --------------------------------------------------------------------------------------
   End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Codevorschlag von: Joachim Guenthner
Geschrieben am: 26.08.2014 17:13:27

Hallo Erich,

erstmal moechte ich mich entschuldigen, dass ich erst jetzt zurueckschreibe, ich hatte letzten Tage leider keine Moeglichkeit auf Internetzugriff.

Vielen, vielen Dank fuer deinen Codevorschlag!!! Er funktioniert hervorragend und erfuellt genau meine Anforderungen.

Zu deinen Fragen.
Die 52 Kalenderwochen muessten reichen, da ab Weihnachten bis nach der ersten Woche des neuen Jahres keine Daten gesammelt werden. Aber wenn es doch mal zu dem Fall kommen sollte, dass Daten fuer die 53 Kalenderwoche gesammelt werden, dann wuerde diese neben die KW 52 geschrieben werden.

Das Blatt sollte "YTD Final Inspection" heissen, ich habe da aus Versehen einen Buchstabendreher drin gehabt.

Habe jetzt alle Blaetter auf Zeile 8 angeglichen. Das war keine Absicht und hatte auch keine bestimmte Bedeutung, bin da beim Erstellen wahrscheinlich um eine Zeile verrutscht.

Ich benoetige keine Ueberpruefung der Dateneingabe, da alle Daten im Blatt "KPI Figures" automatisch aus einem anderen Blatt (in das taeglich alle Daten der Produktionslinie eingetragen werden) uebertragen werden.

Das mit "xlPasteValuesAndNumberFormats" habe ich aus einem anderen Code aus einem Forum uebernommen, aber jetzt nach deiner Erklaerung sehe ich auch, dass ich das wirklich nicht brauche.

Also nochmals vielen Dank fuer deine Bemuehungen, du hast mir echt weitergeholfen!!

Falls sich widererwartend in naher Zukunft doch noch Ergaenzungen bei den Blaettern oder dem Code ergeben sollten, wuerde ich es toll finden, wenn ich nochmals auf dich zurueckkommen darf.

Viele Gruesse und noch einen schoenen Tag!
Joachim


 

Beiträge aus den Excel-Beispielen zum Thema "Einfuegposition in Tabelle festlegen"