5

ユーザー フォームからシートをアクティブ化する際に問題があります。Excel 2003 から Excel 2010 では同じコードが正常に機能しますが、Excel 2013 では機能しません。

これは、問題を簡単に再現する方法です。

2 つのワークシートを含むワークブックがあり、 2 つのボタンが呼び出されたSheet1Sheet2します。Sheet1

  1. をクリックすると、1 行を使用してワークシートがButton1アクティブになります。Sheet2Macro1

    ThisWorkbook.Sheets("Sheet2").Select
    

    そこからデータをうまく編集できます。

  2. クリックButton2するUserForm1とポップアップが表示され、クリックするCommandButton1と同じ Macro1 が次のように呼び出されます。

    Unload Me
    Macro1
    

    ワークシートはアクティブになってSheet2いますが、そのデータを編集すると、実際に Sheet1 の対応するセルが更新されます。クリックするSheet1と、そこに入力されたデータが表示されます!

クリックしてワークシートに戻ると、シートが正しくSheet2アクティブになります。Sheet2

誰もそのような行動を見たことがありますか?はいの場合、適切にアクティブ化するためのコーディングの回避策はありますSheet2か?

4

9 に答える 9

3

うわー、2013 を使用してこのエラーを再現できました。これは、Excel の新しい SDI インターフェイスの素晴らしい失敗です。また興味深いことに奇妙なのは、次の手順に従うと

  • セルA1を選択Sheet1
  • セルB2を選択Sheet2
  • クリックButton2するとフォームが開きます
  • フォームの をクリックしCommandButton1ます (フォームが非表示になり、 がアクティブになりますSheet2) 。

B2cell onSheet2が選択されているように見えますが、入力を開始すると、テキストが cell に入りA1ます。Enterキーを押すと、テキストがセルB2に消えますSheet1

あなたはそれを信じるためにほとんどそれを見る必要があります.

機能することがわかった唯一のことは、Ontime関数を使用することです。

Private Sub CommandButton1_Click()
    Unload Me
    'Call Macro1
    Application.OnTime Now(), "Macro1"
End Sub

...しかし、これがすべての人に役立つわけではないと感じています

于 2014-05-30T05:40:49.880 に答える
2

Profexの回答に従って、Excel 2013でエラーを再現できました。問題を解決した回避策は、ユーザーフォームをモードレスにすることでした。

userform1.show vbModeless

モーダルフォームが必要な場合、この回避策が役に立たないことは理解していますが、次の人が時間を節約できることを願っています.

于 2015-03-04T19:54:09.447 に答える
1

同様の状況で考えられる回避策を見つけました。COM コードと XLL コードの両方を使用する複雑な Excel アドインがあります。(VBA なし) 上記と同様の問題が発生しました。(モーダル ダイアログからシートをアクティブにすると、新しいセル データが前のシートに表示されます)。

私たちの場合、コードがセル範囲の ".HasFormula" プロパティを評価したときにのみ問題が発生することがわかりました。論理的な説明はありません。コンパイルされた .Net コードがそのプロパティを評価した場合、バグが観察されます。コードがそのプロパティを無視した場合、バグは観察されませんでした。ワークシート (タブ) 間を手動で前後にクリックすると、バグがなくなることもわかりました。

于 2015-09-21T23:32:29.443 に答える
-1

worksheet_selectionchangeイベントのワークシート コードにme.activate.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Me.Select
End Sub
于 2015-11-29T14:43:49.793 に答える