ときどき、時間が経つにつれて大きくなったり小さくなったりする魔法のボタンやリストボックスに悩まされているスプレッドシートに出くわすことがあります。
コードにはこれを指示するものは何もありません。
他の誰かがこの喜びを経験しましたか?
ときどき、時間が経つにつれて大きくなったり小さくなったりする魔法のボタンやリストボックスに悩まされているスプレッドシートに出くわすことがあります。
コードにはこれを指示するものは何もありません。
他の誰かがこの喜びを経験しましたか?
この問題は、Windows がモニターの非ネイティブ解像度を処理する方法に関連しているようで、いくつかの方法で回避できます。
問題が発生すると完全な悪夢になる可能性がありますが、断続的にしか発生しません.
私たちは最近、数十人のユーザーが使用する Excel ワークシートをテストしており、原因といくつかの可能な修正について良いアイデアを開発しました。
原因は、画面がネイティブ解像度以外で使用されている設定に関連しているようです。これは、ユーザーが外付けモニターをラップトップに接続し、結果の画面構成を慎重に選択しない場合に簡単に発生する可能性があります。たとえば、ラップトップがプロジェクタ (ネイティブの 1024 x 768 ディスプレイを備えた古いもの) に接続されているが、ラップトップが 1280 x 800 であり、ユーザーがディスプレイを拡張するのではなく複製することを選択した場合 (「connect toプロジェクター」または Windows 7 の「ディスプレイ」コントロール パネル) を使用すると、結果は予測不可能で、通常、非ネイティブ解像度の両方の画面で不十分な画像になります。これらの設定はほとんどの場合Excel ボタン、特に ActiveX コントロールで深刻な問題を引き起こします。クリックを繰り返すと、縮小して読みにくくなることがあります。また、拡大して画面全体をカバーすることもあります。
ほとんどの場合、拡張ディスプレイ設定を使用するようにユーザーに指示し、その結果、両方ともネイティブ解像度を使用する 2 つの画面が表示される場合、問題は見られません。
問題を最小限に抑えるためのコードベースの方法もあります。ボタンとコントロールがクリックされたときの位置とサイズをリセットしようとしました (ボタンがたくさんある場合は、面倒なコードがたくさん追加されます)。これは時々うまくいきました。また、autosize プロパティを true から false に切り替えたり (これは開発者モードで手動で機能します)、これでより多くのインスタンスが修正されましたが、明らかにすべてではありませんでした。
原因は、リモート デスクトップ経由でアクセスしたマシンでスプレッドシートを開いており、ローカル マシンとリモート マシンの画面解像度に違いがあることであることがわかりました。これは、コントロール ツールボックスから使用できるコントロールに影響しますが、古い学校のフォーム ボタン コントロールを使用して問題をまだ経験していないため、満足のいく答えはそれを使用することではありません。
この問題は、実際には画面の解像度が原因です。最も一般的なのは、ユーザーが Excel アプリケーションの使用中にプロジェクタまたは WebEx に接続したときに発生します。
この問題の簡単な解決策は、周辺機器 (プロジェクタ) を接続せずにマシンを再起動し、Excel アプリケーションを再度開くようにユーザーに依頼することです。
前述の修正、クリック イベント後の Active X コントロールのサイズ変更/位置変更、またはレジストリの変更 (D ワード LegacyAnchorResize を使用) は、Excel 2010/Windows 7 64 ビットで問題を解決しませんでした。
私にとっての解決策は、https ://support.microsoft.com/en-us/kb/838006 で見つかりました。
Excel 2010 の場合、リンクは次のように指示します。
とても奇妙です。幅と高さのプロパティは、(コードまたはプロパティ シートを使用して) クエリを実行しても縮小されませんが、明らかに変更されます。
プロパティ シートを使用して幅を標準の 15 からたとえば 14 に変更し、次に 15 に戻すと修正されることに気付きました。
以下のコードは私にとってはうまくいきます(そして、シートに面白い視覚効果があります:クリックすると、縮小し、画面がちらつき、元に戻ります)。
コード内のMY SOLUTION(チェックボックスのクリックイベントで):
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
ボタンが自由に浮かぶのではなく、セルの角にくっつくように定義されている可能性がありますか?
で確認してください
フォーマット | プロパティ | オブジェクトの配置
「セルで移動してサイズを変更する」以外のものを選択します
マクロが有効なすべてのワークブックに次のモジュールを追加することで、会社レベルでこれを解決しました。
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
私はこの問題を数回経験しており、解決するために次のことを行いました。
この問題は、ラップトップをプロジェクターに接続してファイルを保存したすべての原因であることがわかりました。その後、問題が発生するたびに、手順 1. と 2. を繰り返すだけで、ActiveX オブジェクトが再び動作するようになりました。
同様の問題がありましたが、ページをズームインおよびズームアウトすることですぐに修正されることがわかりました. したがって、簡単な修正として、マクロの下部に以下のコードを追加しました。私はExcelの達人ではありませんが、うまくいくようです。一番下の数字を変更して、好みのズームを反映する必要があります。
ActiveWindow.Zoom = 100
ActiveWindow.Zoom = 90
ネットを検索した後、ファイルを .xlsm ではなく .xlsb (バイナリ) として保存するのが最善の解決策であると思われます。
私はこれをテストしませんでしたが、これは zoom プロパティに関係していると思います (おそらく add activewindow.Zoom = false
)。
また、 workbook_open および window_activate で定義されている形状でループを実行できます.Placement = xlMove
。これは、形状がセルでサイズ変更されないようにするためです (ただし、セルと共に移動します)。
私はExcel 2013を使用していますが、この問題は一度もありませんでした。また、リモートで使用したこともありません...小さなアイデアを支援しようとしています
フリーズ ペインがオンになっている場合にのみ問題が発生するようです。これは通常、コマンド ボタンなどをスクロールして表示されない場所に配置するため、ほとんどのアプリでオンになります。
うまくいった解決策は、コントロールをグループ化することですが、グループがフリーズ ペイン領域を超えて拡張されるようにすることです。これを行うには、フリーズ ペイン領域の外にコントロールを追加し、それをグループに追加しますが、コントロールを非表示にして表示されないようにします。
現在、Excel 2013 を使用していますが、Excel の実行中にディスプレイを拡張するたびに (および拡張機能を削除するたびに)、これが発生します。
私が実装し始めた修正は、ボタンの代わりにハイパーリンクを使用し、他のすべてのactiveXコントロールをオンにしてユーザーフォームを開くことです。
この投稿と関連する投稿で多くの解決策を試した後、Microsoft が投稿した別の問題の解決策が、少なくとも私が作業しているコンテキスト内で、特定の方法で適用すると、この特定の問題に対しても確実に機能することがわかりました。これらの問題は、ここにあるラップトップのネイティブの解像度と、非ネイティブの解像度に切り替えるたびに PC 上で発生しました。つまり、ボタンが通常よりも大きなサイズでロードされ、クリックすると大きくなり、これらのボタンのテキストと画像が縮小します (少なくともテキストの設定は同じままだったので、プログラムで元に戻す方法がわかりませんでした)私の場合、これらは断続的な問題ではありませんでした。Microsoftが解決策を投稿した印刷プレビューを使用した後、断続的な問題が発生しましたここに。私はこれを試してみましたが、うまくいっているようです。
解決策: Excel の場合は、アプリを閉じて、ボタンを表示する解像度で MSForms.exd ファイルを削除しC:\Users{UserName}\AppData\Local\Temp\Excel8.0
ます。他の Office アプリのローカル AppData\Temp フォルダーで他の .exd ファイルを検索することもできます。 .
前述したように、これは Microsoft が別の問題 (2014 年 12 月の更新プログラムのインストール後にボタンが機能しなくなる) に対して提案した解決策です。その記事へのリンクはこちらです。その場合、それは 1 回限りの修正です。ここでは、解像度を変更するたびに行う必要がある場合があります。
コントロールをグループ化するとうまくいくようです。私は賛成またはコメントしますが、そうはさせません。この問題は、W8 ディスプレイ スケーリングを使用していて、高解像度のラップトップと古いモニターを使用している場合に頻繁に発生することに注意してください。
私はActiveXリストボックスにも問題があり、他の場所で次のことを見つけました.
「ListBox には IntegralHeight プロパティがあり、FALSE 設定の副作用によってそのコントロールが斜めにならないようにします。また、コマンド ボタンにはセルの移動/サイズ変更などのプロパティがありますが、他のコントロールはそれほど優雅ではありません。」
ボタンが前後に移動するのを表示したくない場合は、元の配置をコードに入れ、それらに対してチェックすることができます。ボタンがクリックされたときの画面更新をオフにし、コントロールの配置が異なるかどうかを確認し、必要に応じて元に戻して、画面更新をオンに戻します
DP
この問題もありました。現在、期待どおりに機能しているため、何が修正されたか正確には思い出せません... コントロールをグループ化してみてください。それが私たちの決意だったと思います。