Anzeige
Archiv - Navigation
1064to1068
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

Makro übersetzen..!

Makro übersetzen..!
27.03.2009 06:48:32
Jan_E
Hallo zusammen
kann mir jemand bitte den fett markierten Teil übersetzen oder besser gesagt, interpretieren. Ich wäre sehr dankbar, denn sonst komme ich beinahe unmöglich bei meiner Arbeit weiter.

Sub get_data()
'Dieses Macro versorgt Tabelle1 mit den Daten aus den Monatstabellen
Dim SearchStr As String, lCount As Long, rFoundCell As Range, WSh As Worksheet
Application.EnableEvents = False
For n = 1 To Sheets("Übersicht").Range("J4").Value  'Update nur fuer die gewaehlte Anzahl der  _
Monate
'Tabellenname festlegen
Set WSh = Sheets("Monat" & n)
'erste Schleife bestimmt das erste Suchkriterium (Hauptgebiet z.b. Projekte)
For k = 1 To 10 '(10 Hauptgebiete in Tabelle "Übersicht")
'Festlegen des Suchkriterium, feste Struktur in Tabelle1
SearchStr = Worksheets("Übersicht").Cells(10 + (15 * (n - 1)), 2 + k).Value
Set rFoundCell = WSh.Range("A1")
For lCount = 1 To 10
Set rFoundCell = WSh.Columns(1).Find(What:=SearchStr, After:=rFoundCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If rFoundCell Is Nothing Then
tmp = MsgBox("Die Hauptgruppe '" & SearchStr & "' aus Tabelle Übersicht  _
existiert nicht in der Monatstabelle '" & WSh.Name & "' !" _
& vbCrLf & "Bitte überprüfen Sie die Schreibweise in der Monatstabelle  _
und in Tabelle 'Übersicht'", vbCritical, _
"Kritischer Fehler")
If tmp = vbOK Or tmp = "" Then
Exit Sub
End If
ElseIf rFoundCell = SearchStr Then
foundaddress = rFoundCell.Address
Exit For
End If
Next lCount
'naechste Schleife bestimmt das 2te Suchkriterium (Untergruppe)
zz = 0
For m = 1 To 9 '(5 Untergruppen in Tabelle "Übersicht")
'suche nach unten in der Tabelle nach dem Wert aus Tabelle1
searchstr2 = Sheets("Übersicht").Cells(10 + m, 1).Value
'hier bis zur naechsten leeren Zelle suchen
If Not zz  0 Then
For z = 1 To WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row
If WSh.Cells(rFoundCell.Row + z, rFoundCell.Column).Borders(xlEdgeBottom). _
LineStyle  xlNone Then 'check on format
zz = zz + 1
Else
'naechste leere Zelle gefunden (kein Rahmen um die Zelle), abbrechen  _
Zaehlschleife
Exit For
End If
Next z
lastrow = rFoundCell.Row + zz
End If
For i = rFoundCell.Row To lastrow
If WSh.Cells(1 + i, rFoundCell.Column + 2).Value = searchstr2 Then
'wenn Untergruppe gefunden wurde, Wert aus Spalte 6 in Tabelle 'Übersicht'  _
uebernehmen
Sheets("Übersicht").Cells(10 + ((n - 1) * 15) + m, 2 + k).Value = WSh.Cells(1 +  _
i, 6).Value
Sheets("Übersicht").Cells(10 + ((n - 1) * 15) + m, 2 + k).Interior.ColorIndex =  _
xlNone
i = lastrow
ElseIf i = lastrow Then
Sheets("Übersicht").Cells(10 + ((n - 1) * 15) + m, 2 + k).Value = ""
Sheets("Übersicht").Cells(10 + ((n - 1) * 15) + m, 2 + k).Interior.Color = RGB( _
500, 100, 30)
End If
Next i
Next m
Next k
Next n
Application.EnableEvents = True
End Sub


Sucht da der Code nach Rahmen? Wie sieht dieser Rahmen aus? Was bedeutet ZZ? Was macht der Code in diesem Teil?
Sonst habe ich den Code eingentlich durchschaut, habe aber mit dem markierten Teil noch Mühe.
Vielen Dank für eure Mühe und noch einen schönen Tag (bie hoffentlich schönerem Wetter, als momentan hier in der Schweiz herrscht!:)
Gruss
JAn_E

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro übersetzen..!
27.03.2009 09:31:29
Oberschlumpf
Hi Jan
Erklärung zu:
searchstr2 = Sheets("Übersicht").Cells(10 + m, 1).Value
Die Variable searchstr2 erhält den Wert aus Spalte A im Sheet "Übersicht"
Schleifendurchlauf 9 mal
1. Durchgang...searchstr2 = ....Cells(10 + 1, 1).Value entspricht searchstr2 = A11
2. Durchgang...searchstr2 = ....Cells(10 + 2, 1).Value entspricht searchstr2 = A12
3. Durchgang...searchstr2 = ....Cells(10 + 3, 1).Value entspricht searchstr2 = A13
...
9. Durchgang...searchstr2 = ....Cells(10 + 9, 1).Value entspricht searchstr2 = A19
Erklärung zu:
If Not zz 0 Then (hätte man auch schreiben können: If zz = 0)
Wenn der Wert für Variable zz = 0, dann führe die nächsten Codezeilen bis zum dazugehörigen End If durch
Erklärung zu:
For z = 1 To WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row
Starte die Schleife z von 1 bis letzte Zeile in der Spalte, die der Variablen rFoundCell mit dem Suchwert aus SearchStr zugewiesen wurde.
Erklärung zu:
If WSh.Cells(rFoundCell.Row + z, rFoundCell.Column).Borders(xlEdgeBottom).LineStyle xlNone Then
Führe den nachfolgenden Code bis zum dazugehörigen End If aus, wenn für die jeweils nächste Zelle (rFoundCell.Row + z) aus der Variablen rFoundCell die untere Rahmenlinie (xlEdgeBottom) formatiert dargestellt wird.
Erklärung zu:
zz = zz + 1
Der Wert der Variablen zz wird um 1 erhöht
Erklärung zu:
Else
Exit For
End If

Wenn die zuvor erwähnte untere Rahmenlinie nicht formatiert dargestellt wird, dann verlasse die Schleife For z = 1 To WSh....
Erklärung zu:
Next z
lastrow = rFoundCell.Row + zz
End If

Die Next-Zeile wiederholt die For z-Schleife bis zum angegebenen Enddurchlauf.
Der Variablen lastrow wird der Wert aus gefundene Zeile in rFoundCell plus dem Wert aus zz zugewiesen.
Mit End If endet der Code, der mit If Not zz 0 begonnen wurde.
So, Jan, bist du nun schlauer? :-)
Ich hoffe, denn anders kann ich es leider nicht erklären.
Bin auf deine Antwort neugierig.
Ciao
Thorsten
Anzeige
AW: Makro übersetzen..!
27.03.2009 09:47:36
Jan_E
Hallo Thorsten
Vielen Dank für die sehr ausführliche Erklärung. Allerdings kann ich mein Problem immer noch nicht finden. Kannst du mir sagen, wieso es hier bei Übersicht 1 mein Vorhaben funktioniert, und bei Übersicht2 nicht?
Hier die Erklärug aus meinem anderen Thread:

Hallo zusammen
also, erstmals zum Titel, der Thread heisst so, weiss Dirk aus Dubai mir bisher beinahe alles  _
in diesem Dokoment gemacht hat und er mein Problem höchstwahrscheinlich ohne mit der Wimper zu zucken beheben kann.
Dass soll aber nicht heissen, dass andere Hilfe nicht willkommen wäre..:)
also zu meinem Problem.
Ich habe die unten angehängte Excel-Tabelle, bei welche der Code zum Sheet Übersicht perfekt  _
funktioniert. jetzt möchte ich aber noch ein weiteres Sheet, in diesem Falle Übersicht2, welche mir nach dem gleichen System Daten herausfischt.
Jedoch sind es jetzt andere Hauptkriterien und andere Nebenkriterien. Mir gelingt es einfach  _
nicht, den Code aus Übersicht so anzupassen, das er für Sheet Übersicht2 auch funktioniert. Ich habe im Sheet Monat1 die Werte, welche gesucht,
gefunden und übertragen werden sollen gelb gefärbt.
Danke allen für die Hilfe und wünsche dem ganzen Forum noch einen schönen Tag!
MFG
Jan


und hier die Datei:
https://www.herber.de/bbs/user/60651.xls
Ich wäre dir sehr dankbar, wenn du mir bei diesem Problem helfen könntest.
Vielen Dank!
Gruss Jan

