Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
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
Daten in Tabelle einer anderen Arbeitsmappe
Stefan
Hallo,
sorry, aber ich habe schon wieder ein Problem:
Nachfolgender Code wurde mir hier zur Verfügung gestellt und funktioniert auch. Nur hat sich jetzt an der Struktur der Zieltabelle etwas geändert.
Private Sub CommandButton1_Click()
Dim lRow As Long
Dim sRow As Long
Dim myWks As String
Dim arrTrans, iTrans As Integer, sTrans As String, lSpalte As Long
Dim wkbZiel As Workbook, wksZiel As Worksheet
Dim wksQuelle As Worksheet
Dim arrNot As Integer
Set wksQuelle = ActiveSheet
'Ursprungstabelle: Daten kopieren
myWks = Range("B" & Selection.Row).Value
Selection.Copy
sRow = Selection.Row
On Error Resume Next
Set wkbZiel = Workbooks("INFOBOX_FICO.xlsm")
On Error GoTo 0
If wkbZiel Is Nothing Then
Set wkbZiel = Workbooks.Open("\\malibu\Projekte\SAP\300_Test\2011\10_Projekt FI_CO\10_GSZ   _
_
Bearbeitung\INFOBOX_FICO.xlsm") 'anpassen
End If
Set wksZiel = wkbZiel.Sheets(myWks)
'Bildschirmaktualisierung und Ereignismakros deaktivieren
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
With wksZiel
'letzte freie Zeile der Zieltabelle finden
lRow = .Cells(Rows.Count, 2).End(xlUp).Row + 1
'Ursprungsdatensatz einfügen
.Range("K" & lRow).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'String-Zerteilungs Formeln einfügen
.Range("B" & lRow).FormulaR1C1 = "=LEFT(RC[9],13)"
.Range("C" & lRow).FormulaR1C1 = "=MID(RC[8],15,9^9)"
.Range("G" & lRow).FormulaR1C1 = "=MID(RC[4],15,2)"
.Range("H" & lRow).FormulaR1C1 = "=RIGHT(RC[3],3)"
.Range("B" & lRow & ":H" & lRow).Value = .Range("B" & lRow & ":H" & lRow).Value
.Columns("K:K").ClearContents
End With
'Transaktionen kopieren
wksQuelle.Range("D" & sRow).Copy
wksZiel.Range("F" & lRow).PasteSpecial Paste:=xlValues
'Testart kopieren
wksQuelle.Range("E" & sRow).Copy
wksZiel.Range("D" & lRow).PasteSpecial Paste:=xlValues
'Doppelte (in Spalte B) Datenzeilen entfernen - funktioniert nur unter Excel 2007
With wksZiel
lRow = .Cells(.Rows.Count, 2).End(xlUp).Row
If lRow > 2 Then
.UsedRange.RemoveDuplicates Columns:=Array(2), Header:=xlYes
End If
End With
'Daten aus selektierter Zeile in Quelle in Blatt "TA und Stammdaten" der _
Zieldatei eintragen
Set wksZiel = wkbZiel.Sheets("TA und Stammdaten")
With wksZiel
For lSpalte = 1 To 7
'nächste freie Zeile in Spalte der Zieltabelle finden
lRow = .Cells(.Rows.Count, lSpalte).End(xlUp).Row + 1
'Werte für Spalte aus Zeile in Quelltabelle in Variable einlesen
Select Case lSpalte
Case 1 'Transaktions-Typen in Quellzeile Spalte D(4)
sTrans = wksQuelle.Cells(sRow, 4).Text
'Sonderzeichen in Transaktions-Typ. ersetzen
sTrans = Replace(sTrans, ";", "")
sTrans = Replace(sTrans, "=", "")
sTrans = Replace(sTrans, "  ", " ")
sTrans = Replace(sTrans, "  ", " ")
Case 2:    sTrans = wksQuelle.Cells(sRow, 12).Text 'Spalte L - Debitoren
Case 3:    sTrans = wksQuelle.Cells(sRow, 13).Text 'Spalte M - Kreditoren
Case 4:    sTrans = wksQuelle.Cells(sRow, 14).Text 'Spalte N - Artikel
Case 5:    sTrans = wksQuelle.Cells(sRow, 15).Text 'Spalte O - Profitcenter
Case 6:    sTrans = wksQuelle.Cells(sRow, 16).Text 'Spalte P - Kostenstelle
Case 7:    sTrans = wksQuelle.Cells(sRow, 17).Text 'Spalte Q - Innenauftrag
End Select
If Trim(sTrans)  "" Then
'Werte am Leerzeichen splitten und in Array einlesen. _
Dabei Leerzeichen am Anfang/Ende löschen.
arrTrans = Split(Trim(sTrans), " ")
 'Transaktionen bzw. Daten aus Spalten L bis Q in Zielblatt eintragen, ggf. _
in mehreren Zeilen
For iTrans = 0 To UBound(arrTrans)
'Transaktions-Typ und Daten eintragen
.Cells(lRow + iTrans, lSpalte).Value = arrTrans(iTrans)
Next        
'Doppelte Datenzeilen entfernen - funktioniert nur unter Excel 2007
lRow = .Cells(.Rows.Count, lSpalte).End(xlUp).Row
If lRow > 2 Then
.Range(.Cells(1, lSpalte), .Cells(lRow, lSpalte)).RemoveDuplicates _
Columns:=Array(1), Header:=xlYes
End If
'Daten in Spalte aufsteigend sortieren
lRow = .Cells(.Rows.Count, lSpalte).End(xlUp).Row
If lRow > 2 Then
With .Range(.Cells(1, lSpalte), .Cells(lRow, lSpalte))
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
End With
End If
End If
Next
End With
wkbZiel.Close True
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Nachfolgend drei Beispieltabellen. In der Zieltabelle sind Spalten hinzugefügt worden, sodaß das kopieren von der Quelltabbe zur Zieltabelle nach dem Muster der Beispieltabellen erfolgen soll. Ich denke, daß die Änderung des Codes in der fett gekennzeichneten Stelle erfolgen muß (sicher bin ich mir aber nicht)
Quelltabelle:
FI
 LMNOPQ
2DebitorenKreditorenArtikelProfitcenterKostenstelleInnenauftrag
3test01test02test03test04test05test06
4           
5           
6           

Tabellendarstellung in Foren Version 5.39


neue Zieltabelle:
TA und Stammdaten
 BCDEFGHIJKLMNOPQRS
1Debitoren
IST
Debitoren
SOLL
Debioren
Land
Kreditoren
IST
Kreditoren
SOLL
Kreditoren
Land
Artikel
IST
Artikel
SOLL
Artikel
Land
Profitcenter
IST
Profitcenter
SOLL
Profitcenter
Land
Kostenstelle
IST
Kostenstelle
SOLL
Kostenstelle
Land
Innenauftrag
IST
Innenauftrag
SOLL
Innenauftrag
Land
2test01    test02    test3    test04    test05    test06   
3                                   

Tabellendarstellung in Foren Version 5.39


alte Zieltabelle (zum Nachvollziehen der Strukturänderung):
TA und Stammdaten
 BCDEFGH
1DebitorenKreditorenArtikelProfitcenterKostenstelleInnenauftrag 
2test01test02test03test04test05test06 
3             
4             

Tabellendarstellung in Foren Version 5.39


Kann mir hiermit jemand weiterhelfen?
Viele Grüße
Stefan
AW: Daten in Tabelle einer anderen Arbeitsmappe
06.04.2011 22:11:52
Gerd
Hallo Stefan,
ändere mal testweise:
'#bisher:
For lSpalte = 1 To 7
'#neu:
Dim Zielspalten As Variant, intCt as Integer
Zielspalten = Array(1, 2, 5, 8, 11, 14, 17)
For intCt= Lbound(Zielspalten) To Ubound(Zielspalten)
lSpalte= Zielspalten(intCt)
Gruß Gerd
AW: Daten in Tabelle einer anderen Arbeitsmappe
06.04.2011 23:42:41
Stefan
Hallo Gerd,
funktioniert hervorragend. Vielen Dank. Du hast mir sehr geholfen. Ich habe aber noch ein Problem. Vielleicht hast du eine Lösung. Kann man den Code noch folgendermaßen ändern?
Beispieltabelle :
TA und Stammdaten
 ABCDEFGHIJKLMNOPQRS
1verarbeitete
Transaktionen
Debitoren
IST
Debitoren
Soll
Debitoren
Land
Kreditoren
IST
Kreditoren
Soll
Kreditoren
Land
Artikel
IST
Artikel
Soll
Artikel
Land
Profitcenter
IST
Profitcenter
SOLL
Profitcenter
Land
Kostenstelle
IST
Kostenstelle
SOLL
Kostenstelle
Land
Innenauftrag
IST
Innenauftrag
SOLL
Innenauftrag
Land
2F-13test03test01  test21test20  test32test30  test44test40  test53test50  test60test60 
3F-47test05test02    test21  test37test31    test41  test55test51  test64test61 
4F-48test08test03    test22    test32    test42    test52    test62 
5FB75  test04    test23    test33    test43    test53    test63 
6KE21N  test05    test24    test34    test44    test54    test64 
7KE24  test06    test25    test35    test45    test55    test65 
8KE26  test07    test26    test36          test56    test66 
9    test08    test27    test37          test57    test67 
10    test09    test28    test38                test68 
11    test10    test29    test39                   
12                                     
13                                     

Tabellendarstellung in Foren Version 5.39


In den Spalten mit der Bezeichnungsstruktur xySOLL (also z.Bsp Debitoren Soll, Kreditoren Soll usw.) steht eine feste Anzahl von Einträgen. Die Spalten mit der Bezeichnungsstruktur xyIST werden dynamisch befüllt. Es sollen die Einträge in den xyIST-Spalten verglichen werden mit den Einträgen der xySOLL-Spalten und falls eine Übereinstimmung vorhanden, der entsprechende Wert in der xySOLL-Spalte farblich gekennzeichnet werden.
In der Beispieltabelle habe ich dieses manull vorgenommen um das Problem verständlicher darzustellen.
Viele Grüße
Stefan
Anzeige
AW: Daten in Tabelle einer anderen Arbeitsmappe
06.04.2011 23:46:43
Stefan
Hallo Gerd,
funktioniert hervorragend. Vielen Dank. Du hast mir sehr geholfen. Ich habe aber noch ein Problem. Vielleicht hast du eine Lösung. Kann man den Code noch folgendermaßen ändern?
Beispieltabelle :
TA und Stammdaten
 ABCDEFGHIJKLMNOPQRS
1verarbeitete
Transaktionen
Debitoren
IST
Debitoren
Soll
Debitoren
Land
Kreditoren
IST
Kreditoren
Soll
Kreditoren
Land
Artikel
IST
Artikel
Soll
Artikel
Land
Profitcenter
IST
Profitcenter
SOLL
Profitcenter
Land
Kostenstelle
IST
Kostenstelle
SOLL
Kostenstelle
Land
Innenauftrag
IST
Innenauftrag
SOLL
Innenauftrag
Land
2F-13test03test01  test21test20  test32test30  test44test40  test53test50  test60test60 
3F-47test05test02    test21  test37test31    test41  test55test51  test64test61 
4F-48test08test03    test22    test32    test42    test52    test62 
5FB75  test04    test23    test33    test43    test53    test63 
6KE21N  test05    test24    test34    test44    test54    test64 
7KE24  test06    test25    test35    test45    test55    test65 
8KE26  test07    test26    test36          test56    test66 
9    test08    test27    test37          test57    test67 
10    test09    test28    test38                test68 
11    test10    test29    test39                   
12                                     
13                                     

Tabellendarstellung in Foren Version 5.39


In den Spalten mit der Bezeichnungsstruktur xySOLL (also z.Bsp Debitoren Soll, Kreditoren Soll usw.) steht eine feste Anzahl von Einträgen. Die Spalten mit der Bezeichnungsstruktur xyIST werden dynamisch befüllt. Es sollen die Einträge in den xyIST-Spalten verglichen werden mit den Einträgen der xySOLL-Spalten und falls eine Übereinstimmung vorhanden, der entsprechende Wert in der xySOLL-Spalte farblich gekennzeichnet werden.
In der Beispieltabelle habe ich dieses manull vorgenommen um das Problem verständlicher darzustellen.
Viele Grüße
Stefan
Anzeige
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 14:22:39
Stefan
Hallo Gerd,
ich habe deinen Vorschlag
'#bisher:
For lSpalte = 1 To 7
'#neu:
Dim Zielspalten As Variant, intCt as Integer
Zielspalten = Array(1, 2, 5, 8, 11, 14, 17)
For intCt= Lbound(Zielspalten) To Ubound(Zielspalten)
lSpalte= Zielspalten(intCt)
nochmal getestet und der Code funktioniert nicht.
Die Ausgabe ist folgende:
TA und Stammdaten
 BCDEFGHIJKLM
1Debitoren
IST
Debitoren
SOLL
Debioren
Land
Kreditoren
IST
Kreditoren
SOLL
Kreditoren
Land
Artikel
IST
Artikel
SOLL
Artikel
Land
Profitcenter
IST
Profitcenter
SOLL
Profitcenter
Land
2test01                     
3                       
4                       
5                       
6                       

Tabellendarstellung in Foren Version 5.39


Also es wird nur der erste Eintrag übernommen. Soll wäre folgendes: (siehe auch obiges posting)
TA und Stammdaten
 BCDEFGHIJKLM
1Debitoren
IST
Debitoren
SOLL
Debioren
Land
Kreditoren
IST
Kreditoren
SOLL
Kreditoren
Land
Artikel
IST
Artikel
SOLL
Artikel
Land
Profitcenter
IST
Profitcenter
SOLL
Profitcenter
Land
2test01    test02    test03         
3                       
4                       
5                       
6                       
7                       

Tabellendarstellung in Foren Version 5.39


Grüße
Stefan
Anzeige
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 19:16:40
Gerd
Hallo Stefan,
jooh. Du wirst noch die Case an die Spalten im Array Zielspalten anpassen müssen.
Gruß Gerd
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 21:08:27
Stefan
Hallo,
meinst du diesen Abschnitt? (fett markiert)
With wksZiel
For lSpalte = 1 To 7
'nächste freie Zeile in Spalte der Zieltabelle finden
lRow = .Cells(.Rows.Count, lSpalte).End(xlUp).Row + 1
'Werte für Spalte aus Zeile in Quelltabelle in Variable einlesen
Select Case lSpalte
Case 1 'Transaktions-Typen in Quellzeile Spalte D(4)
sTrans = wksQuelle.Cells(sRow, 4).Text
'Sonderzeichen in Transaktions-Typ. ersetzen
sTrans = Replace(sTrans, ";", "")
sTrans = Replace(sTrans, "=", "")
sTrans = Replace(sTrans, " ", " ")
sTrans = Replace(sTrans, " ", " ")
Case 2: sTrans = wksQuelle.Cells(sRow, 12).Text 'Spalte L - Debitoren
Case 3: sTrans = wksQuelle.Cells(sRow, 13).Text 'Spalte M - Kreditoren
Case 4: sTrans = wksQuelle.Cells(sRow, 14).Text 'Spalte N - Artikel
Case 5: sTrans = wksQuelle.Cells(sRow, 15).Text 'Spalte O - Profitcenter
Case 6: sTrans = wksQuelle.Cells(sRow, 16).Text 'Spalte P - Kostenstelle
Case 7: sTrans = wksQuelle.Cells(sRow, 17).Text 'Spalte Q - Innenauftrag

End Select
(ganzer Quellcode in vorherigem posting)
Die case Anweisungen beziehen sich doch auf die Quelltabelle (z.Bsp. in
Case 2: sTrans = wksQuelle.Cells(sRow, 12).Text 'Spalte L - Debitoren
ist die 12 die Spalte L "Debitoren", diese wird kopiert in die Spalte B "Debitoren IST" der Zieltabelle;
Case 3: sTrans = wksQuelle.Cells(sRow, 13).Text 'Spalte M - Kreditoren
wäre dementsprechend die 13 die Spalte M "Kreditoren" der Quelltabelle und soll kopiert werden in die
Spalte E "Kreditoren IST" der Zieltabelle.
Case 4: sTrans = wksQuelle.Cells(sRow, 14).Text 'Spalte N - Artikel
wäre die 14 die Spalte M "Artikel" der Quelltabelle und soll kopiert werden in die Spalte H "Artikel IST" der Zieltabelle.
usw.
Wenn ich hier verändere stimmt doch die Quelle nicht mehr? Wie passe ich denn diese Case-Anweisungen an die Array Zielspalten an?
Sorry, ich kenne mich noch nicht so aus mit VBA.
Viele Grüße
Stefan
Anzeige
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 21:15:00
Stefan
Hallo nochmal,
sorry, in meinem letzten posting habe ich vergessen einzufügen, daß ich den Quellcode deinem Vorschlag gemäß geändert habe
also
#bisher:
For lSpalte = 1 To 7
'#neu:
Dim Zielspalten As Variant, intCt as Integer
Zielspalten = Array(1, 2, 5, 8, 11, 14, 17)
For intCt= Lbound(Zielspalten) To Ubound(Zielspalten)
lSpalte= Zielspalten(intCt)
Ich hoffe es ist jetzt nicht allzu verwirrend
Grüße
Stefan
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 21:24:29
Gerd
Hallo Stefan,
ich habe keine Teststellung.
Gruß Gerd
Select Case lSpalte
Case 1 'Transaktions-Typen in Quellzeile Spalte D(4)
sTrans = wksQuelle.Cells(sRow, 4).Text
'Sonderzeichen in Transaktions-Typ. ersetzen
sTrans = Replace(sTrans, ";", "")
sTrans = Replace(sTrans, "=", "")
sTrans = Replace(sTrans, " ", " ")
sTrans = Replace(sTrans, " ", " ")
Case 2: sTrans = wksQuelle.Cells(sRow, 12).Text 'Spalte L - Debitoren
Case 5: sTrans = wksQuelle.Cells(sRow, 13).Text 'Spalte M - Kreditoren
Case 8: sTrans = wksQuelle.Cells(sRow, 14).Text 'Spalte N - Artikel
Case 11: sTrans = wksQuelle.Cells(sRow, 15).Text 'Spalte O - Profitcenter
Case 14: sTrans = wksQuelle.Cells(sRow, 16).Text 'Spalte P - Kostenstelle
Case 17: sTrans = wksQuelle.Cells(sRow, 17).Text 'Spalte Q - Innenauftrag
End Select
Anzeige
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 22:05:18
Stefan
Hallo Gerd,
ich habs zweimal getestet und funktioniert prima. Herzlichen Dank. Du hast mir sehr geholfen.
Viele Grüße
Stefan
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 22:30:47
Gerd
Hallo Stefan,
aber gerne doch, bei "sap-trans". :-)
Gruß Gerd
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 22:53:55
Stefan
Hallo nochmal,
"sap-trans" ? verstehe ich nicht :-)
Grüße Stefan
AW: Daten in Tabelle einer anderen Arbeitsmappe
07.04.2011 23:32:22
Gerd
Hallo Stefan!
Holst Du die Daten nicht aus SAP? Auch gut oder noch besser! :-)
Gruß Gerd

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige