wake-up-neo.com

Excel: die unglaublichen Steuerelemente zum Verkleinern und Erweitern

Gelegentlich stelle ich mich in einer Tabelle vor, die unter magischen Schaltflächen oder Listenfeldern leidet, die im Laufe der Zeit größer oder kleiner werden.

Nichts im Code weist darauf hin.

Hat noch jemand diese Freude erlebt? 

55
Nick

Das Problem scheint auf die Art und Weise zu beruhen, wie Windows nicht native Auflösungen auf Monitoren verarbeitet, und kann auf verschiedene Weise vermieden werden.

Das Problem kann ein kompletter Albtraum sein, wenn es passiert, aber es passiert nur zeitweise. 

Wir haben vor kurzem ein Excel-Arbeitsblatt getestet, das von ein paar Dutzend Personen verwendet wurde, und eine gute Idee der Ursache und mögliche Korrekturen entwickelt. 

Die Ursache scheint auf ein Setup zurückzuführen zu sein, bei dem Bildschirme in einer anderen als der nativen Auflösung verwendet werden. Dies kann leicht passieren, wenn ein Benutzer einen externen Monitor an einen Laptop anschließt und die resultierende Bildschirmkonfiguration nicht sorgfältig auswählt. Wenn zum Beispiel ein Laptop an einen Projektor angeschlossen ist (vielleicht ein alter mit einem nativen 1024 x 768-Display), der Laptop jedoch ein 1280 x 800 ist und der Benutzer wählt duplizieren die Anzeige anstelle von Erweitern it (Einstellungen unter "An Projektor anschließen" oder "Anzeige" in Windows 7). Das Ergebnis ist ein unvorhersehbares und in der Regel unbefriedigendes Bild auf beiden Bildschirmen, wobei beide nicht in nativen Auflösungen enthalten. Wir haben festgestellt, dass diese Einstellungen fast immer ernste Probleme mit Excel-Schaltflächen verursachen, insbesondere mit ActiveX-Steuerelementen. Bei wiederholten Klicks schrumpfen sie manchmal bis zur Unlesbarkeit. andere Male erweitern sie sich auf den gesamten Bildschirm.

Wenn wir Benutzer anweisen, die Anzeigeeinstellung extend zu verwenden und das Ergebnis auf zwei Bildschirmen mit nativen Auflösungen zu sehen ist, wird das Problem meistens nicht erkannt.

Es gibt auch codebasierte Möglichkeiten, das Problem zu minimieren. Wir haben versucht, die Position und Größe der Schaltflächen und Steuerelemente zurückzusetzen, wenn Sie darauf geklickt haben (was zu langwierigem Code führt, wenn Sie viele Schaltflächen verwenden). Das hat manchmal funktioniert. Wir haben auch versucht, die autosize-Eigenschaft von wahr nach falsch und zurück zu ändern (dies funktioniert im Entwicklermodus manuell) und behebt mehr Instanzen, aber anscheinend nicht alle. 

27
matt_black

als Ursache wurde festgestellt, dass Personen das Spreasheet auf einem Computer öffnen, auf den über Remotedesktop zugegriffen wird. Die Bildschirmauflösung unterscheidet sich zwischen lokalen und Remote-Computern. Dies betrifft die Steuerelemente, die in der Steuerelement-Toolbox zur Verfügung stehen, aber um das Problem mit einem alten Steuerelement für Formulartasten zu erfahren, ist meine unbefriedigende Antwort die Verwendung dieses Befehls.

11
Nick

Dieses Problem ist tatsächlich auf die Bildschirmauflösung zurückzuführen. Meistens tritt es auf, wenn der Benutzer bei Verwendung der Excel-Anwendung eine Verbindung zu einem Projektor oder zu WebEx herstellt.

Eine einfache Lösung für dieses Problem besteht darin, den Benutzer aufzufordern, den Computer ohne Peripheriegeräteanschlüsse (Projektor) neu zu starten und die Excel-Anwendung erneut zu öffnen.

5
TheG

Das plagt mich seit Jahren, ein- und ausgeschaltet. Es gibt eine Reihe von Korrekturen in der Umgebung, aber sie scheinen voll und ganz zu sein .. Es war immer noch in Excel 2010 (passiert mir im Mai 2014) passiert und ist In einigen Berichten wird in Excel 2013 immer noch vorgetragen .. Die beste Beschreibung, die ich gefunden habe und die zumindest meiner Situation entspricht (Excel 2010, kein RDP beteiligt, keine Druckvorschau) ist hier:

Microsoft Excel-Supportteam-Blog: Die Größe von ActiveX- und Formularsteuerelementen ändert sich, wenn Sie darauf klicken oder eine Druckvorschau ausführen (in Excel 2010)

(Dies kann für Benutzer von Excel 2013 möglicherweise nicht hilfreich sein.)

BEARBEITEN: Hinzufügen von Details für den Fall, dass der Technet-Link jemals tot wird, sagt der Technet-Artikel:

Installieren Sie zunächst Microsoft Hotfix 2598144 für Excel 2010, verfügbar: hier .

SECONDLY, wenn Ihr Symptom lautet "Eine ActiveX-Schaltfläche ändert sich nach dem Anklicken in einem Excel 2010-Arbeitsblatt in die falsche Größe", sollten Sie:

  • Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit in das Feld Öffnen ein und klicken Sie auf OK. 
  • Suchen Sie den folgenden Registrierungsunterschlüssel HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options, und wählen Sie ihn aus
  • Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf den Wert DWORD (32-Bit).
  • Geben Sie LegacyAnchorResize ein und drücken Sie die Eingabetaste.
  • Klicken Sie mit der rechten Maustaste das Sie im Detailfenster auf LegacyAnchorResize, und klicken Sie dann auf Ändern.
  • Geben Sie im Feld Wert den Wert 1 ein, und klicken Sie auf OK.
  • Beenden Sie den Registrierungseditor.

OR ZWEIT, wenn Ihr Symptom ist "Ein Formularsteuerelement für Schaltflächen wird in einer Arbeitsmappe nach Anzeige der Druckvorschau der Arbeitsmappe in Excel 2010 falsch angezeigt", sollten Sie:

  • Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit in das Feld Öffnen ein und klicken Sie auf OK.
  • Suchen Sie den folgenden Registrierungsunterschlüssel, und wählen Sie ihn aus: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf den Wert DWORD (32-Bit).
  • Geben Sie MultiSheetPrint ein und drücken Sie die Eingabetaste.
  • Klicken Sie im Detailbereich mit der rechten Maustaste auf MultiSheetPrint, und klicken Sie dann auf Ändern.
  • Geben Sie im Feld Wert den Wert 1 ein, und klicken Sie auf OK.
  • Wählen Sie den folgenden Registrierungsunterschlüssel erneut aus: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf den Wert DWORD (32-Bit).
  • Geben Sie LegacyAnchorResize ein und drücken Sie die Eingabetaste.
  • Klicken Sie mit der rechten Maustaste das Sie im Detailfenster auf LegacyAnchorResize, und klicken Sie dann auf Ändern.
  • Geben Sie im Feld Wert den Wert 1 ein, und klicken Sie auf OK.
  • Beenden Sie den Registrierungseditor.

OR ZWEIT, wenn Ihr Symptom ist "Wenn eine ActiveX-Schaltfläche in einem Excel 2010-Arbeitsblatt in einer falschen Größe angezeigt wird, nachdem Sie die Druckvorschau des Arbeitsblatts angezeigt haben", sollten Sie:

  • Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit in das Feld Öffnen ein und klicken Sie auf OK.
  • Suchen Sie den folgenden Registrierungsunterschlüssel, und wählen Sie ihn aus: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf den Wert DWORD (32-Bit).
  • Geben Sie LegacyAnchorResize ein und drücken Sie die Eingabetaste.
  • Klicken Sie mit der rechten Maustaste das Sie im Detailbereich auf LegacyAnchorResize, und klicken Sie dann auf Ändern.
  • Geben Sie im Feld Wert den Wert 1 ein, und klicken Sie auf OK.
  • Beenden Sie den Registrierungseditor.

Viel Glück. Dieses Problem ist so schmerzhaft ...

5
peterg4000

Die zuvor besprochenen Korrekturen, die Active X-Steuerelemente nach Klickereignissen programmatisch neu zu positionieren/zu positionieren oder die Registrierung (mit dem D Word LegacyAnchorResize) zu ändern, konnten das Problem mit Excel 2010/Windows 7 64 Bit nicht lösen.

Die Lösung für mich wurde hier gefunden: https://support.Microsoft.com/en-us/kb/838006

Für Excel 2010 weist der Link auf Folgendes hin:

  1. Beenden Sie alle laufenden Programme.
  2. Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit in das Feld Öffnen ein und klicken Sie auf OK.
  3. Suchen Sie und klicken Sie auf den folgenden Registrierungsschlüssel:
  4. HKEY_CURRENT_USER\Software\Microsoft\office\14.0\common
  5. Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf Schlüssel.
  6. Geben Sie Draw ein und drücken Sie die Eingabetaste.
  7. Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie dann auf DWORD-Wert.
  8. Geben Sie UpdateDeviceInfoForEmf ein und drücken Sie die Eingabetaste
  9. Klicken Sie mit der rechten Maustaste auf UpdateDeviceInfoForEmf, und klicken Sie dann auf Ändern. 10. Geben Sie im Feld Wert den Wert 1 ein, und klicken Sie dann auf OK.
  10. Klicken Sie im Menü Datei auf Beenden, um den Registrierungseditor zu schließen.
4
baffled68

Dieses Problem ist sehr frustrierend. Ich habe die Erfahrung gemacht, dass die Eigenschaften der ActiveX-Objekte normalerweise richtig eingestellt sind. Ich habe eine UDF von oben so geändert, dass sie nur auf einem aktiven Blatt ausgeführt werden kann. Dadurch wird alles zurückgesetzt, wie es vor dem Verkleinern war. 

Public Sub ResizeAllOfIt()
Dim myCtrl As OLEObject

For Each myCtrl In ActiveSheet.OLEObjects

 Dim originalHeight
 Dim originalWidth

 originalWidth = myCtrl.width
 originalHeight = myCtrl.height

  myCtrl.height = originalHeight - 1 
  myCtrl.height = originalHeight 
  myCtrl.width = originalWidth

Next myCtrl

End Sub
1
Joe Stellato

In Excel 2010 bin ich ständig auf dieses Problem gestoßen (was mich immer wieder zu diesem Thread zurückbringt). Ich habe zwar keine 100% ige Lösung gefunden, aber ich glaube, ich habe einige Informationen, die anderen helfen können.

Während ich mühsam mit den Tasten herumspielte, entdeckte ich, dass VERSCHIEDENE EREIGNISSE für jedes Objekt unterschiedliche Probleme verursachten. Zum Beispiel,

  • Schaltfläche A - Die Größe der Schaltfläche wird beim MouseDown-Ereignis verkleinert
  • Schaltfläche B - Der Text wird beim MouseMove-Ereignis vergrößert (aber erst nachdem die Schaltfläche angeklickt wurde. AKA, ich klicke auf eine Schaltfläche, der Code wird ausgeführt, der Mauszeiger bleibt über der Schaltfläche, und sobald ich die Maus bewege, würde der Text angezeigt.) vergrößern)
  • Texteingabefeld A - Der Text wird beim MouseUp-Ereignis vergrößert
  • Texteingabefeld B - Der Text wird beim LostFocus-Ereignis vergrößert

Die einzige Lösung, die für mich funktioniert, ist das Schreiben von Code, um die Größe/den Text für jedes Objektereignis zurückzusetzen, das die zufällige Größenänderung verursacht hat. Wie so ...

Dabei ist MaterialNum der Name des Eingabefelds und MouseDown das Ereignis ...

Private Sub MaterialNum_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    ' Reset the size, font style, and size
    With Worksheets("QuoteForm").Shapes("MaterialNum")
        .Height = 21
        .Width = 101.25
        .Left = 972.75
        .Top = 87
        With .DrawingObject.Object.Font
            .Name = "Arial"
            .Size = 12
        End With
    End With

End Sub

Außerdem musste ich einige Optionen in der Formatsteuerung ändern (Rechtsklickobjekt> Formatsteuerung):

  • Registerkarte Größe: Das Kontrollkästchen Seitenverhältnis sperren ist markiert
  • Registerkarte "Eigenschaften": Das Kontrollkästchen "Objekt drucken" ist nicht markiert

Im Bereich Objekteigenschaften (Rechtsklick auf Objekt> Eigenschaften) setze ich TakeFocusOnClick auf false

Ja, das ist zeitaufwändig und langwierig, da es mit jedem Objekt gemacht werden muss, aber es ist die einzige Lösung, die für mich funktioniert (Und es scheint eine schnellere Lösung zu sein, als darauf zu warten, dass Microsoft dies korrigiert !!!). Hoffentlich hilft es anderen.

Ich hoffe, andere finden das hilfreich

1
Angelo Bovino

Könnte es sein, dass der Knopf definiert ist, um an den Ecken einer Zelle zu haften, anstatt frei zu schweben? 

Überprüfen Sie es mit 

Format | Eigenschaften | Objektpositionierung 

und wählen Sie alles außer "Verschieben und Größe mit Zellen"

1
PA.

Ein alter Thread, aber ich hatte dieses Problem und löste es, indem ich zunächst die Optionsfelder, in denen das Problem auftrat, in meinem Fall gruppierte und dann die Größe dieser Gruppe in einem Auto_Open als solche festlegte (zurücksetzte):

With ThisWorkbook
    .Worksheets("1").Shapes("grpInput").Width = 383.1
    .Worksheets("2").Shapes("grpSuite").Width = 383.1
    .Worksheets("3").Shapes("grpLoc").Width = 383.1
    .Worksheets("4").Shapes("grpDecision").Width = 383.1
End With
1
MX313

Ich hatte dieses Problem einige Male und zur Lösung habe ich Folgendes getan:

  1. Durchsuchen Sie mein Laufwerk C:\nach einer Datei mit der Erweiterung '.exd'.
  2. Löschen Sie diese Dateien (es ist in Ordnung, dies zu tun)
  3. Implementieren Sie Code, mit dem die ActiveX-Objekte bei jedem Öffnen des Arbeitsblatts neu dimensioniert werden

Ich habe festgestellt, dass dieses Problem alles verursacht hat, als wir den Laptop an einen Projektor angeschlossen und die Datei gespeichert haben. Jedes Mal, wenn das Problem auftauchte, wiederholte ich die Schritte 1. und 2. und meine ActiveX-Objekte verhalten sich erneut

1
Robitron

[Excel PROFESSIONAL PLUS 2016, 32BITS, VERSION 1802, BUILD 9029.2167]

Ich hatte das gleiche Problem und Ich konnte das Problem durch Anpassen der Anzeigeskalierung in Windows 10, 64 Bit lösen. Es ist extrem einfach und funktioniert für einen einzelnen Benutzer. Folgen Sie einfach den Anweisungen unten und Sie haben alle Formularsteuerelemente, Blattformen, Figuren und ActiveX-Steuerelemente auf ihre ursprüngliche Größe zurückgesetzt. Keine Notwendigkeit, zu programmieren oder fortgeschrittene Trickery/Zauberei/Hacks auszuführen. Wenn der bereitgestellte Link unterbrochen wird, wiederholen Sie einfach diese Schritte.

  1. Um die benutzerdefinierte Skalierung für die Anzeige in Windows 10 festzulegen, müssen Sie folgende Schritte ausführen.

    Einstellungen öffnen.

  2. Gehen Sie zu Einstellungen - Anzeige.
  3. Klicken Sie links unter "Maßstab und Layout" auf den Link "Benutzerdefinierte Skalierung".
  4. Die Seite "Benutzerdefiniertes Layout" wird geöffnet. Geben Sie einen neuen Wert für die Skalierung des Prozentsatzes an. [USE 100] !! ... und voilá. Schließen Sie Excel und öffnen Sie es erneut.

Es ist ein alter Beitrag, aber ich hoffe, es hilft jedem, der sich mit diesem nervigen und stressigen Excel-Problem befasst.

https://winaero.com/blog/set-display-custom-scaling-windows-10/

1
Luiz Vaughan

Wir haben dies gerade auf Unternehmensebene gelöst, indem Sie zu allen makroaktivierten Arbeitsmappen das folgende Modul hinzugefügt haben:

Option Explicit

Type ButtonSizeType
    topPosition As Single
    leftPosition As Single
    height As Single
    width As Single
End Type

Public myButton As ButtonSizeType

Sub GetButtonSize(cb As MSForms.CommandButton)
' Save original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    myButton.topPosition = cb.top
    myButton.leftPosition = cb.Left
    myButton.height = cb.height
    myButton.width = cb.width
End Sub

Sub SetButtonSize(cb As MSForms.CommandButton)
' Restore original button size to solve windows bug that changes the button size to
' adjust to screen resolution, when not in native resolution mode of screen
    cb.top = myButton.topPosition
    cb.Left = myButton.leftPosition
    cb.height = myButton.height
    cb.width = myButton.width
End Sub

Rufen Sie sie einfach am Anfang und am Ende Ihres Codes auf:

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
' Turn off ScreenUpdating to make sure the user dosn't see the buttons flicker
GetButtonSize CommandButton1 ' Saves original button size
' Do cool things
'
'
'
SetButtonSize CommandButton1 ' Restores original button size

Application.ScreenUpdating = True
' Turn ScreenUpdating back on when you're done
End Sub
1
Excel Novice

Meine Monitore scheinen alle auf native Auflösungen eingestellt zu sein, was das Rätsel vertieft. Ich habe jedoch festgestellt, dass das Problem durch das Ausführen von ETWAS auf die Schaltfläche (Verschieben oder Ändern der Größe) irgendwie behoben wird. Diese Routine automatisiert das Verschieben und stellt dann die ursprüngliche Einstellung wieder her.

