Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
784to788
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
784to788
784to788
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro

Makro
30.07.2006 14:18:15
Martin
Hallo,
Es gibt zwei Tabellen. Alpha ( https://www.herber.de/bbs/user/35392.xls ) und Beta ( https://www.herber.de/bbs/user/35393.xls ).
In Beta werden Daten aufbereitet, die ich aus einem System herausnehme. Die werden dann genau so aufbereitet, wie sie in Beta nun zu sehen sind. Diese Daten sollen aber in die Alpha-Datei transferiert werden. Und zwar müsste ein Programm nun die Institute von Beta und Alpha vergleichen und die Daten von Beta in die richtigen Felder in Alpha reinschreiben. Also zum Beispiel das Institut 02 wird abgeglichen mit der Alpha-Datei, sodass das Programm weiß, dass es genau in die Zeile mit dem Institut 02 die Beträge reinschreiben muss. (übrigens in Alpha die Spalte D einfach wegdenken, diese habe ich leider vergessen zu löschen). Wenn wir das Beispiel 02 nehmen, dann muss nun von Beta die Beträge von "Soll;Ist; und Mbi" in Alpha eingetragen werden. Das wäre in Alpha bei C5 dann 6200,00 und in E5 die 3167,48 und in F5 sollen die 1903,57.
Die Schwierigkeit daran ist, dass das Programm das abgleichen soll und durch die Institute dann die Zahlen auch in die richtigen Zellen reinschreiben. Es kann nämlich durchaus mal sein, dass beispielsweise das 02-Institut bei der nächsten Aktualisierung nicht vorkommt.
Ich hoffe mir kann einer helfen, vielen Dank schon einmal!
Grüße Martin

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro
30.07.2006 15:59:25
Hans W. Herber
Hallo Martin,
etwas problematisch machte die Sache, dass es sich bei den Werten in Spalte A z.T. um Zahlen und zum Teil um Zeichenfolgen handelte. Wie folgt:

Sub DatenUebertragen()
Dim vRow As Variant
Dim iRow As Integer
Dim wksS As Worksheet, wksT As Worksheet
Set wksS = Workbooks("35393.xls").Worksheets(1)
Set wksT = Workbooks("35392.xls").Worksheets(1)
iRow = 2
Do Until IsEmpty(wksS.Cells(iRow, 1))
vRow = Application.Match(Format(wksS.Cells(iRow, 1).Value, "00"), wksT.Columns(1), 0)
If IsError(vRow) Then
vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
End If
If IsError(vRow) Then
vRow = wksT.Cells(wksT.Rows.Count, 1).End(xlUp).Row + 1
End If
wksT.Cells(vRow, 1).Value = wksS.Cells(iRow, 1).Value
wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 2).Value
wksT.Cells(vRow, 5).Value = wksS.Cells(iRow, 3).Value
wksT.Cells(vRow, 6).Value = wksS.Cells(iRow, 4).Value
iRow = iRow + 1
Loop
End Sub

gruss hans
Anzeige
AW: @Hans
30.07.2006 17:24:41
Doppelt
Hallo Hans,
warum löscht du die Hinweise auf Doppelt? Finde ich nicht fair gegenüber den Usern, die vielleicht mit dem noch offenen Thread von Martin sich beschäftigen. Wenn schon unbedingt ein neuer Thread, dann solltest Du den offenen löschen bzw. sollte dies der Fragesteller selbst tun bevor er neu Postet.
Verbleibe mit freundlichen Grüssen und wünsche noch einen schönen Sonntag.
Gruss
AW: @Hans
30.07.2006 18:52:36
Hans W. Herber
Hallo ?,
ich hatte mir den Ursprungsthread angesehen, merkte, dass ich mich auch damit schon beschäftigt hatte, ohne das Problem zu verstehen und fand jetzt, dass es wesentlich besser erklärt war.
Nach meiner Auffassung muss es gestattet sein, eine Frage neu zu formulieren, wenn man merkt, dass sie beim ersten mal missverständlich oder weniger gut formuliert war und deswegen mit den Antworten nichts anzufangen war.
Wäre es so gewesen, dass die Frage mit dem gleichen Text und mit den gleichen Demodateien gestellt worden wäre, würde ich mich Deinem Urteil anschliessen, so nicht.
Mit der Antwort möchte ich zum einen meinen Standpunkt zu quasi Doppelpostings darlegen und zum anderen zeigen, dass ich nicht ohne Grund hingehe und Postings lösche.
Ich bitte um Verständnis dafür, dass ich mich zu einer konstruktiven Antwort entschieden hatte.
gruss hans
Anzeige
AW: Widerspruch
30.07.2006 19:27:48
Orakel
Hallo hans,
Deine Argumentation hinkt kräftig. Im alten Thread wurde die Frage schon am 27.07. wortgleich genau so umformuliert.
https://www.herber.de/forum/messages/786071.html
Konsequenterweise wäre sie auch dort zu beantworten oder zumindest der alte Thread zu schließen.
Grüße
Orakel
AW: Danke Orakel, weningstens einer meiner Meinung
30.07.2006 19:29:47
Doppelt
AW: Danke Orakel, weningstens einer meiner Meinung
30.07.2006 19:59:49
Hans W. Herber
... nun, dann war es nicht der mit dem gleichen, den ich gefunden hatte. Hätte ich es bemerkt, hätte ich anders reagiert.
Ich bin vermutlich ziemlich altmodisch, aber ich muss mich überwinden, jemanden zu antworten, der unter dem Namen "Doppelt" schreibt. Mir fällt da das Ernstnehmen schwer.
Muss man alles so furchtbar eng sehen? Kann man nicht auch mal denken, gut, er versteht das System noch nicht ganz, also erkläre ich es ihm. Darunter verstehe ich nicht nur "Doppelt".
Es tut mir leid, das wir da unterschiedlicher Ansicht sind. Ich möchte die Diskussion allerdings auch nicht fortsetzen.
gruss hans
Anzeige
AW: leider kein OffTopic, deshalb...
30.07.2006 21:46:10
Orakel
1. Absatz: Kann passieren.
2. Absatz: Das hat nichts mit alt- oder neumodisch zu tun. Wenn, was zugegeben schwierig ist, kaum ausreichend geschulte Admins die entsprechende „Ordnung“ oder besser gesagt Übersicht nicht sicherstellen können, wird schon mal zur Selbsthilfe gegriffen. Egal wer sich da mit „Doppelt“ oder „geschlossen“ meldet, - bisher war das in der Regel sachlich richtig.
3. Absatz: Das ist eigentlich eine Argumentation, die ich unterstützen würde. Aber ein paar, sicher in Excel kompetente Personen, darunter wohl auch mit Adminrechten, sehen dies offensichtlich gaaaanz anders. Da sprech ich aus Erfahrung.
4. Absatz:. Warum unterschiedlicher Ansicht? Aus der Forums-FAQ: Wenn eine gestellte Frage keine Antworten fand, stelle sie nicht mit dem gleichen Text neu. Vermutlich haben die Forumsteilnehmer Deine erste Frage gelesen, konnten aber nichts damit anfangen. Formuliere die Frage neu. Vor allem: Werde nicht ungeduldig, wenn nach ein, zwei Stunden noch keine Antwort da ist.
Und nu iss jut
Grüße
Orakel
Anzeige
AW: Makro
31.07.2006 08:06:27
Martin
Guten Morgen,
durch meinen Doppelpost wollte ich nicht erreichen, dass ihr euch in die Haare kriegt. Entschuldigt bitte dafür. Ich habe meinen ersten Post schlecht ausgedrückt, dann versucht nochmal genauer zu erklären. Da ich es aber zuerst nicht geschafft habe, mich richtig auszudrücken, habe ich gedacht, dass viele auch meinen nächsten Post nicht mehr lesen würden. Deshalb einen neuen Thread. Entschuldigt, an das Schließen des vorherigen habe ich nicht gedacht.
Hans, vielen Dank für dein Makro. Dieses klappt super!
Extra für den Upload hier im Forum habe ich meine ganzen Tabellenblätter aus der Datei rausgeworfen, um nur das Blatt in der Datei zu haben, welches ich auch brauche für dieses Makro. Wenn ich nun wieder die anderen Tabellenblätter dazu hole und die beiden Dateinamen im Makro ändere, dann werden in mein Tabellenblatt "53900-2006" keine Daten transferiert. Liegt es daran, dass dein Makro sich nicht auf das Tabellenblatt "53900-2006" festlegt, da in der upload-datei von mir nur ein Tabellenblatt war?
Vielen Dank schonmal dafür.
Und noch eine Sache hätte ich. Könnte das Makro in ganz kleinen Sätzen erklärt werden, was da genau passiert. Ich versteh davon leider noch nicht allzu viel.
Vielen Dank!
Viele Grüße
Martin
Anzeige
AW: Makro
31.07.2006 08:14:22
Hans W. Herber
Hallo Martin,
als Quell- und Zielblätter werden jeweils die 1. Blätter der Arbeitsmappe referenziert: "Worksheets(1)"
Setze hier entweder einen anderen Blattindex oder (in Anführungszeichen) den Blattnamen ein.
gruss hans
AW: Makro
31.07.2006 08:33:58
Martin
Vielen Dank Hans für deine Mühe, klappt einwandfrei!
Ich hätte nun noch eine Sache, vielleicht kann mir hier ja noch einmal jemand helfen.
Durch das Programm von Hans werden meine Daten nun in Alpha reingeschrieben. Rechts daneben in Alpha findet man wieder Spalten, bei denen in 'IST' und 'MBI' Daten rein transferiert werden müssen.
Das klappt bei mir folgendermaßen: In Beta werde ich wieder im selben Format Daten reinschreiben, welche aber dieses mal in Alpha zu Spalte J und K zugeordnet werden sollen. Also dem Konto '4220' (steht drüber in J). Nachdem Beta immer im selben Format ist, wollte ich fragen ob Folgendes geht: Bevor mein Makro durchgeführt wird, soll ich gefragt werden, bei welchem Konto meine Daten dieses mal reinmüssen. (4220,4223,4227,4550,4560,4570,4571,4575,4650,4710,4720,4780,4790,4810 oder 4580. Alle Konten sind zu sehen, wenn man nach rechts scrollt. Nur das 'SOLL' brauch ich bei den verschiedenen Konten nicht.
Ist das zu aufwändig, oder zu machen? Wenn ja, würde ich mich erneut über Hilfe freuen.
Vielen Dank!
Anzeige
AW: Makro
31.07.2006 09:04:22
Hans W. Herber
Hallo Martin,
wie folgt (achte bitte darauf, dass die erste Variablendeklaration vor die Prozeduren gesetzt wird und dass die Blatt-Indizes angepasst werden müssen):
Dim piCol As Integer

Sub DatenUebertragen()
Dim oBar As CommandBar
Dim oBtn As CommandBarButton
Dim vRow As Variant
Dim iRow As Integer, iCol As Integer, iColL As Integer
Dim wksS As Worksheet, wksT As Worksheet
Set wksS = Workbooks("35393.xls").Worksheets(1)
Set wksT = Workbooks("35392.xls").Worksheets(1)
iColL = wksT.Cells(1, 256).End(xlToLeft).Column - 2
On Error Resume Next
Application.CommandBars("Kontoliste").Delete
On Error GoTo 0
Set oBar = Application.CommandBars.Add("Kontoliste", msoBarPopup, False, True)
For iCol = 3 To iColL
If IsNumeric(Left(wksT.Cells(1, iCol).Value, 1)) Then
Set oBtn = oBar.Controls.Add
With oBtn
.Caption = wksT.Cells(1, iCol).Value
.Style = msoButtonCaption
.OnAction = "SetAccount"
.Tag = wksT.Parent.Name & vbTab & wksT.Name
End With
End If
Next iCol
oBar.ShowPopup
iRow = 2
Do Until IsEmpty(wksS.Cells(iRow, 1))
vRow = Application.Match(Format(wksS.Cells(iRow, 1).Value, "00"), _
wksT.Columns(1), 0)
If IsError(vRow) Then
vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
End If
If IsError(vRow) Then
vRow = wksT.Cells(wksT.Rows.Count, 1).End(xlUp).Row + 1
End If
wksT.Cells(vRow, 1).Value = wksS.Cells(iRow, 1).Value
wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 2).Value
wksT.Cells(vRow, piCol).Value = wksS.Cells(iRow, 3).Value
wksT.Cells(vRow, piCol + 1).Value = wksS.Cells(iRow, 4).Value
iRow = iRow + 1
Loop
End Sub


Sub SetAccount()
Dim wks As Worksheet
Dim sWks As String
sWks = Application.CommandBars.ActionControl.Tag
Set wks = Workbooks(Left(sWks, InStr(sWks, vbTab) - 1)) _
.Worksheets(Right(sWks, Len(sWks) - InStr(sWks, vbTab)))
piCol = WorksheetFunction.Match( _
Application.CommandBars.ActionControl.Caption, wks.Rows(1), 0)
Application.CommandBars("Kontoliste").Delete
End Sub

gruss hans
Anzeige
AW: Makro
31.07.2006 09:18:49
Martin
Das ist absolut perfekt! Vielen Dank Hans, wirklich klasse!
Eine Bitte hätte ich doch noch. Ich habe mir zwar nun alles von dir vorkauen lassen, aber lernen möchte ich dabei doch noch. Könntest du deshalb vielleicht eine kleine Beschreibung des Codes noch posten? Mir sagt das ganze nämlich garnix und ein kleiner Satz unter jede Zeile, was das zu bedeuten hat, würde mir schon sehr helfen. Nur wenn du Lust und Zeit hast natürlich.
Danke noch einmal!
Viele Grüße
Martin
AW: Makro
01.08.2006 08:17:34
Martin
Hallo Hans,
ich würde gerne eine Beschreibung zu dem oben genannten Makro haben. Darf ich dafür auch einen neuen Post erstellen, damit mir auch andere helfen können und nicht nur du alles machst?
Viele Grüße
Martin
Anzeige
AW: Makro
01.08.2006 08:33:33
schauan
Hallo Martin,
brauchst Du nicht. Deine Frage erscheint immer noch bei den Offenen Fragen.
Ansonsten zwei hinweise:
1) Einen teil der Erläuterungen bekommst Du selbst raus, wenn Du zu den Kommandos die Hilfe nutzt
2) nach 1) bleiben weniger Fragen, die kannst Du hier stellen und dann diskutieren wir weiter.
Hoffe geholfen zu haben
Grüße von André aus Gera - Excel-97-2003

Anzeige
AW: Makro
01.08.2006 08:35:33
Hans W. Herber
Hallo Martin,
zum einen sprengt das etwas die Möglichkeiten und Sinn des Forums, zum anderen kann ich aber auch niemanden zumuten, meinen Code zu kommentieren. Ich habe den Code mit Kommentaren hier hinterlegt:
https://www.herber.de/bbs/user/35486.txt
gruss hans
AW: Makro
01.08.2006 09:33:58
Martin
Danke, das hat mir sehr geholfen Hans!
Nun versteh ich den Sinn jeder einzelnen Zeile. Für einzelne Wörter, die ich aber noch immer nicht verstehe, nehme ich dann die Excel-Hilfe (Befehle wie piCol, wksS, wksT, iColL, oBtn sagen mir alle nichts, das versuch ich wie gesagt durch die Excel-Hilfe dann rauszubekommen).
Nochmals Danke für die Hilfe!
AW: Makro
01.08.2006 09:36:24
Hans W. Herber
... Vorsicht, Martin, bei den von Dir genannten Begriffen handelt es sich ausschliesslich um von mir vergebene Variablennamen, nicht um Excel-Schlüsselwörter.
gruss hans
AW: Makro
01.08.2006 09:38:31
Martin
Na man merkt halt, dass ich gerade am Anfang stehe :-)
wie kommst du auf diese Variablen? Haben die eine Bedeutung für dich und stehen für irgendwas, oder sind die frei erfunden?
AW: Makro
01.08.2006 09:45:17
Hans W. Herber
Hallo Martin,
ich versuche, weitgehend gebäuchiche Konventionen einzuhalten. Sie Dir hierzu in der Excel-FAQ unter xlBasics die Namenskonventionen an.
gruss hans
AW: Makro
01.08.2006 10:59:29
Martin
Ah Danke, im Excel-Faq sind ja schon einige Sachen erklärt.
Aber beispielsweise mit piCol kann ich garnichts anfangen. Oder ColL, wofür steht das Col und das L?
Und msoButtonCaption. Wofür steht das mso?
Oder bei oBar und oBtn, wofür steht genau das o? Bei iRow bzw. iCol das i?
Ich seh schon, ich hab noch viel vor mir... Mir fehlt eine Art Lexikon, wo alle Begriffe erklärt werden und auch gut übersichtlich sortiert sind.
AW: Makro
01.08.2006 11:08:49
Hans W. Herber
Hallo Martin,
im Unterschied zu anderen Programmiersprachen gibt es bei VBA keine strikten Regeln. Wenn man alleine programmiert, ohne dass andere mit dem Code arbeiten müssen, sollte man im Wesentlichen darauf achten, dass man selbst Informationen aus den Variablennamen entnehmen kann. Als Beispiele die von Dir genannten Variablen:

piCol steht bei mir für (p)upblic (i)nteger (Col)umn
iColL steht für (i)nteger (Col)umn (L)ast
oBtn steht für (o)bject (Btn) "Button"
iRow steht für (i)nteger Row(Zeile)
msoButtonCaption ist keine Variable sondern eine Excel-Konstante.

gruss hans
gruss hans

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige