payday

Aug 27 2008

Kommentare in Microsoft Visio drucken

Category: Tips & TricksMoni @ 10:48

visioIm Rahmen meiner Diplomarbeit habe ich es mit allerhand Prozessen zutun. Da kommt man nicht umhin diese auch graphisch darzustellen. Dafür ist Microsoft Visio 2003/2007 meine erste Wahl. Zurzeit arbeite ich an einem besonders schwierigen Prozess. Schwierig nicht, weil er so viele sich verzweigende Prozessschritte hat, sondern weil man zum verstehen jedes einzelnen Schrittes wenigstens ein bisschen Konstruktions-KnowHow haben muss. Also habe ich meine in Visio 2007 erstelle Prozesskette an allen möglichen Stellen mit erklärenden Kommentare gespickt, in der Annahme, dass sich diese so einfach wie in Word später ausdrucken lassen. Das war ein Trugschluss.

Problem
Kommentare werden in Microsoft Visio 2003/2007 als nichtdruckbare Shapes eingebunden. Leider hat es Microsoft versäumt, die bei allen anderen Office-Produkten verfügbare Option „Drucken mit Kommentaren“ auch in Visio einzufügen.

Lösung

Um dennoch in einer strukturierten Weise an die Kommentare einer Visio-Zeichnung heranzukommen, muss man sich umständehalber VBA bedienen. Microsoft ist sich des Mangels bewusst. Doch anstatt die Funktion nachzuimplementieren, bieten sie lediglich einen VBA-Workaround an, wie man einem Eintrag aus der KnowledgeBase (Microsofts Wissensdatenbank) entnehmen kann.

Und so kommt man an seine Kommentare in Visio:

A. Makro erstellen

1. starte Visio und eine öffne/erstelle eine Zeichnung
2. drücke ALT + F11 (oder alternativ unter Extras > Makro > Visual Basic-Editor) um den Microsoft Visual Basic-Editor zu öffnen
3. wähle im Menü „Einfügen“ des VB-Editors den Punkt „Modul“ aus
4. füge folgende Codezeilen im erscheinenden Fenster ein (copy’n’paste)

Public Sub GetComments()
Dim pagMarkup As Visio.Page
Dim pag As Visio.Page
Dim shp As Visio.Shape
Dim sText As String
Dim iRow As Integer

Set pag = Visio.ActivePage
sText = "Reviewer" & vbTab & "Date" & vbTab & "Comment"

If pag.PageSheet.SectionExists(Visio.visSectionAnnotation, Visio.visExistsAnywhere) Then
For iRow = 0 To pag.PageSheet.RowCount(Visio.visSectionAnnotation) - 1
sText = sText & vbCrLf & pag.Document.DocumentSheet.CellsSRC(Visio.visSectionReviewer, pag.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationReviewerID).ResultIU - 1, Visio.visReviewerInitials).ResultStr("")
sText = sText & pag.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationMarkerIndex).ResultIU
sText = sText & vbTab & Format(pag.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationDate).ResultIU, "ddddd")
sText = sText & vbTab & pag.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationComment).ResultStr("")
Next iRow
End If

For Each pagMarkup In pag.Document.Pages
If pagMarkup.Type = visTypeMarkup Then
If pagMarkup.OriginalPage = pag Then
If pagMarkup.PageSheet.SectionExists(Visio.visSectionAnnotation, Visio.visExistsAnywhere) Then
sText = sText & vbCrLf
sText = sText & vbCrLf & pag.Document.DocumentSheet.CellsSRC(Visio.visSectionReviewer, pagMarkup.ReviewerID - 1, Visio.visReviewerName).ResultStr("")
For iRow = 0 To pagMarkup.PageSheet.RowCount(Visio.visSectionAnnotation) - 1
sText = sText & vbCrLf & pag.Document.DocumentSheet.CellsSRC(Visio.visSectionReviewer, pagMarkup.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationReviewerID).ResultIU - 1, Visio.visReviewerInitials).ResultStr("")
sText = sText & pagMarkup.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationMarkerIndex).ResultIU
sText = sText & vbTab & Format(pagMarkup.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationDate).ResultIU, "ddddd")
sText = sText & vbTab & pagMarkup.PageSheet.CellsSRC(Visio.visSectionAnnotation, iRow, Visio.visAnnotationComment).ResultStr("")
Next iRow
End If
End If
End If
Next pagMarkup

Set shp = pag.DrawRectangle(-pag.PageSheet.Cells("PageWidth").ResultIU, 0, 0, pag.PageSheet.Cells("PageHeight").ResultIU)
shp.Cells("Para.HorzAlign").Formula = "0"
shp.Cells("VerticalAlign").Formula = "0"
shp.Name = "Reviewers Comments"
shp.Text = sText
End Sub

4. optional: im Fenster „Eigenschaften“ auf der linken Seite kann man noch einen sprechenden Namen für das Makro, zb. GetComments, vergeben
5. drücke STRG + S (oder alternativ unter Datei > [Zeichnungsname] speichern) um das Dokument zu speichern
6. schließe den Visual Basic-Editor (entweder über das rote X in der Titelleiste oder über Datei > schließen und zurück zu Visio)

B. Makro ausführen

7. wähle in Visio unter Extras > Makro > [Makroname] das Makro „GetComments“ aus

Das Makro fügt nun auf der linken Seite des Zeichenblattes ein neues Shape ein, dass in tabellarischer Form (über TABS) alle Kommentare zu dieser Zeichnung hält. Dieses kann nun beliebig verschoben, angepasst  und ausgedruckt werden.

Hinweis: beim öffnen einer Visio-Datei, die ein Makro enthält kann, je nach nach Sicherheitseinstellungen in Visio entweder eine Hinweismeldung erscheinen oder das Makro komplett gesperrt sein.

Nachteil

Nachdem dem Testen des Makros habe ich im Wesentlichen 2 Nachteile festgestellt:

  • es werden nur die Kommentare des gerade geöffneten Zeichenblattes extrahiert. Besteht die Visio-Datei aber aus mehreren Zeichenblättern, die allesamt Kommentare enthalten, so muss man  jedes Blatt einzeln auswählen (anzeigen) und das Makro anstoßen.
  • die Verlinkung zwischen dem Kommentartext und dem zu kommentierenden Bestandteil der Zeichnung geht verloren;  genauer gesagt hat er bis auf die Möglichkeit der optischen Kopplung nie exisitiert. Man kann das Kommentarfeld verschieben, sodass es in der Nähe des Shapes liegt zu dem im Kommentar etwas ausgesagt wird, aber Visio stellt keinen „echten“ Bezug her. Man kann sich die Kommentare als freischwebende Symbole auf dem Zeichenblatt vorstellen. Demzufolge kann das Makro beim zusammensammeln der einzelnen Kommentartexte auch nicht angeben, wozu der Kommentar gehört. Das ist weniger ein Mangel des Makros, sondern der Kommentarintegration in Visio an sich.

Vorteil

Der Vorteil ist, man kommt überhaupt „irgendwie“ an seine Kommentare 😉

Verbesserungsmöglichkeiten

Verbesserungspotential sehe ich vor allem bei den 2 genannten Kritikpunkten. Es sollte VBA-technisch sicher möglich sein bei der Kommentarextrahierung alle Zeichenblätter des geöffneten Visio-Dokumentes zu berücksichtigen anstatt nur das gerade angezeigte.

Die Herstellung eines Bezuges zwischen den Kommentar und der zu kommentierenden Stelle im Zeichneblatt dürfte schon etwas schwerer werden, imho. Vielleicht wäre es möglich das Kommentarfeld in ein einfaches druckbares Shape zu verwandeln oder auch an die gleiche Stelle ein kleines neues Shape mit der Kommentarnummer zu setzen. Eben ein druckbares Objekt das mithilfe seiner Bezeichnung einen Link zu dem jeweiligen Kommentartext herstellt.

Es würde mich schon reizen das mal anzupacken, aber leider fehlt mir momentan einfach die Zeit dazu.

==> Oder kennt ihr eine andere Möglichkeit einfach an die Kommentare in Visio ranzukommen? ::..

Der Vollständigkeit halber:

Kommentare aus anderen MS Office-Produkten drucken

Microsoft Word:

In Word lassen sich die Kommentare (in Form von Überarbeitungshinweisen bzw. Änderungsverfolgungen) sehr leicht ausdrucken. Die Einstellung dazu findet man unter Datei > Drucken > Drucken: „Dokument mit Markups“ oder „Markupliste“ Als Ergebnis erhält man entweder das Dokument, das um eine Kommentarleiste (auf der rechten Seite) erweitert wurde oder eine eine Liste mit allen Kommentaren untergliedert nach Haupttext, Kopf-/Fußzeilen, Textfelder, etc.

Microsoft Excel:

Die Einstellung zum Drucken der Kommentare in Excel findet sich unter Datei (für Excell2007: Seitenlayout) > Seite einrichten > Reiter: Tabelle > Drucken: Kommentare: „Am Ende des Blattes“ oder „Wie auf dem Blatt angezeigt“. Für die letzte Option müssen aber alle Kommentare auf dem Arbeitsblatt angezeigt werden (Excel2003: Ansicht > Kommentare | Excel2007: Überprüfen > alle Kommentare anzeigen), da nur angezeigte Kommentare auch ausgedruckt werden. Die angezeigten Kommentare kann man dann auf dem Blatt verschieben (zb. so, dass sie andere Kommentare oder wichtige Zellen nicht überlagern; ein Pfeil stellt immer den Bezug zur kommentierten Zelle her) [Quelle: Microsoft KnowledgeBase-Eintrag]

Microsoft PowerPoint:

Die Implementierung der Kommentare in PowerPoint ähnelt der in Visio, mit dem Unterschied, dass es hier von Haus aus möglich ist die Kommentare zu drucken. Wie auch in Visio liegen die Kommentare freischwebend auf der Folie und sind nicht an irgend einen Bezugspunkt gebunden. Jedoch werden die Kommentarsymbole beim Ausdrucken der Folien mit ausgegeben, so dass mithilfe einer Kommentarliste dann der Bezug zwischen dem Kommentarinhalt zu der angesprochenen Position in der Folie hergestellt werden kann. Die Einstellungen dazu finden sich unter Datei > Drucken > Haken setzen bei „Kommentare und Freihandmarkierungen drucken“

PowerPoint zeigt, dass es möglich ist freischwebende Kommentare in Form von  kleinen gelben Symbolen auf den Folien auszudrucken. Deswegen ist es für mich unverständlich, wieso die Entwickler bei Microsoft diese Methode nicht auch bei Visio eingesetzt haben und die Kommentare nicht in Form von druckbaren Shapes realisiert haben :roll:

Fazit

Was ich daraus gelernt habe? Keine eigentlich logischen Annahmen treffen, wenn es um Microsoft Office-Produkte geht. Grundlegende Funktionen, die das eine Programm bietet, muss das andere noch lange nicht beherrschen.

Schon mal was von Durchgängigkeit gehört, Herr Gates?

Schlagwörter: , , , , , , , , , , , ,

2 Responses to “Kommentare in Microsoft Visio drucken”

  1. vmk says:

    Schöne Anleitung 😉

    Schon mal versucht ein Diagramm aus Excel als Graphik im Format jpg/gif/png zu exportieren? :mrgreen:

  2. Moni says:

    klar, die Exportschnittstelle nennt sich ALT + Druck in Verbindung mit Paint :mrgreen:

Leave a Reply