Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
... und nun, wie weiter?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• TxbyFmjy
Registriert seit: 29.09.2015
Version(en): 2030,5
Code: Sub M_snb() For Each it In Tabelle1.Comments With it.Shape .LockAspectRatio = -1 .TextFrame.AutoSize = 0 End With Next End Sub
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• TxbyFmjy
Registriert seit: 21.03.2021
Version(en): Professional 2010
30.08.2021, 18:09
(Dieser Beitrag wurde zuletzt bearbeitet: 30.08.2021, 18:17 von TxbyFmjy.
Bearbeitungsgrund: redaktionelle Änderung
)
(28.08.2021, 09:44)schauan schrieb: Hallöchen,
VBA:
Alternativ könnte man mit etwas Aufwand beim Wechsel in eine Zelle die Kommentargröße ermitteln und beim Wechsel in eine andere Zelle die Kommentargröße der vorherigen Zelle wiederherstellen. (29.08.2021, 09:35)TxbyFmjy schrieb: Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe. Das ist falsch: Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe. Das ist richtig: Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in die Tabelle (hier: Tabelle1), in der das Makro seinen Dienst tun soll. Code: Option Explicit Public ACA As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'** Excel 2016: Keep in mind however, that executing the Worksheet_SelectionChange macro destroys the Undo stack, so using _ this technique essentially disables Excel's Undo feature.
Dim H As Double Dim W As Double Cells.Interior.ColorIndex = xlNone With ActiveCell On Error Resume Next
Range(ACA).Comment.Shape.Height = 150 '** 5,29 cm Range(ACA).Comment.Shape.Width = 300 '** 10,58 cm Debug.Print ACA; Range(ACA).Comment.Shape.Height; Range(ACA).Comment.Shape.Width
H = .Comment.Shape.Height W = .Comment.Shape.Width .EntireRow.Interior.Color = RGB(219, 229, 241) .EntireColumn.Interior.Color = RGB(219, 229, 241)
ACA = ActiveCell.Address
Debug.Print ACA; H; W
End With On Error GoTo 0 End Sub
Nachteil dieser Lösung: Beachte aber, dass das Ausführen des Worksheet_SelectionChange Makros den Undo Stack zerstört, sodass bei der Benutzung dieser Technik de facto Excel's Undo Feature deaktiviert wird. Diese Lösung funktioniert jedoch nur dann, wenn zuerst die Zelle und dann das zugehörige Kommentar selektiert wird. Wird das Kommentar direkt selektiert, passiert nichts. Grund: Kommentar hinzufügen, bearbeiten oder löschen löst das Change event nicht aus, sodass kein Change event der Kommentare ausgewertet werden kann. Code: Private Sub Worksheet_Change(ByVal Target As Range)
'** Excel's Undo stack is destroyed whenever an event procedure makes a change to the worksheet.
Dim H2 As Double Dim W2 As Double With ActiveCell On Error Resume Next H2 = .Comment.Shape.Height '** Excel 2016: Adding, editing or deleting a cell comment doesn't trigger the Change event. W2 = .Comment.Shape.Width ACA2 = ActiveCell.Address
Debug.Print ACA2; H2; W2
End With On Error GoTo 0 End Sub
comment size change revert back.xlsm (Größe: 14,53 KB / Downloads: 0)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, sorry, aber vielleicht schreibst Du auch mal, was genau die Frage ist. Schnitzel gab's bei uns vor zwei Wochen zuletzt und wenn da Lösungen funktionieren und Dir ist es trotz eventueller Nachteile oder Einschränkungen recht, ist ja alles gut.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• TxbyFmjy
Registriert seit: 21.03.2021
Version(en): Professional 2010
(30.08.2021, 18:09)TxbyFmjy schrieb: Nachteil dieser Lösung: Beachte aber, dass das Ausführen des Worksheet_SelectionChange Makros den Undo Stack zerstört, sodass bei der Benutzung dieser Technik de facto Excel's Undo Feature deaktiviert wird.
Diese Lösung funktioniert jedoch nur dann, wenn zuerst die Zelle und dann das zugehörige Kommentar selektiert wird. Wird das Kommentar direkt selektiert, passiert nichts. Grund: Kommentar hinzufügen, bearbeiten oder löschen löst das Change event nicht aus, sodass kein Change event der Kommentare ausgewertet werden kann. (30.08.2021, 18:23)schauan schrieb: Hallöchen,
sorry, aber vielleicht schreibst Du auch mal, was genau die Frage ist. Schnitzel gab's bei uns vor zwei Wochen zuletzt und wenn da Lösungen funktionieren und Dir ist es trotz eventueller Nachteile oder Einschränkungen recht, ist ja alles gut. Sorry, aber ich habe die Nachteile dieser Lösung geschildert, weil ich offensichtlich damit nicht zufrieden bin und jemand der darüber Bescheid weiß, wüsste vielleicht eine bessere Lösung oder könnte erklären, dass es keine bessere Lösung gibt. Gerne kann ich die Frage noch einmal explizit für dich formulieren: Gibt es für diese Lösung eine noch bessere Lösung, durch die die geschilderten Probleme vermieden werden können?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
was übrig bleibt und wo Du noch nicht Stellung bezogen hast hatte ich in #6 geschrieben, hier mal um zwei Eigenschaften erweitert: Du müsstest ggf. eine Standardgröße und/oder ein Standardseitenverhältnis und/oder eine Standardposition festlegen was dann alles beim Speichern für alle Kommentare der Mappe oder eines Blattes wieder eingestellt wird.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• TxbyFmjy
Registriert seit: 21.03.2021
Version(en): Professional 2010
01.09.2021, 19:26
(Dieser Beitrag wurde zuletzt bearbeitet: 01.09.2021, 19:32 von TxbyFmjy.
Bearbeitungsgrund: Attachment vergessen
)
(30.08.2021, 18:09)TxbyFmjy schrieb: Das ist falsch: Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe.
Das ist richtig: Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in die Tabelle (hier: Tabelle1), in der das Makro seinen Dienst tun soll. Schnitzel war ein Tippfehler. Richtig ist vielmehr Schnipsel. (28.08.2021, 09:44)schauan schrieb: Hallöchen,
VBA:
Oder Du hast eine Standardgröße und stellst diese vor dem Speichern der Datei wieder her. Oder ... Diese Schnipsel gehören nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe. Code: Option Explicit Dim ScaleValue1 As Double
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim objComment As Comment Dim ScaleValue2 As Double
Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
For Each objComment In ActiveSheet.Comments
'Resize With objComment.Shape
.LockAspectRatio = msoFalse .TextFrame.AutoSize = False
ScaleValue2 = .Height / .Width
If ScaleValue2 <> ScaleValue1 Then .Width = 150 .Height = .Width * ScaleValue1
.LockAspectRatio = msoTrue
Debug.Print ScaleValue1; ScaleValue2; .Width; .Height
End If End With
Debug.Print ScaleValue1; ScaleValue2; objComment.Shape.Width; objComment.Shape.Height
Next
Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
End Sub
Code: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim objComment As Comment Dim ScaleValue2 As Double
Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
For Each objComment In ActiveSheet.Comments
'Resize With objComment.Shape
.LockAspectRatio = msoFalse .TextFrame.AutoSize = False
ScaleValue2 = .Height / .Width
If ScaleValue2 <> ScaleValue1 Then .Width = 150 .Height = .Width * ScaleValue1
.LockAspectRatio = msoTrue
Debug.Print ScaleValue1; ScaleValue2; .Width; .Height
End If End With
Debug.Print ScaleValue1; ScaleValue2; objComment.Shape.Width; objComment.Shape.Height
Next
Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
End Sub
Code: Private Sub Workbook_Open() '** Beim Öffnen der Arbeitsmappe wird das richtige Seitenverhältnis am Kommentar 1 ermittelt. Dim objComment As Comment Dim i As Integer Dim SV As Double i = 0
For Each objComment In ActiveSheet.Comments i = i + 1 With objComment.Shape SV = .Height / .Width End With If i = 1 Then GoTo LabelFinish Next LabelFinish: ScaleValue1 = SV Debug.Print SV; ScaleValue1 End Sub
Diese Lösung bringt jedoch leider auch ein Problem mit sich, wenn die Tabelle Hunderte oder über Tausend Kommentare enthält, weil dann das Speichern der Datei für Benutzer*innen inakzeptabel lange dauert. Auch funkioniert diese Lösung nur, wenn die Arbeitsmappe nur eine Tabelle enthält und nicht zwischen weiteren Tabellen hin- und hergewechselt wird und das Seitenverhälltnis aller Kommentare identisch ist. Im Modul1 befindet sich zum Durcheinanderbringen aller Kommentare folgendes Schnipsel: Code: Private Sub comments_mathematical_exact_arrangement()
Dim objComment As Comment Dim i As Long Dim j As Double Dim z As Double i = 0 If ActiveSheet.Comments.Count = 0 Then MsgBox "No comments in entire sheet" Exit Sub End If ' Alle Kommentare des aktuellen Arbeitsblatts durchlaufen Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For Each objComment In ActiveSheet.Comments i = i + 1 z = Rnd If z <= 0.1 Then j = i * z ^ 1 ElseIf z <= 0.2 Then j = i * z ^ 2 ElseIf z <= 0.3 Then j = i * z ^ 3 ElseIf z <= 0.4 Then j = i * z ^ 4 ElseIf z <= 0.5 Then j = i * z ^ 5 ElseIf z <= 0.6 Then j = i * z ^ 6 ElseIf z <= 0.7 Then j = i * z ^ 7 ElseIf z <= 0.8 Then j = i * z ^ 8 ElseIf z <= 0.9 Then j = i * z ^ 9 ElseIf z <= 1 Then j = i * z ^ 10 End If With objComment
.Shape.TextFrame.AutoSize = True
If j <= 10 Then .Shape.Top = .Parent.Top + (.Parent.Height * (j / 10)) .Shape.Left = .Parent.Left + (.Parent.Width * (j / 10)) ElseIf j <= 100 Then .Shape.Top = .Parent.Top + (.Parent.Height * (j / 10)) .Shape.Left = .Parent.Left + (.Parent.Width * (j / 100)) ElseIf j <= 1000 Then .Shape.Top = .Parent.Top + (.Parent.Height * (j / 10)) .Shape.Left = .Parent.Left + (.Parent.Width * (j / 1000)) ElseIf j <= 10000 Then .Shape.Top = .Parent.Top + (.Parent.Height * (j / 100)) .Shape.Left = .Parent.Left + (.Parent.Width * (j / 100)) End If End With Next Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True On Error GoTo 0 End Sub
(29.08.2021, 11:01)schauan schrieb: ... und nun, wie weiter? "Vorwärts immer, rückwärts nimmer!" Die Arbeit geht weiter. Eine abgerundete Lösung zu finden, ist nicht trivial. (28.08.2021, 09:44)schauan schrieb: Hallöchen,
VBA:
Oder ...
comment size change revert back picture (2_1).xlsm (Größe: 202,13 KB / Downloads: 0)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Du merkst ja an den "zahlreichen" Antwortern, dass da wohl nix mehr kommen wird. Wo Licht ist, ist auch Schatten. Nun finde mal das Licht ohne Schatten ... Zitat:wenn die Tabelle Hunderte oder über Tausend Kommentare enthält ja, wenn die jemand alle ändert, der hat Zeit . Du kannst Code übrigens auch beim Blattwechsel ausführen. Wo der hingehört, wissen wir Zitat:Deshalb ist 'Menüpunkt "Kommentar bearbeiten" aus dem Kontextmenü entfernen' keine Lösung. Mal weiter gedacht, füge die Kommentare mit einem eigenen Makro ein bzw. ändere sie mit einem eigenen Makro.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• TxbyFmjy
Registriert seit: 21.03.2021
Version(en): Professional 2010
(01.09.2021, 19:55)schauan schrieb: Hallöchen,
Du merkst ja an den "zahlreichen" Antwortern, dass da wohl nix mehr kommen wird. Wo Licht ist, ist auch Schatten. Nun finde mal das Licht ohne Schatten ... Früher nannte man so etwas Einzelunterricht (hier: bei schauan). Nur die Besten erhielten Zugang zum Einzelunterricht. (01.09.2021, 19:55)schauan schrieb: Hallöchen,
ja, wenn die jemand alle ändert, der hat Zeit . Niemand muss über Tausend Kommentare auf einmal ändern. Thema verfehlt. Das "Problem" ist zur Zeit jedoch, dass beim Schließen, Speichern alle Kommentare auf eine Größenänderung hin abgeklappert werden und das dauert natürlich. (01.09.2021, 19:55)schauan schrieb: Hallöchen,
Du kannst Code übrigens auch beim Blattwechsel ausführen. Wo der hingehört, wissen wir Das "wir" das wissen sollte nicht das Ziel eines Forums sein. Andere werden das hier vielleicht lesen und durch meinen Hinweis eine Hilfe erfahren. Ich hatte einmal einen Such-Treffer (Suche: Excel Kommentare Größe) in einem Forum, wo dem Hilfesuchenden nicht nur eine Lösung angeboten wurde, sondern auch noch erklärt wurde, wo hinein das Schnipsel gehört. Das hat mir sehr geholfen. Zitat:Excel Kommentar Größe automatisch anpassen, Exl121150, Erfahrener User, 8. Februar 2018
Will man, dass neu hinzugefügte Kommentare automatisch größenmäßig angepasst werden, muss man das Ganze in eine Ereignisbehandlungsroutine (entweder der Arbeitsmappe oder des Arbeitsblattes) einfügen.
Willst du, dass die automatische Kommentar-Größenanpassung in der gesamten Arbeitsmappe (also in allen Arbeitsblättern dieser Mappe) wirksam ist, musst du die Anpassung zB. in die "SheetSelectionChange"-Ereignisbehandlung des "ThisWorkbook"/"DieseArbeitsmappe"-Objektes einbauen:
Code: Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) With Target If Not .Comment Is Nothing Then With .Comment.Shape.TextFrame .AutoSize = True .AutoMargins = False .MarginTop = 0 .MarginLeft = 0 .MarginRight = 10 'Pt: 10 Pt = 0,35 cm (72 Pt = 1" = 2,54 cm) .MarginBottom = 10 'Pt End With End If End With End Sub
Dazu gehst du folgendermaßen vor:
1) Du drückst im aktiven Arbeitsblatt die Tastenkombination Alt+F11, sodass du in den VBA-Code-Editor gelangst. 2) Falls dort das "Projekt-VBAProjekt"-Fenster nicht zu sehen ist, drückst die Tastenkombination Strg-R 3) Dort machst du einen Doppelklick auf den Listeneintrag "DieseArbeitsmappe" (bzw. "ThisWorkbook") im Unterabschnitt "Microsoft Excel Objekte", sodass das Code-Editierfenster der Arbeitsmappe eingeblendet wird. 4) Dort fügst du das von oben kopierte Makro ein. 5) Das Makro von vorhin sieht zB. zusätzlich vor, dass der untere Kommentarfensterrand 10 Pt (=0,35 cm) beträgt und ebenso der rechte Fensterrand, während der Rand oben und links =0 Pt beträgt --> an deine Wünsche anpassen! 6) Mit Tastenkombination Alt-F11 wieder zurück ins Arbeitsblatt wechseln und Arbeitsmappe (als *.xlsm-Datei) speichern.
Willst du jedoch die Größenautomatik für die Kommentarfenster nur in einem bestimmten Arbeitsblatt haben, müsstest du in Punkt 3) statt auf "DieseArbeitsmappe" einen Doppelklick auf den Listeneintrag für das betreffende Arbeitsblatt (zB. "Tabelle4 (TabName)") machen, sodass das Codemodul-Fenster dieses Blattes erscheint, in welches du dann folgendes Makro kopieren solltest:
Code: Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If Not .Comment Is Nothing Then With .Comment.Shape.TextFrame .AutoSize = True .AutoMargins = False .MarginTop = 0 .MarginLeft = 0 .MarginRight = 10 'Pt: 10 Pt = 0,35 cm (72 Pt = 1" = 2,54 cm) .MarginBottom = 10 'Pt End With End If End With End Sub
Jedes Forum ist andersartig .
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
warum postest Du eigentlich die Codes mit ...SelectionChange... wenn die Deinem Anspruch wegen der eingeschränkten UNDO-Funktion nicht gerecht werden? Du fügst die auch häufig als Zitat ein. Soll das auch für den aufmerksamen Leser gut sein? Ich finde das ziemlich hinderlich. Die Threads werden immer länger und unübersichtlicher und es wird immer schwieriger, herauszufinden, was Du willst und was nicht. Gilt das mit dem UNDO vielleicht inzwischen nicht mehr, weil es im Zitat fehlt? Falls doch, wie gesagt, es fällt nicht leicht, zwischen den ganzen Zitaten einzelne Info's zu finden ... Hast Du nun mal versucht, Kommentare mit einem eigenen Makro einzufügen, zu bearbeiten und zu löschen?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• TxbyFmjy
|