Der folgende Code scheint das Problem zu beheben, zumindest für Schaltflächen.

Public Sub StablizeButton(oButton As MSForms.CommandButton)

    With oButton

        ' If True, then temporary distortion is remedied only by clicking somewhere.
        ' If False, then the temporary distortion is remedied merely by moving the mouse pointer away.
        .TakeFocusOnClick = False
        ' For best results:  In the Properties Sheet, initialize to False.

        .Left = .Left + 200             ' Move the button 200 units to the right, ...
        .Left = .Left - 200             ' ... and then move it back.

    End With

End Sub

Rufen Sie es wie folgt auf:

Private Sub MyButton_Click()
    StablizeButton MyButton

    ' Remainder of code.
End Sub
1
Paul Margus

Ich habe festgestellt, dass keine dieser Antworten das Steuerelement an eine Zeile/Spalte bindet. Das hat für mich ziemlich sauber funktioniert. Grundsätzlich "messen" Sie, wohin das Objekt gehen soll, und setzen Sie es einfach in den Aktivierungscode. Im folgenden Beispiel rastet die Schaltfläche immer bei D8: F10 ein. Zeilen/Spalten sind in der Regel zuverlässiger als die Computerauflösung.

Private Sub Worksheet_Activate()
'Note this is done in the sheet code, not a Module.



With Me.Shapes("CommandButton1")

    .Left = Me.Range("A1:C1").Width
    .Top = Me.Range("a1:a7").Height
    .Width = Me.Range("D1:F1").Width
    .Height = Me.Range("A8:a10").Height

End With

End Sub

Das Ergebnis wird in etwa so aussehen:

 enter image description here

1
PGCodeRider

Ich habe dieses Problem bei allen Objekten (Schaltflächen, Textfeldern usw.) gefunden. Wenn ich mehrere Blätter in der Vorschau drucke/drucke, sind alle Blätter außer dem ersten in der Folge Objekte verschoben oder deren Größe geändert. Nach vielen Tests ist die einfachste Lösung, um die Seite nach oben oder unten zu zoomen und zur ursprünglichen Einstellung zurückzukehren.

0
user4995156

Nachdem ich viele der Lösungen für diese und verwandte Beiträge ausprobiert hatte, stellte ich fest, dass die Lösung eines anderen Problems, das Microsoft veröffentlicht hatte, auch bei diesem speziellen Problem zuverlässig funktioniert hat, zumindest in dem Kontext, in dem ich arbeite. Ich habe diese Probleme in einer Auflösung erlebt, die von den hier angebotenen Laptops stammt, und auf einem PC, wenn ich auf eine nicht native Auflösung umschalten würde. Das heißt, Schaltflächen, die größer als normal geladen werden und beim Anklicken größer werden, und Text und Bilder in diesen Schaltflächen schrumpfen (und zumindest die Einstellung für den Text blieb gleich, sodass ich keine Möglichkeit sah, ihn programmgesteuert zu ändern.) oder anders.) Dies waren in meinem Fall keine zeitweiligen Probleme. Ich hatte jedoch zeitweise Probleme, nachdem ich die Druckvorschau verwendet hatte, für die Microsoft eine Lösung für hier veröffentlicht hat. Ich habe es versucht und es scheint zu funktionieren.

Die Lösung: Schließen Sie für Excel die App und löschen Sie die MSForms.exd-Datei aus C:\Users{UserName}\AppData\Local\Temp\Excel8.0, während Sie sich in der Auflösung befinden, in der Sie die Schaltflächen anzeigen möchten. Sie können auch nach anderen .exd-Dateien in Ihrem lokalen AppData\Temp-Ordner nach anderen Office-Dateien suchen Apps.

Wie bereits erwähnt, handelt es sich hierbei um eine von Microsoft vorgeschlagene Lösung für ein anderes Problem: Die Tasten funktionieren nach der Installation der Updates von Dec '14 nicht mehr. Hier ist der Link zu diesem Artikel. In diesem Fall handelt es sich um eine einmalige Korrektur. Hier müssen Sie dies möglicherweise jedes Mal tun, wenn Sie die Auflösung ändern.

0
tbaker818

Jetzt mit Excel 2013 und dies geschieht JEDER Zeit, wenn ich meine Anzeige verlängere, während Excel ausgeführt wird (und jedes Mal, wenn ich die Erweiterung entferne).

Das Update, das ich mit dem Implementieren begonnen habe, besteht darin, Hyperlinks anstelle von Schaltflächen zu verwenden und ein Benutzerformular mit allen anderen ActiveX-Steuerelementen zu öffnen.

0
jamheadart

ich habe das nicht getestet, aber ich denke, das hat mit der Zoom-Eigenschaft zu tun (vielleicht activewindow.Zoom = false).

Kann auch eine Schleife für Shapes ausführen, die .Placement = xlMove in workbook_open und window_activate definieren. Dies dient dazu, Shapes daran zu hindern, deren Größe mit Zellen zu ändern (wird sich jedoch mit ihnen bewegen).

ich benutze Excel 2013 und hatte dieses Problem noch nie, ich verwende es auch niemals aus der Ferne ... und versuche nur, mit kleinen Ideen zu helfen

0

Ich habe möglicherweise ein Update gefunden: " Stellen Sie sicher, dass alle Formen auf dem Arbeitsblatt eindeutige Namen haben " (einschließlich Kontrollkästchen/Optionsfelder (OLE-Steuerelemente) sowie Bilder und andere Formtypen ...).

Da das Problem intermittierend ist, kann ich dies nicht garantieren. Ich habe zwei Formulare, die jetzt mit diesem Fix funktionieren, aber "zwei" ist ein sehr kleiner Sampleset und könnte nur ein Zufall sein. Dennoch sind dies Schritte, die ich unternommen habe:

Ich habe alle Formen im Problemblatt (wsForm) auf einem leeren Blatt (Blatt1) aufgelistet:

Sub ListShapes()
Dim spShape As Shape
Dim intRow As Integer


Sheet1.Range("A1:F1") = Array("Name", "Left", "Top", "Width", "Height", "Bottom Right Cell")
intRow = 2

For Each spShape In wsForm.Shapes        

    Sheet1.Cells(intRow, 1).Value = spShape.Name
    Sheet1.Cells(intRow, 2).Value = spShape.Left
    Sheet1.Cells(intRow, 3).Value = spShape.Top
    Sheet1.Cells(intRow, 4).Value = spShape.Width
    Sheet1.Cells(intRow, 5).Value = spShape.Height
    Sheet1.Cells(intRow, 6).Value = spShape.BottomRightCell.Address

    intRow = intRow + 1

Next
End Sub

Ich zählte dann jeden Formnamen in Spalte A mit einer Formel in Spalte G:

= COUNTIF ($ A $ 2: $ A $ 120, A2)

Offensichtlich den Bereich anpassen ... Sie können dann nach allen Formen filtern, die in dieser Spalte keine "1" haben. Mit der "unteren rechten Zelle" können Sie die Form in Ihrem Arbeitsblatt finden: Umbenennen Sie sie, indem Sie die Form auswählen und anschließend im Feld Name/Referenz oben links in Excel einen neuen eindeutigen Wert eingeben. 

Diese Formliste half auch, einige "tote" Formen (0 Höhe oder 0 Breite) zu finden, die lange vergessen und nicht verwendet wurden. 

Ich hoffe das funktioniert für dich! Ich hoffe, dass es für mich bei zukünftigen Ereignissen funktioniert ...

0
Simon

Das Gruppieren der Steuerelemente scheint für mich zu funktionieren. Ich würde das bestätigen oder kommentieren, aber SO lässt mich nicht. Beachten Sie, dass dieses Problem häufig auftritt, wenn Sie W8-Anzeigeskalierung verwenden und über einen hochauflösenden Laptop und einen älteren Monitor verfügen.

0
user2573274

Einige dieser Probleme können auf Steuerelemente zurückzuführen sein, deren Größe sich beim Auffüllen ändert. Ich neige dazu, die IntegralHeight - Eigenschaft von Steuerelementen wie Listenfeldern von True (Standard) auf False zu ändern, um eine automatische Größenänderung der Steuerelementhöhe zur Laufzeit zu verhindern. 

0
MagicWand

Ich finde, dass das Problem nur dann auftritt, wenn das Einfrieren von Fenstern aktiviert ist. Dies ist normalerweise in den meisten Apps aktiviert, da Sie die Befehlsschaltflächen usw. an einem Ort platzieren, an dem sie nicht aus dem Blickfeld gerollt werden.

Die Lösung, die sich als erfolgreich erwiesen hat, besteht darin, die Steuerelemente zu gruppieren und gleichzeitig sicherzustellen, dass die Gruppe über den Bereich der Frostschutzfenster hinausragt. Dazu füge ich ein Steuerelement außerhalb des Bereichs der Freeze-Fenster hinzu, füge es der Gruppe hinzu, blende es aber auch aus, damit es nicht sichtbar ist.

0
Steve Bayliss

Es ist sehr komisch. Die Eigenschaften Width & Height werden nicht verkleinert, wenn sie abgefragt werden (entweder im Code oder mithilfe des Eigenschaftenblatts), sie ändern sich jedoch anscheinend. 

Ich habe festgestellt, dass wenn ich das Eigenschaftsblatt verwende und die Breite von Standard 15 in 14 und dann von BACK in 15 ändere, es dies fixiert.

Der folgende Code funktioniert für mich (und hat einen amüsanten visuellen Effekt auf dem Arbeitsblatt: Sie klicken, sie schrumpft, der Bildschirm flackert und dehnt sich zurück aus).

MEINE LÖSUNG im Code (auf dem Klickereignis für das Kontrollkästchen):

Dim myCtrl As OLEObject
For Each myCtrl In ActiveSheet.OLEObjects
  myLab = myCtrl.Name
  myCtrl.Height = 14 ' to "wake up" the property.
  myCtrl.Height = 15 ' to reset it back to normal
  myCtrl.Width = 12 ' just making sure
Next myCtrl
0
jfkelley

Wenn Sie nicht möchten, dass sich die Schaltfläche vor- und zurückbewegt, können Sie die ursprüngliche Platzierung in Ihren Code einfügen. Deaktivieren Sie die Bildschirmaktualisierung, wenn Sie auf die Schaltfläche klicken. Überprüfen Sie, ob sich die Platzierung auf dem Steuerelement unterscheidet

DP 

0
DPIII

Ändern Sie die Zoomeinstellung mit dem rechten unteren Schieberegler auf 100%. Es wurde für mich auf beiden Monitoren unterschiedlicher Größe behoben. 

0
Jimmy

Fügen Sie diesen Code einer REG-Datei hinzu. Doppelklicken Sie auf und und bestätigen Sie. Starten Sie Excel neu. 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\options]
"LegacyAnchorResize"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Draw]
"UpdateDeviceInfoForEmf"=dword:00000001
0
Bjørn Austrud

Ich habe manchmal das gleiche Problem. In meinem Fall konnte ich sie zu 100% in einer Datei replizieren, aber bei einer praktisch identischen Datei war sie inkonsistent. Ich fand auch, dass der Größenfehler nicht dauerhaft war - ich konnte die Datei speichern und erneut öffnen, um das Erscheinungsbild der Schaltfläche wiederherzustellen. Ich könnte auch ein neues Fenster erstellen und dann das beschädigte Fenster verwerfen. Ich verwende eine Monitorkonfiguration. 

Für mich wurde die Schaltfläche beim Zugriff auf die Sammlung HPageBreaks des Blatts geändert. Ich konnte das Problem vermeiden, indem ich die Fensteransicht vorübergehend wie folgt änderte:

ActiveWindow.View = xlPageBreakPreview
  ' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView
0
R Neame

Nach dem Durchsuchen des Netzes scheint es die beste Lösung zu sein, die Datei als .xlsb (binär) statt als .xlsm zu speichern

0
Cement Sneakers

Was ich vor einiger Zeit angefangen habe, war ein einziges Sub, das die Größe aller meiner Steuerelemente festlegt. Ich kann dieses Sub dann von jedem Punkt im Code ausführen, an dem die Steuerelemente wachsen oder schrumpfen. Es ist manchmal eine besonders heikle Arbeit, aber es hält meine Schaltflächen davon ab, meine Tabelle zu essen.

0
Danno

Ich hatte ein ähnliches Problem, fand jedoch heraus, dass es durch das Ein- und Auszoomen der Seite schnell behoben wurde. Deshalb habe ich den untenstehenden Code als schnelle Lösung an der Unterseite meines Makros hinzugefügt. Ich bin kein Excel-Quiz, aber es scheint gut zu funktionieren. Ändern Sie die untere Zahl, um den bevorzugten Zoom anzuzeigen.

ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 90
0
CantExcel

Ich habe ein Update gefunden, das funktioniert und das Problem für einen einzelnen Benutzer löst. Wenn Sie meinen kleinen Spruch nicht lesen möchten, können Sie direkt zur Lösung springen.

RANT:

Ich habe dieses dumme Problem seit den Dinosauriern. Microsoft hat in der Zwischenzeit zahlreiche Ressourcen zur Verfügung gestellt, um unzählige wichtige Updates für die Office-Suite bereitzustellen, und dennoch bleibt dieses Problem unberücksichtigt. Es ist absolut ärgerlich. Ich habe überhaupt keinen Grund zu einem Upgrade, wenn grundlegende Dinge wie diese nicht funktionieren. Sicher verwendet jemand bei MS ActiveX-Steuerelemente in Excel direkt auf einer hochauflösenden Anzeige, oder?

Ich habe dieses Problem auf meinem Desktop-PC nicht erlebt, keine Ahnung, warum, aber auf meinem Surface Pro 4 gehen meine ActiveX-Steuerelemente immer dann in die Bananen, wenn ich darauf klicke.

Heute habe ich beschlossen, dem auf den Grund zu gehen. Ich suchte hoch und niedrig und probierte jede Lösung aus, die in verschiedenen Foren vorgeschlagen wurde (von denen keine übrigens funktioniert). Es spielt keine Rolle, ob die Steuerelemente gruppiert sind oder nicht, ob gesperrt ist oder nicht, ob Hotfix installiert ist oder nicht.

Gestern hatte ich ein anderes Problem mit fehlerhaften Dingen in einer anderen App namens Traktor (DJ-Software), bei der die Steuerung herumsprang, wenn die Skalierung der Anzeige auf einen Wert eingestellt wurde, der kein genaues Vielfaches von 100% war. Ein Benutzer fand, dass die Lösung darin bestand, den Kompatibilitätsmodus für diese Anwendung zu bearbeiten. Also habe ich dasselbe für Excel gemacht, und es hat funktioniert! Jetzt bleiben meine Steuerelemente unabhängig von der Bildschirmauflösung und Skalierung.

LÖSUNG:

(Stellen Sie sicher, dass Excel nicht ausgeführt wird.)

  1. Suchen Sie Excel.EXE (auf meinem System ist dies unter C:\Programme\Microsoft Office\Office16\Excel.EXE zu finden).
  2. Benennen Sie "Excel.EXE" in "_Excel.EXE" um (ändern Sie es grundsätzlich in etwas anderes)
  3. Klicken Sie mit der rechten Maustaste auf die umbenannte Excel.EXE-Datei, und wechseln Sie zu Eigenschaften> Registerkarte Kompatibilität> Abschnitt Einstellungen
  4. Setze Override-Skalierungsverhalten mit hoher DPI = Aktiviert und Skalierung wird von = Anwendung ausgeführt
  5. OK klicken
  6. Umbenennen in "_Excel.EXE" zurück in "Excel.EXE"

Jetzt wird Excel mit seiner nativen Auflösung ausgeführt, und ActiveX-Steuerelemente laufen nicht aus. Der einzige Nachteil ist, dass Excel nicht auf die Bildschirmskalierung reagiert, sodass die Dinge möglicherweise etwas kleiner aussehen, als man möchte. Auf meinem Surface Pro 4 ist mehr als akzeptabel

ANMERKUNGEN:

1) Die Schritte 2 und 6 sind in Excel 2016 erforderlich, da das Dialogfeld "Eigenschaften" für Excel.EXE die Registerkarte "Kompatibilität" nicht bietet. Nach dem Umbenennen wird die Registerkarte verfügbar.

2) Diese Lösung funktioniert nur für Einzelbenutzer. Wenn Sie also eine Excel-Datei mit ActiveX-Steuerelementen an Ihre Kollegen senden, werden die ActiveX-Steuerelemente auf ihrem System nicht korrekt angezeigt, es sei denn, sie ändern die Einstellungen des Kompatibilitätsmodus.

3) Nach dem Anwenden dieses Hacks scheinen sich zuvor beschädigte Excel-Dateien beim Öffnen selbst zu reparieren, wobei alle Steuerelemente ihre ursprünglichen Abmessungen wiederherstellen.

Bitte testen und kommentieren, ich hoffe das kann jemandem helfen, Prost!

0
Scoox

Ich hatte das Problem auch mit ActiveX-Listboxen und fand Folgendes an anderer Stelle, und es scheint bisher zu funktionieren, und es scheint auch die bei weitem einfachste Lösung, die bei der Übergabe der Tabelle an jemanden weitergegeben wird:

"Während die ListBox über eine IntegralHeight-Eigenschaft verfügt, deren Nebeneffekt einer FALSE-Einstellung dazu führt, dass das Steuerelement nicht schief läuft, und während Befehlsschaltflächen Eigenschaften wie Verschieben/Größe mit Zellen usw. haben, sind andere Steuerelemente nicht so elegant."

Und sie haben einige weitere Ratschläge: http://www.experts-exchange.com/articles/5315/Handhabung-mit-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulate- Selbstkorrektur.html

0
ROB