Clever-Excel-Forum

Normale Version: Ist das bei Excel alles ganz normal?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

ist das bei Excel alles ganz normal?

Ich habe ein Makro aufgezeichnet:
  • Zelle B5 ausgewählt
  • Kommentar eingeblendet
  • Rahmen des Kommentars ausgewählt
  • Kommentar formatieren
  • Größe --> Häkchen bei Seitenverhältnis sperren
    [attachment=39958]
  • Ausrichtung --> Automatische Größe
    [attachment=39959]
  • OK
Das aufgezeichnete Makro sieht so aus:
[attachment=39957]

Code:
Option Explicit

Sub Resize_auto_aspectratio()
'
' Resize_auto_aspectratio Makro
'

'
    Range("B5").Select
    ActiveCell.Comment.Visible = True
    Range("B5").Comment.Shape.Select True
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
        .ReadingOrder = xlContext
        .Orientation = xlHorizontal
        .AutoSize = True
    End With
    Range("B5").Select
End Sub

Kommentarabmessung vor der Aufzeichnung:
[attachment=39951]

Nach der manuellen Aufzeichnung des Makros sieht die Kommentarabmessung so aus:
[attachment=39952]

Zudem ist das Seitenverhältnis gesperrt:
[attachment=39954]

Nach Abspielen des Makros sieht die Kommentarabmessung so aus:
[attachment=39955]

Zudem ist das Seitenverhältnis nicht gesperrt:
[attachment=39956]

Jay Freedman schrieb:Lock Picture Aspect Ratio

Unfortunately, you're correct. There are far too many cases of controls in
built-in dialogs that have no support in VBA. In each release the MVPs have
asked again to have this fixed, but so far without success.


(....)

--
Regards,
Jay Freedman
Microsoft Word MVP         
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.
Hallöchen,

wenn Du Deinen Code liest, kannst Du da was vom Sperren des Seitenverhältnis finden?
War das Häkchen schon vor der Aufzeichnung gesetzt? Mal abgesehen davon, dass Excel zuweilen nicht alles und zuweilen mehr als man denkt aufzeichnet wäre das ein Grund.
(26.08.2021, 19:19)schauan schrieb: [ -> ]Hallöchen,

wenn Du Deinen Code liest, kannst Du da was vom Sperren des Seitenverhältnis finden?

Nein. Das Sperren des Seitenverhältnisses wurde nicht aufgezeichnet.

(26.08.2021, 19:19)schauan schrieb: [ -> ]Hallöchen,

War das Häkchen schon vor der Aufzeichnung gesetzt?

Nein.

Das geschriebene Makro führt auch nicht zum gleichen Ergebnis wie der manuelle Vorgang:
[attachment=39975]

Code:
Option Explicit

Sub Resize_auto_aspectratio_2() '** ergibt nicht das gleiche Ergebnis wie der manuelle Vorgang
Dim rngZelle As Range

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

    If ActiveSheet.Comments.Count = 0 Then
     MsgBox "No comments in entire sheet"
     Exit Sub
    End If

For Each rngZelle In Selection.Cells
    With rngZelle
     If Not .Comment Is Nothing Then

'Resize
        With .Comment.Shape
            .LockAspectRatio = msoTrue
            .TextFrame.AutoSize = True
        End With
        End If
    End With
Next

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


Nach Abspielen des geschriebenen Makros sieht die Kommentarabmessung so aus:
[attachment=39973]

Zudem ist das Seitenverhältnis nicht gesperrt, obwohl das geschriebene Makro LockAspectRatio enthält:
[attachment=39974]

(26.08.2021, 19:19)schauan schrieb: [ -> ]Hallöchen,

Mal abgesehen davon, dass Excel zuweilen nicht alles und zuweilen mehr als man denkt aufzeichnet wäre das ein Grund.

Gut zu wissen, wie hakelig Excel-VBA funktioniert.
Hallöchen,

und das gesperrte Seitenverhältnis funktioniert nur, wenn Du den Kommentar (oder auch ein anderes Shape) an den Eckpunkten größer ziehst Sad ... oder wenn Du z.B. im VBA Breiter oder Höhe veränderst
(27.08.2021, 18:41)schauan schrieb: [ -> ]Hallöchen,

und das gesperrte Seitenverhältnis funktioniert nur, wenn Du den Kommentar (oder auch ein anderes Shape) an den Eckpunkten größer ziehst Sad ... oder wenn Du z.B. im VBA Breiter oder Höhe veränderst

Danke für den Hinweis. Das ist nicht das was bei einem gesperrten Seitenverhältnis zu erwarten sein sollte.

Diagonal aufziehen bei gesperrten Seitenverhältnis ist ok.

Aber wie lässt sich per VBA verhindern, dass das Kommentar manuell nach links/rechts oder oben/unten gezogen werden kann?
Hallöchen,

VBA:

Zum Verhindern oder zumindest Erschweren könnte man ggf. den Menüpunkt Kommentar bearbeiten aus dem Kontextmenü entfernen. Dann geht aber auch Ändern nicht mehr.
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.
Oder Du hast eine Standardgröße und stellst diese vor dem Speichern der Datei wieder her.
Oder ...

ohne VBA:
Oder Du arbeitest mit Blattschutz
(28.08.2021, 08:44)schauan schrieb: [ -> ]Hallöchen,

VBA:

Zum Verhindern oder zumindest Erschweren könnte man ggf. den Menüpunkt Kommentar bearbeiten aus dem Kontextmenü entfernen. Dann geht aber auch Ändern nicht mehr.

Zitat:Excel 2016, Power Programming with VBA (Ich habe nur die englische Ausgabe.)

18 Working with Shortcut Menus

Listing shortcut menus
Excel 2016 has 67 shortcut menus. (Excel 2016 hat 67 Kontextmenüs)

Code:
Sub ShowShortcutMenuNames()
Dim Row As Long
Dim Cbar As CommandBar
Row = 1
For Each Cbar In CommandBars
If Cbar.Type = msoBarTypePopup Then
Cells(Row, 1) = Cbar.Index
Cells(Row, 2) = Cbar.Name
Cells(Row, 3) = Cbar.Controls.Count
Row = Row + 1
End If
Next Cbar
End Sub

Displaying all shortcut menu items

The ShowShortcutMenuItems procedure that follows creates a table that lists all the first-level controls on every shortcut menu. For each control, the table includes the shortcut menu’s Index and Name, plus the ID, Caption , Type, Enabled, and Visible property values.

Das Makro ShowShortcutMenuItems erzeugt eine Tabelle, die alle Controls der ersten Ebene jedes Kontextmenüs auflistet.

Code:
Sub ShowShortcutMenuItems()
Dim Row As Long
Dim Cbar As CommandBar
Dim ctl As CommandBarControl
Range("A1:G1") = Array("Index", "Name", "ID", "Caption", _
"Type", "Enabled", "Visible")
Row = 2
Application.ScreenUpdating = False
For Each Cbar In Application.CommandBars
If Cbar.Type = 2 Then
For Each ctl In Cbar.Controls
Cells(Row, 1) = Cbar.Index
Cells(Row, 2) = Cbar.Name
Cells(Row, 3) = ctl.Id
Cells(Row, 4) = ctl.Caption
If ctl.Type = 1 Then
Cells(Row, 5) = "Button"
Else
Cells(Row, 5) = "Submenu"
End If
Cells(Row, 6) = ctl.Enabled
Cells(Row, 7) = ctl.Visible
Row = Row + 1
Next ctl
End If
Next Cbar
ActiveSheet.ListObjects.Add(xlSrcRange, _
Range("A1").CurrentRegion, , xlYes).Name = "Table1"
End Sub

"Kommentar bearbeiten" wird in der Liste "all shortcut menu items" nicht aufgeführt. "Kommentar bearbeiten" erscheint auch erst, wenn mit "Kommentar einfügen" ein Kommentar eingefügt wurde und gehört deshalb vielleicht nicht zu den first-level controls.

Wie komme ich an die Daten des controls "Kommentar bearbeiten"?

[attachment=39984]
[attachment=39986]
(28.08.2021, 08:44)schauan schrieb: [ -> ]Hallöchen,

VBA:

Zum Verhindern oder zumindest Erschweren könnte man ggf. den Menüpunkt Kommentar bearbeiten aus dem Kontextmenü entfernen. Dann geht aber auch Ändern nicht mehr.

'Menüpunkt "Kommentar bearbeiten" aus dem Kontextmenü entfernen' ist keine Lösung.

Zitat:Mit Customizing Context Menus in All Versions of Microsoft Excel, 04/27/2015 ergänzt um  & "    " & Cbar.Index werden den Kontextmenüs Namen und Index hinzugefügt.
Code:
Sub Add_Name_To_Contextmenus()
    Dim Cbar As CommandBar
    For Each Cbar In Application.CommandBars
        With Cbar
            If .Type = msoBarTypePopup Then
                On Error Resume Next
                With .Controls.Add(Type:=msoControlButton)
                    .Caption = "Name for VBA = " & Cbar.Name & "    " & Cbar.Index
                    .Tag = "NameButtonInContextMenu"
                End With
                On Error GoTo 0
            End If
        End With
    Next
End Sub
Mit nachfolgendem Schnipsel lassen sich alle controls eines Kontextmenüs anzeigen:
Code:
Sub Menu_Popups()
Application.CommandBars(40).ShowPopup
End Sub

Mit dem nachfolgendem Schnipsel wird "Kommentar einfügen" ausgegraut und damit inaktiv. "Kommentar bearbeiten" ist damit auch nicht mehr zugänglich.
Code:
Sub Control_Disable()
Application.CommandBars(36).FindControl(Id:=2031).Enabled = False
End Sub
40 ist der Index des Kontextmenüs Cell, wenn in der Ansicht "Normal" in eine Zelle geklickt wurde, bei Excel 2016 deutsch. Nicht nur das Kontextmenü Cell gibt es mit unterschiedlichen Indizes mehrmals. Achtung: 43 ist der Index des Kontextmenüs Cell, wenn in der Ansicht "Umbruchvorschau" eine Zelle selektiert wurde, bei Excel 2016 deutsch. Die Indizes sind bei unterschiedlichen Microsoft Excel Versionen und unterschiedlichen Sprachen unterschiedlich.

Das Kontextmenü Cell 40 enthält nur die control "Kommentar einfügen". "Kommentar bearbeiten" gibt es ausgegraut nicht. Warum? Wird mit "Kommentar einfügen" ein Kommentar eingefügt, dann wechselt "Kommentar einfügen" zu "Kommentar bearbeiten". "Kommentar einfügen" = "Kommentar bearbeiten", sobald ein Kommentar eingefügt wurde.

Wird "Kommentar einfügen" Enabled = False, dann lassen sich Kommentare nicht nur nicht mehr ändern, sondern es lassen sich überhaupt keine Kommentare mehr einfügen.

"Kommentar bearbeiten" lässt sich streng genommen nicht auf Enabled = False setzen.

Deshalb ist 'Menüpunkt "Kommentar bearbeiten" aus dem Kontextmenü entfernen' keine Lösung.


(28.08.2021, 08: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.

Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe.

Zitat:Excel 2016, Power Programming with VBA (Ich habe nur die englische Ausgabe.)

6 Understanding Excel’s Events

Excel is programmed to monitor many different events. These events can be classified as:

➤ Workbook events: Events that occur for a particular workbook. Examples of such events include Open (the workbook is opened or created), BeforeSave (the workbook is about to be saved), and NewSheet (a new sheet is added).

➤ Worksheet events: Events that occur for a particular worksheet. Examples include Change (a cell on the sheet is changed), SelectionChange (the user moves the cell indicator), and Calculate (the worksheet is recalculated).

➤ etc.
(28.08.2021, 08:44)schauan schrieb: [ -> ]Hallöchen,

VBA:

Zum Verhindern oder zumindest Erschweren könnte man ggf. den Menüpunkt Kommentar bearbeiten aus dem Kontextmenü entfernen. Dann geht aber auch Ändern nicht mehr.

'Menüpunkt "Kommentar bearbeiten" aus dem Kontextmenü entfernen' ist keine Lösung.

Zitat:Mit Customizing Context Menus in All Versions of Microsoft Excel, 04/27/2015 ergänzt um  & "    " & Cbar.Index werden den Kontextmenüs Namen und Index hinzugefügt.

Code:
Sub Add_Name_To_Contextmenus()
    Dim Cbar As CommandBar
    For Each Cbar In Application.CommandBars
        With Cbar
            If .Type = msoBarTypePopup Then
                On Error Resume Next
                With .Controls.Add(Type:=msoControlButton)
                    .Caption = "Name for VBA = " & Cbar.Name & "    " & Cbar.Index
                    .Tag = "NameButtonInContextMenu"
                End With
                On Error GoTo 0
            End If
        End With
    Next
End Sub

Mit nachfolgendem Schnipsel lassen sich alle controls eines Kontextmenüs anzeigen:

Code:
Sub Menu_Popups()
Application.CommandBars(35).ShowPopup
End Sub

Mit dem nachfolgendem Schnipsel wird "Kommentar einfügen" ausgegraut und damit inaktiv. "Kommentar bearbeiten" ist damit auch nicht mehr zugänglich.

Code:
Sub Control_Disable()
Application.CommandBars(35).FindControl(Id:=2031).Enabled = False
End Sub

35 ist der Index des Kontextmenüs Cell, wenn in der Ansicht "Normal" in eine Zelle geklickt wurde, bei Excel 2016 deutsch. Nicht nur das Kontextmenü Cell gibt es mit unterschiedlichen Indizes mehrmals. Achtung: 38 ist der Index des Kontextmenüs Cell, wenn in der Ansicht "Umbruchvorschau" eine Zelle selektiert wurde, bei Excel 2016 deutsch. Die Indizes sind bei unterschiedlichen Microsoft Excel Versionen und unterschiedlichen Sprachen unterschiedlich.

Das Kontextmenü Cell 35 enthält nur die control "Kommentar einfügen". "Kommentar bearbeiten" gibt es ausgegraut nicht. Warum? Wird mit "Kommentar einfügen" ein Kommentar eingefügt, dann wechselt "Kommentar einfügen" zu "Kommentar bearbeiten". "Kommentar einfügen" = "Kommentar bearbeiten", sobald ein Kommentar eingefügt wurde.

Wird "Kommentar einfügen" Enabled = False, dann lassen sich Kommentare nicht nur nicht mehr ändern, sondern es lassen sich überhaupt keine Kommentare mehr einfügen.

"Kommentar bearbeiten" lässt sich streng genommen nicht auf Enabled = False setzen.

Deshalb ist 'Menüpunkt "Kommentar bearbeiten" aus dem Kontextmenü entfernen' keine Lösung.


(28.08.2021, 08: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.

Dieses Schnitzel gehört nicht in ein Modul, sondern unter Microsoft Exel Objekte in DieseArbeitsmappe.

Zitat:Excel 2016, Power Programming with VBA (Ich habe nur die englische Ausgabe.)

6 Understanding Excel’s Events

Excel is programmed to monitor many different events. These events can be classified as:

➤ Workbook events: Events that occur for a particular workbook. Examples of such events include Open (the workbook is opened or created), BeforeSave (the workbook is about to be saved), and NewSheet (a new sheet is added).

➤ Worksheet events: Events that occur for a particular worksheet. Examples include Change (a cell on the sheet is changed), SelectionChange (the user moves the cell indicator), and Calculate (the worksheet is recalculated).

➤ etc.
Seiten: 1 2 3