時折、時が経つにつれて大きくなったり小さくなったりする魔法のボタンやリストボックスに悩まされるスプレッドシートに出くわします。
コード内でこれを指示しているものはありません。
他の誰かがこの喜びを経験しましたか?
この問題は、Windowsがモニターの非ネイティブ解像度を処理する方法に関連しているようで、いくつかの方法で回避できます
問題が発生すると、完全に悪夢になりますが、断続的にしか発生しません。
私たちは最近、数十人が使用するExcelワークシートをテストし、原因といくつかの可能な修正についての良いアイデアを開発しました。
原因は、画面がネイティブ解像度以外で使用されているセットアップに関連しているようです。これは、ユーザーがラップトップに外部モニターを接続し、結果の画面構成を慎重に選択しないと簡単に発生する可能性があります。たとえば、ラップトップがプロジェクター(おそらく1024 x 768のネイティブディスプレイを備えた古いもの)に接続されているが、ラップトップは1280 x 800であり、ユーザーがduplicateを選択した場合extendingではなくディスプレイ(Windows 7の「プロジェクターに接続」または「ディスプレイ」コントロールパネルの設定)、結果は両方の画面で予測できない、通常は不満足な画像になります両方とも非ネイティブ解像度で。これらの設定はほとんど常にExcelボタン、特にActiveXコントロールで深刻な問題を引き起こすことがわかりました。繰り返しクリックすると、読みにくくなることがあります。また、画面全体をカバーするように拡大する場合もあります。
ほとんどの場合、ユーザーにextend表示設定を使用するように指示し、結果が両方ともネイティブ解像度を使用する2つの画面である場合、問題は発生しません。
問題を最小限に抑えるコードベースの方法もあります。クリックしたときにボタンとコントロールの位置とサイズをリセットしようとしました(ボタンがたくさんあると面倒なコードがたくさん追加されます)。これは時々機能しました。また、autosizeプロパティをtrueからfalseに切り替えて(これは開発者モードで手動で機能します)、さらに多くのインスタンスを修正しましたが、明らかにすべてではありません。
原因は、リモートデスクトップ経由でアクセスしたマシンでスプレッドシートを開いている人が原因であり、ローカルマシンとリモートマシンで画面の解像度に違いがあることがわかりました。これは、コントロールツールボックスから使用できるコントロールに影響しますが、古い学校のフォームボタンコントロールを使用して問題が発生するため、満足できない答えはそれを使用することです。
この問題は、実際には画面の解像度が原因です。最も一般的には、ユーザーがExcelアプリケーションの使用中にプロジェクターまたはWebExに接続したときに発生します。
この問題の簡単な解決策は、ユーザーに周辺機器(プロジェクター)を接続せずにマシンを再起動し、Excelアプリケーションを再度開くように依頼することです。
これは何年も何度も私を悩ませてきました。周囲には多くの修正がありますが、ヒットとミスのようです。これは、Excel 2010(2014年5月に私に起こりました)で引き続き発生し、一部のレポートではExcel 2013でも引き続き発生しています。少なくとも私の状況(Excel 2010、RDPなし、印刷プレビューなし)に一致することがわかった最高の説明は次のとおりです。
Microsoft Excelサポートチームのブログ:ActiveXコントロールとフォームコントロールは、クリックまたは印刷プレビュー(Excel 2010)を行うとサイズが変更されます
(これはExcel 2013のユーザーには役に立たないかもしれません)
編集:technetリンクが機能しなくなった場合に詳細を追加すると、technetの記事は次のように述べています。
Excel 2010のMicrosoft Hotfix 2598144を最初にインストールします、利用可能: here .
SECONDLY、症状がの場合、「Excel 2010ワークシートでActiveXボタンをクリックすると、不正なサイズに変更される」場合、次のようにする必要があります。
または、症状がの場合、「Excel 2010でブックの印刷プレビューを表示した後、ボタンフォームコントロールがブックに正しく表示されない」場合、次にする必要があります:
または2回目、症状がの場合「ワークシートの印刷プレビューを表示した後、Excel 2010ワークシートでActiveXボタンが誤ったサイズに変更される」 、次にする必要があります:
幸運を。この問題はとても痛いです...
前述の修正、クリックイベント後のActive Xコントロールのプログラムによるサイズ変更/再配置、またはレジストリの変更(D Word LegacyAnchorResizeを使用)は、Excel 2010/Windows 7 64ビットの問題を解決しませんでした。
私のための解決策はここにありました: https://support.Microsoft.com/en-us/kb/838006
Excel 2010の場合、リンクは次のことを指示します。
この問題は非常にイライラします。私の経験では、プロパティは通常ActiveXオブジェクトで適切に設定されます。上からUDFを変更して、アクティブなシート上で実行できるようにしました。これにより、すべてが縮小前の状態に戻ります。
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
Excel 2010では常にこの問題に遭遇します(常にこのスレッドに戻ります)。100%の修正は見つかりませんでしたが、他の人に役立つ情報があると思います。
ボタンを退屈にいじりながら、各オブジェクトの異なるイベントが異なる問題を引き起こしていることを発見しました。例えば、
私のために働く唯一の解決策は、ランダムなサイズ変更を引き起こしていた各オブジェクトイベントのサイズ/テキストをリセットするコードを書くことです。そのようです ...
MaterialNumは入力ボックスの名前で、MouseDownはイベントです...
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
さらに、Format Controlのいくつかのオプションを変更する必要がありました(オブジェクトを右クリック> Format Control)。
また、[オブジェクトのプロパティ]ペイン(オブジェクトを右クリック> [プロパティ])でTakeFocusOnClickをfalseに設定します
はい、これは各オブジェクトで実行する必要があるため、時間がかかり退屈ですが、私にとっては唯一の修正方法です (そして、Microsoftがこれを修正するのを待つよりも迅速な修正のようです!!!)。うまくいけば、他の人を助けます。
これが他の人にも役立つことを願っています
ボタンが自由に浮遊するのではなく、セルの角に固定されるように定義されている可能性がありますか?
で確認してください
フォーマット|プロパティ|オブジェクトの配置
「セルで移動およびサイズ変更」以外のものを選択します
古いスレッドですが、私はこの問題を抱えていましたが、最初に問題のあるオプションボタンをグループ化し、次にAuto_Openでこのグループのサイズを設定(リセット)することで解決しました:
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.と2.を繰り返しただけで、ActiveXオブジェクトが再び動作しました
[Excel PROFESSIONAL PLUS 2016、32BITS、VERSION 1802、BUILLD 9029.2167]
私は同じ問題を抱えていましたが、Windows 10、64ビットのディスプレイスケーリングをカスタマイズすることで問題を解決できました。これは非常にシンプルで、単一のユーザーで機能します。以下の手順に従うだけで、フォームコントロール、シートシェイプ、図、ActiveXコントロールがすべて元のサイズに戻ります。コーディングや高度なトリック/奇術/ハックを行う必要はありません。指定されたリンクが壊れている場合は、これらの手順を繰り返します。
Windows 10でディスプレイのカスタムスケーリングを設定するには、次の手順を実行する必要があります。
設定を開きます。
これは古い記事ですが、この迷惑でストレスの多いExcelの問題に対処している人の役に立つことを願っています。
https://winaero.com/blog/set-display-custom-scaling-windows-10/
次のモジュールをすべてのマクロ対応ワークブックに追加することにより、企業レベルでこれを解決しました。
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
次のようにコードの最初と最後でそれらを呼び出すだけです:
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
私のモニターはすべてネイティブの解像度に設定されているように見え、謎が深まります。ただし、ボタンに何らかの操作(移動またはサイズ変更)を行うと、何らかの問題が解決することがわかりました。このルーチンは移動を自動化し、元の設定を復元します。
次のコードは、少なくともボタンについては問題に対処しているようです。
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
次のように呼び出します。
Private Sub MyButton_Click()
StablizeButton MyButton
' Remainder of code.
End Sub
これらの答えはどれも、コントロールを特定の行と列に固定しないことに気付きました。行/列はモニターの解像度よりも予測しやすい傾向があるため、これは私にとって非常にきれいに機能しました。
以下のサンプルは、基本的にオブジェクトが行くべき「測定」であり、Worksheet_Activate
コード。以下の例では、ボタンは常にD8:F10
。
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
結果は次のように表示されます。
すべてのオブジェクト(ボタン、テキストボックスなど)でこの問題を発見しました。複数のシートを印刷/印刷プレビューすると、シーケンスの最初のシートを除くすべてのシートがオブジェクトを移動またはサイズ変更しました。多くのテストを行った後、ページを拡大または縮小して元の設定に戻す最も簡単なソリューション。
これと関連する投稿で多くの解決策を試した後、Microsoftが投稿した別の問題の解決策も、少なくとも私が取り組んでいるコンテキスト内で特定の方法で適用すると、この特定の問題に対して確実に機能することを発見しました。これらの問題は、ここにあるラップトップに固有の解像度と、非ネイティブ解像度に切り替えるたびにPCで発生しました。つまり、ボタンは通常のサイズよりも大きく読み込まれ、クリックすると大きくなり、これらのボタンのテキストと画像は縮小します(少なくともテキストの設定は同じままなので、プログラムで元に戻す方法がわかりませんでした)その他)。これらは私の場合、断続的な問題ではありません。しかし、Microsoftが here の解決策を投稿した印刷プレビューを使用した後、断続的に問題が発生しました。私はこれを試しましたが、うまくいっているようです。
解決策:Excelの場合、アプリを閉じて、ボタンを表示したい解像度でC:\Users{UserName}\AppData\Local\Temp\Excel8.0
からMSForms.exdファイルを削除します。ローカルのAppData\Tempで他の.exdファイルを検索することもできます他のOfficeアプリのフォルダー。
前述したように、これは別の問題に対してマイクロソフトが提案したソリューションです。14年12月の更新プログラムがインストールされた後にボタンが機能しなくなります。 その記事へのリンクです。 その場合、それは1回限りの修正です。ここでは、解像度を変更するたびに行う必要があります。
これでExcel 2013を使用すると、Excelの実行中にディスプレイを拡張するたびに(および拡張機能を削除するたびに)これが発生します。
私が実装し始めた修正は、ボタンとボタンの代わりにハイパーリンクを使用して、他のすべてのactiveXコントロールがオンになっているユーザーフォームを開くことです。
私はこれをテストしませんでしたが、これはzoomプロパティに関係していると思います(activewindow.Zoom = false
を追加するかもしれません)。
また、workbook_openおよびwindow_activateで.Placement = xlMove
を定義するシェイプでループを実行できます。これは、シェイプがセルでサイズ変更されないようにします(ただし、セルとともに移動します)。
私はExcel 2013を使用していますが、この問題は一度もありませんでしたし、リモートで使用することもありません...
私は修正を見つけたかもしれません: "ワークシート上のすべての図形が一意の名前を持っていることを確認してください"(チェックボックス/ラジオボタン(OLEコントロール)を含む画像と他の図形タイプ...)
問題は断続的であるため、これを保証することはできません。この修正を使用して2つのフォームが正常に機能するようになりましたが、「two」は非常に小さなサンプルセットであり、偶然かもしれません。それでもなお、これらは私がとったステップです:
問題のシート(wsForm)のすべての形状を空白のシート(Sheet1)にリストしました。
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
次に、列Gの数式を使用して、列Aの各図形名をカウントしました。
= COUNTIF($ A $ 2:$ A $ 120、A2)
明らかに範囲を合わせて調整してください...その後、この列に「1」がないすべての形状でフィルタリングできます。 「右下のセル」は、ワークシートで図形を見つけるのに役立ちます。図形を選択して名前を変更し、Excelの左上にある名前/参照ボックスに新しい一意の値を入力します。
この形状リストは、長い間忘れられて使用されていない「死んだ」形状(高さ0または幅0)を見つけるのにも役立ちました。
これがお役に立てば幸いです!それについては...私は将来の発生のために私のために働くことを願っています...
コントロールをグループ化することは、私にとってはうまくいくようです。私は賛成票を投じるかコメントしますが、SOは私を許しません。W8ディスプレイスケーリングを使用し、高解像度のラップトップと古いモニターを使用している場合、この問題が頻繁に発生します。
これらの問題の一部は、設定時にコントロールのサイズが変更されることが原因である可能性があります。実行時のコントロールの高さの自動サイズ変更を防ぐために、リストボックスなどのコントロールのIntegralHeightプロパティをTrue(デフォルト)からFalseに変更する傾向があります。
この問題は、フリーズペインがオンになっている場合にのみ発生するようです。これは通常、ほとんどのアプリでオンになります。
解決策は、コントロールをグループ化することですが、グループがフリーズペイン領域を超えていることを確認することです。これを行うには、フリーズペイン領域の外側にコントロールを追加し、グループに追加しますが、表示されないようにコントロールを非表示にします。
とても奇妙です。 (コードまたはプロパティシートを使用して)クエリしても幅と高さのプロパティは縮小しませんが、明らかに変更されます。
プロパティシートを使用して、幅を標準の15から、たとえば14に変更し、次に15に戻すと、修正されることに気付きました。
以下のコードは私にとってはうまくいきます(そして、シートに面白い視覚効果があります。クリックすると、縮み、画面がちらつき、元に戻ります)。
コード内の私の解決策(チェックボックスのクリックイベントで):
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
前後に移動するボタンを表示したくない場合は、元の配置をコードに入れて、それらをチェックするだけです。ボタンがクリックされたときに画面更新をオフにし、コントロールで配置が異なるかどうかを確認し、必要に応じて元に戻し、必要に応じて画面更新をオンに戻します
DP
右下のスライダーを使用して、ズーム設定を100%に変更してみてください。サイズの異なる両方のモニターで修正しました。
このコードを.regファイルに追加します。ダブルクリックして確認します。 Excelを再起動します。
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
私は時々同じ問題を抱えています。私の場合、1つのファイルで100%複製できましたが、事実上同一のファイルでは一貫性がありませんでした。また、サイズエラーは永続的なものではないこともわかりました。ファイルを保存して再度開き、ボタンの外観を復元することができました。新しいウィンドウを作成して、破損したウィンドウを破棄することもできます。シングルモニター構成を使用します。
私にとっては、シートのHPageBreaksコレクションにアクセスしたときにボタンのサイズが変更されました。次のようにウィンドウビューを一時的に変更することで、この問題を回避できました。
ActiveWindow.View = xlPageBreakPreview
' do pagination stuff using HPageBreaks
ActiveWindow.View = xlNormalView
ネットを検索した後、.xlsmではなく.xlsb(バイナリ)としてファイルを保存することが最善の解決策です
しばらく前に始めたのは、すべてのコントロールのサイズを設定する単一のサブを持つことでした。その後、コントロールを拡大または縮小するコード内の任意のポイントからこのサブルーチンを実行できます。時には非常に手間のかかる作業ですが、ボタンがスプレッドシートを食べないようにします。
私は同様の問題を抱えていましたが、ページをズームインおよびズームアウトすることですぐに修正されることがわかりました。そのため、簡単な修正として、マクロの下部に次のコードを追加しました。私はエクセルの専門家ではありませんが、うまくいくようです。一番下の数字を変更すると、好みのズームが反映されます。
ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 90
動作し、単一のユーザーの問題を解決する修正を見つけました。あなたが私の小さな暴言を読みたくない場合は、解決策に直接スキップすることができます。
RANT:
私は恐竜以来、この愚かな問題を経験しています。その間、MicrosoftはOfficeスイートの無数のメジャーアップデートをリリースするための十分なリソースを持っていますが、この問題は未解決のままです。それは絶対に腹立たしいです。このような基本的なものが機能しない場合、アップグレードする理由はまったくありません。 MSの誰かがExcelのActiveXコントロールを高解像度ディスプレイで使用しているのは間違いないでしょうか?
デスクトップPCでこの問題は発生しませんでしたが、理由はわかりませんが、Surface Pro 4では、ActiveXコントロールをクリックするとバナナが表示されます。
今日、私はこれの一番下に行くことにしました。さまざまなフォーラムで提案されたすべてのソリューションを試しました(いずれも機能しません)。コントロールがグループ化されているかどうか、ロックされているかどうか、修正プログラムがインストールされているかどうかは関係ありません。
昨日、Traktor(DJソフトウェア)と呼ばれる別のアプリの動作に問題がありました。ディスプレイスケーリングが100%の正確な倍数ではない値に設定されていると、コントロールが飛び回っていました。ユーザーは、このアプリケーションの互換モードを編集することが解決策であることに気付きました。だから私はExcelでも同じことをしましたが、うまくいきました!これで、ディスプレイの解像度とスケーリングに関係なく、私のコントロールはそのままになります。
解決策:
(Excelが実行されていないことを確認してください)
これで、Excelはネイティブの解像度で実行され、ActiveXコントロールは問題なく動作します。唯一の欠点は、Excelが画面の拡大縮小に応答しないため、物事が思っているよりも少し小さく見える場合があることです。 Surface Pro 4では許容範囲を超えています
注:
1) Excel 2016では、Excel.EXEの[プロパティ]ダイアログに[互換性]タブが表示されないため、手順2と6が必要です。名前を変更すると、タブが使用可能になります。
2)このソリューションは、1ユーザーベースでのみ機能します。つまり、ActiveXコントロールを含むExcelファイルを同僚に送信すると、互換モード設定を変更しない限り、ActiveXコントロールはシステムに正しく表示されません。
)このハックを適用した後、以前に破損したExcelファイルを開くと、すべてのコントロールが元の意図した寸法を回復するように見えます。
テストしてコメントしてください。これが誰かの助けになることを願っています。
私はActiveXリストボックスにも問題があり、他の場所で次のことを発見し、これまでのところうまくいくようですが、スプレッドシートを他の人に渡すときに一緒に転送するはるかに簡単なソリューションでもあるようです:
「ListBoxにはIntegralHeightプロパティがあり、そのFALSE設定の副作用によりコントロールが斜めになりません。コマンドボタンにはセルの移動/サイズなどのプロパティがありますが、他のコントロールはそれほど優雅ではありません。」
そして、さらにアドバイスがあります: http://www.experts-exchange.com/articles/5315/Dealing-with-unintended-Excel-Active-X-resizing-quirks-VBA-code-simulates-self -correction.html