Anzeige
AW: Makro übersetzen..!
27.03.2009 09:43:20
Reinhard
Grüezie Jan,

searchstr2 = Sheets("Übersicht").Cells(10 + m, 1).Value
If zz = 0 Then
For z = rFoundCell.Row + 1 To WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row
If WSh.Cells(z, rFoundCell.Column).Borders(xlEdgeBottom). _
LineStyle = xlNone Then Exit For
zz = zz + 1
Next z
lastrow = rFoundCell.Row + zz
End If


müßte exakt das Gleiche machen.
rFoundCell.Column ist die Spalte einer gefunden Zelle, nehmen wir mal an G12
WSh.Cells(Rows.Count, rFoundCell.Column)
ist dann die Zelle G65536
WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row
ist dann die Zeile der untersten belegten Zelle in G
End(xlUp) entspricht dann dem in Excel wenn du in G65536 stehst und Strg+PfeilnachOben drückst.
Wenn nun WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row die 100 ergibt, so heißt das in G12 steht was drin und in G100. Dazwischen kann alles Mögliche in den Zellen stehen oder sie können auch leer sein.
"z" läuft jetzt von 13 bis 100 und erhöht "zz" solange diejeweilige Zelle einen Rahmen hat, wenn nicht wird die "z"-Schleife verlassen.
"lastrow" ist dann 12 plus zz.
Wahrscheinlich müßte dieser Code auch reichen:


searchstr2 = Sheets("Übersicht").Cells(10 + m, 1).Value
For lastrow = rFoundCell.Row + 1 To WSh.Cells(Rows.Count, rFoundCell.Column).End(xlUp).Row
If WSh.Cells(z, rFoundCell.Column).Borders(xlEdgeBottom). _
LineStyle = xlNone Then Exit For
Next lastrow


Zeichne dir ein makro auf während du einer Zelle Rahmen verpasst, dann kriegste auch raus was EdgeBottom ist.
Gruß
Reinhard

Anzeige
AW: Makro übersetzen..!
27.03.2009 09:53:40
Jan_E
Hallo Reinhard
auch dir vielen Dank für deine Antwort. Allerdings kann ich meinen Fehler bei Übersicht2 immer noch nicht finden. Ich wäre auch dir sehr dankbar, wenn du mich beim Problem, welchesich oben geschildert habe, unterstützen würdest. Mein Problem ist, ich Arbeite erst seit etwa 2 Wochen mit VBA und kenne mich daher noch nicht so gut aus mit der Materie.
Hoffe wir zusammen können dieses Probelm lösen..:)
Gruss Jan
Oberschlumpf, wäre dir dankbar, wenn
30.03.2009 07:45:11
Jan_E
Hallo Thorsten
ich wäre dir sehr dankbar, wenn du mal bitte schnell meineen Fehler beheben würdest. Ich bin mir ziehmlich sicher, dass es nur ein sehr kleiner Fehler ist, den ich nicht zu finden weiss, da ich schlicht und einfach zu wenig von Makros verstehe.
Wäre sehr froh, wenn du dir die Datei mal schnell auschauen würdest...
Gruss Jan_E
Anzeige
AW: Oberschlumpf, wäre dir dankbar, wenn
30.03.2009 14:18:23
Unbekannt
zu

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige