587 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,
ich brauche heute eure Hilfe bei folgendem Problem.
Ich habe eine Oberschiedsrichtereinsatzdatei mit ca. 50 Arbeitsblättern.
Im Hauptmenu sind Buttons (Userform) , mit denen ich in die Arb.-blätter springen kann.
Mit dem Button "Kommentare" lass ich mir für 10sec anzeigen, wieviel Kommentare ich in den Arb.-blättern gemacht habe.
Zur Auswertung ist es aber ziehmlich mühselig die Arb.-blätter zu suchen, wo die Kommentare stehen.
Meine Frage: Ist es auch möglich, sich per Button (im Idealfall auch für ein paar Sekunden) anzeigen zu lassen (Anzeige ab Zeile 32 wäre gut da Platz), in welchem Arb.-blatt die Kommentare stehen?
Hinter den Button- und Arb.blattnamen verstecken sich in der Originaldatei Namen.
Danke im voraus und
Gruß Flodnug

Link für Screenshot vom Hauptmenu

10 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Flodnug,

probier mal das folgende Makro:

Sub KommentareDokumentieren()

Dim Blatt As Worksheet
Dim Ziel As Worksheet
Dim Notiz As Comment
Dim zeile As Long

'Arbeitsblatt definieren, auf denen die Kommentar ausgegeben werden sollen
Set Ziel = ThisWorkbook.Worksheets("Hauptmenu")

'eventuell vorhandene Kommentar-Liste löschen
With Ziel
.Range(Cells(32, 1), Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 4)).ClearContents
End With

'erste Einfügezeile festlegen
zeile = 32

'Blätter durchlaufen und Kommentare in Zelle schreiben
For Each Blatt In ActiveWorkbook.Worksheets
For Each Notiz In Blatt.Comments
With Ziel
.Cells(zeile, 1).Value = Blatt.Name
.Cells(zeile, 2).Value = Notiz.Parent.Address
.Cells(zeile, 3).Value = Notiz.Author
.Cells(zeile, 4).Value = Notiz.Text
End With
zeile = zeile + 1
Next Notiz
Next Blatt

'Breite der Spalten A bis C automatisch anpassen
Columns("A:C").AutoFit
End Sub


Den Namen für das Arbeitsblatt mit dem Hauptmenu musst du noch anpassen. Kopiere das Makro in ein Standard-Modul deiner Arbeitsmappe.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,
vielen Dank für die schnelle Antwort.
Ich bin schon froh, dass es überhaupt geht. Du hast ja sogar mehr gemacht als erwartet und das sogar blind, denn ich sehe gerade, dass ich den Link gar nicht eingefügt habe. Zusätzlich wird nämlich auch noch die Zelle angezeigt.

Darum jetzt hier der Link: http://www.xup.in/dl,19263079/Menu-HC.jpg/

Da aber die Spaltenbreiten und -höhen sich nicht ändern dürfen, habe ich noch ein paar Zusatzbitten.
a) könntest Du bitte die Anzeige von Arb.blattnamen und Zelle (jetzt A-B)
tauschen (zu B-A) und Die Anzeige des Kommentartextes erst in Spalte D beginnen lassen. Im Moment zeigt er in Spalte C meinen Vornamen an. Weiß nicht woher der kommt. Dann würden die Spaltengrößen nämlich ausreichen (s. Link)
Die automatische Anpassung habe ich einfach durch löschen der letzten Zeile vor End sub geändert.
b) könntest Du bitte auch den Zeilenumbruch bei der Anzeige des Kommentartextes
wegnehmen.
0 Punkte
Beantwortet von
Hallo M.O.,
ich habe gerade noch einen schwerwiegenden Fehler festgestellt.
Bei jedem ausführen des Makros löscht er mir den Inhalt von A+B 29. Beim nächsten ausführen den Inhalt von A+B 27, dann A+B 25 usw.
Kannst Du das bitte korrigieren.
Falls Du dafür die Musterdatei brauchst, sag es bitte.
Danke und Gruß Flodnug
0 Punkte
Beantwortet von
Hallo M.O.,
ich habe mich jetzt das ganze WE mit Deinem Makro beschäftigt und so abändern können, dass ich damit leben kann.
Alle in Antwort 3 beschriebenen Probleme konnte ich durch löschen einzelner Abschnitte oder einfügen von Makroaufzeichnungen lösen.
So habe ich z.Bsp. das ungewollte ´schrittweise löschen durch löschen des Abschnittes

'eventuell vorhandene Kommentar-Liste löschen
With Ziel
.Range(Cells(32, 1), Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 4)).ClearContents
End With

das ändern der Sp.-breiten durch löschen des Abschnittes
'Breite der Spalten A bis C automatisch anpassen
Columns("A:C").AutoFit

das tauschen der Einträge durch ändern folgenden Abschnittes zu
.Cells(zeile, 2).Value = Blatt.Name
.Cells(zeile, 1).Value = Notiz.Parent.Address
.Cells(zeile, 4).Value = Notiz.Text
gelöst.

Ich habe das aufgeschrieben, um dich zu fragen, ob ich mir damit hoffentlich keine noch nicht entdeckten neuen Probleme geschaffen habe??
Jetzt habe ich nur noch eine Bitte: Ich wollte mir die Kommentare in einem anderen Arbeitsblatt ("Auswertung") ausgeben lassen. Ich dachte, das erreiche ich ganz einfach, indem ich die Zeile -
Set Ziel = ThisWorkbook.Worksheets("Hauptmenu") - ändere in
Set Ziel = ThisWorkbook.Worksheets("Auswertung").
Das hat leider nicht geklappt. Kannst Du mir da bitte noch weiterhelfen?
Danke und Gruß Flodnug
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Flodnug,

eigentlich sollte deine Änderung für das Arbeitsblatt Auswertung klappen.
Ich habe das Makro entsprechend deinen Wünschen angepasst und auch die Löschroutine noch mal etwas überarbeitet. Schau mal ob das jetzt so klappt, wie du willst:

Sub KommentareDokumentieren()

Dim Blatt As Worksheet
Dim Ziel As Worksheet
Dim Notiz As Comment
Dim zeile As Long
Dim lngLetzte As Long

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'Arbeitsblatt definieren, auf denen die Kommentar ausgegeben werden sollen
Set Ziel = ThisWorkbook.Worksheets("Auswertung")

'eventuell vorhandene Kommentar-Liste löschen
With Ziel
lngLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
If lngLetzte > 31 Then .Range(Cells(32, 1), Cells(lngLetzte, 4)).ClearContents
End With

'erste Einfügezeile festlegen
zeile = 32

'Blätter durchlaufen und Kommentare in Zelle schreiben
For Each Blatt In ActiveWorkbook.Worksheets
For Each Notiz In Blatt.Comments
With Ziel
.Cells(zeile, 1).Value = Notiz.Parent.Address
.Cells(zeile, 2).Value = Blatt.Name
.Cells(zeile, 4).Value = Notiz.Text
.Cells(zeile, 4).WrapText = False 'kein Zeilenumbruch in Spalte D
End With
zeile = zeile + 1
Next Notiz
Next Blatt

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,
vielen Dank erstmal für Deine Änderung.
Leider kommt jetzt die Meldung: 'Laufzeitfehler 1004':
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen.
Gruß Flodnug
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Flodnug,

gibt es denn das Arbeitsblatt "Auswertung"? Ansonsten musst du ein entsprechendes Arbeitsblatt erstellen.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.
danke für Deine Antwort.
Ja es gibt das Arb.blatt "Auswertung" und zwar an 5.Stelle nach 'Menü', 'Vorrunde', 'Rückrunde' und 'Mannschaften'.
Das Makro bleibt an folgender Stelle gelb unterlegt hängen:
Range(Cells(32, 1), Cells(lngLetzte, 4)).ClearContents
Hoffentlich hilft Dir das weiter.
Gruß Flodnug
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Flodnug,

sehe gerade den Fehler. Ersetze die gelb markierte Zeile durch diese hier:
If lngLetzte > 31 Then .Range(.Cells(32, 1), .Cells(lngLetzte, 4)).ClearContents


Dann sollte es funktionieren.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,
vielen Dank.
Jetzt habe ich es so, wie ich es wollte, außer dass das Makro auch noch in das Arb.blatt 'Auswertung' springen sollte.
Aber da habe ich jetzt einfach per Hand den Sprung in 'Auswertung' aufgezeichnet und dann an den Anfang Deines Makros "call Ausw" geschrieben.
Danke nochmal für alles und
Gruß Flodnug
...