Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


868 / 13645 ツリー ←次へ | 前へ→

【77839】excel2003で作ったVBAの誤作動?バグ?をなくしたい たろう 16/1/9(土) 16:03 質問[未読]
【77841】Re:excel2003で作ったVBAの誤作動?バグ?... β 16/1/9(土) 17:26 発言[未読]
【77844】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 10:55 発言[未読]
【77845】Re:excel2003で作ったVBAの誤作動?バグ?... Jaka 16/1/12(火) 11:43 発言[未読]
【77846】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 11:54 発言[未読]
【77848】Re:excel2003で作ったVBAの誤作動?バグ?... Jaka 16/1/12(火) 13:28 発言[未読]
【77850】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 13:56 お礼[未読]
【77847】Re:excel2003で作ったVBAの誤作動?バグ?... β 16/1/12(火) 12:05 発言[未読]
【77849】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 13:51 質問[未読]
【77853】Re:excel2003で作ったVBAの誤作動?バグ?... β 16/1/12(火) 14:36 発言[未読]
【77854】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 15:12 発言[未読]
【77855】Re:excel2003で作ったVBAの誤作動?バグ?... β 16/1/12(火) 15:29 発言[未読]
【77856】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/12(火) 16:13 発言[未読]
【77857】Re:excel2003で作ったVBAの誤作動?バグ?... β 16/1/12(火) 19:58 発言[未読]
【77859】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/13(水) 9:19 お礼[未読]
【77858】Re:excel2003で作ったVBAの誤作動?バグ?... ichinose 16/1/12(火) 21:31 発言[未読]
【77860】Re:excel2003で作ったVBAの誤作動?バグ?... たろう 16/1/13(水) 9:22 お礼[未読]

【77839】excel2003で作ったVBAの誤作動?バグ?を...
質問  たろう  - 16/1/9(土) 16:03 -

引用なし
パスワード
   最近サポート終了に伴い社内のExcelが2003から2013に変わりました。
古いExcelで作ったマクロが動かないとまでは行かないですが、どうもおかしな動作が起きたり、突然強制終了されてまた最初からやる羽目になったりして困っています。
それを何とか解消したいと思っています。解決策がわかる方が居りましたら教えてください。ちなみにxls形式、xlsm形式どちらでも同様の症状が出ます。

症状
ユーザーフォームのボタンからSheet1とSheet2を並べて表示させるマクロなんですが特にエラーなどは起きず動作は完了します。内容は以下です。

Sub Sheet2に記入()
'
' Sheet2に記入 Macro
'
  Application.ScreenUpdating = False
  Unload UserForm1         
  
  Sheets("Sheet1").Select
  ActiveWindow.NewWindow
  Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical, ActiveWorkbook:=True
  Sheets("Sheet2").Select
  Range("B40").Select
  
  Application.ScreenUpdating = True
End Sub

この後、Sheet2にSheet1を見ながら入力していくのですが、その時のシートの状態がおかしくなります。アクティブになっているSheet2のセルの選択、入力はできますが、縦スクロールをしようとしたらSheet1がスクロールしてしまう。その時Sheet1はアクティブにできない。といった症状になります。
セルに何か入力する、又は一度Sheet2から別のシートを選ぶと症状は解消されます。
ただ、解消させようとしている途中で強制終了になることがたまにあります。

自分でいろいろ解決策を探ってみたのですが、ユーザーフォームが絡むと起きるようだということまでしかわかりませんでした。

【77841】Re:excel2003で作ったVBAの誤作動?バグ...
発言  β  - 16/1/9(土) 17:26 -

引用なし
パスワード
   ▼たろう さん:

回答ではありません。
状況報告のみ。

こちらの xl2013 で xlsブックを作成し
標準モジュールにそちらのコードをそのまま貼り付け。
ユーザーフォームモジュールに

Private Sub CommandButton1_Click()
  Sheet2に記入
End Sub

こんなコードを書いて、ユーザーフォームを表示し、CommandButton1 をクリックしましたが
何回もブック閉じて開いて、やりなおしても何の問題も発生せず、常に Sheet2 のスクロールは正常ですし
もちろん、それにつられて Sheet1 がスクロールするということはおこりません。
また、Sheet1 への入力も、問題なく可能ですし、スクロールもできます。

【77844】Re:excel2003で作ったVBAの誤作動?バグ...
発言  たろう  - 16/1/12(火) 10:55 -

引用なし
パスワード
   ▼β さん:
検証ありがとうございます。

再検証したところユーザーフォームの開き方に問題があるようです。
通常、セルをダブルクリックしたらユーザーフォームが開くように下のコードを入れています。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  UserForm1.Show
End Sub

このコード以外の開き方だとおっしゃるとおり問題は起きませんでした。
ただ何が問題なのかよくわかりません。。

【77845】Re:excel2003で作ったVBAの誤作動?バグ...
発言  Jaka  - 16/1/12(火) 11:43 -

引用なし
パスワード
   >  UserForm1.Show

の前に
Cancel = True
を入れてみると?

久々の登場で勘。

【77846】Re:excel2003で作ったVBAの誤作動?バグ...
発言  たろう  - 16/1/12(火) 11:54 -

引用なし
パスワード
   ▼Jaka さん:
>>  UserForm1.Show
>
>の前に
>Cancel = True
>を入れてみると?
>
>久々の登場で勘。

ありがとうございます。
やってみましたが駄目でした。

【77847】Re:excel2003で作ったVBAの誤作動?バグ...
発言  β  - 16/1/12(火) 12:05 -

引用なし
パスワード
   ▼たろう さん:

jakaさんのレスで、セルの編集状態が悪さをしているのかなと思い
ためしに、アップされたまま、Cancel=true を入れない形のシートイベントでユーザーフォームを開きましたが
これも、全く問題ないですね。

不思議です。

実際にCommandButton をクリックした時に処理しているコードを
そのままコピペで貼り付けてアップされてはいかがでしょう。

【77848】Re:excel2003で作ったVBAの誤作動?バグ...
発言  Jaka  - 16/1/12(火) 13:28 -

引用なし
パスワード
   2013持っていないやつが、返信するもんじゃないな。
最近、エクセル触ってないし。

ひょっとしたら、97時代のおまじないが聞いたりして。
2013持ってないのでこれ以上想像できません。
ごめんなさい。

Cancel = True
ActiveCell.Activate

【77849】Re:excel2003で作ったVBAの誤作動?バグ...
質問  たろう  - 16/1/12(火) 13:51 -

引用なし
パスワード
   ▼β さん:

>実際にCommandButton をクリックした時に処理しているコードを
>そのままコピペで貼り付けてアップされてはいかがでしょう。
新しいブックに下のコードで誤作動が起きるんですがβさんの環境では起きないということなんでしょうか?

ThisWorkbookに

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  UserForm1.Show
End Sub

UserForm1に

Private Sub CommandButton1_Click()
Sheet2に記入
End Sub

Module1に
Sub Sheet2に記入()
'
' Sheet2に記入 Macro
'
  Application.ScreenUpdating = False
  Unload UserForm1
 
  Sheets("Sheet1").Select
  ActiveWindow.NewWindow
  Windows.Arrange ArrangeStyle:=xlArrangeStyleVertical, ActiveWorkbook:=True
  Sheets("Sheet2").Select
  Range("B40").Select
 
  Application.ScreenUpdating = True
End Sub

【77850】Re:excel2003で作ったVBAの誤作動?バグ...
お礼  たろう  - 16/1/12(火) 13:56 -

引用なし
パスワード
   ▼Jaka さん:
やはり駄目でした
わざわざありがとうございました。

【77853】Re:excel2003で作ったVBAの誤作動?バグ...
発言  β  - 16/1/12(火) 14:36 -

引用なし
パスワード
   ▼たろう さん:

はい。
こちらで検証した際にはシート1のシートモジュールに書いていたのですが
今回アップされた、Thisworkbookモジュールに変更しても、全く異常は発生していません。

ところで、本筋のコメントではないのですが

・どのシートのダブルクリックでも受ける という仕様なんですね?
・すでに、画面が分割されている状態でユーザーフォームを表示させて分割すると
 どんどんこままくというか、画面がたくさんできていきますけど
 それはそれでいいのですね?

【77854】Re:excel2003で作ったVBAの誤作動?バグ...
発言  たろう  - 16/1/12(火) 15:12 -

引用なし
パスワード
   ▼β さん:
なんでなんだろう??うちの社内の他のPCでも全く同じ症状が出るので皆同じと思っていました。ダブルクリックやコマンドボタンを使わないでマクロからユーザーフォームを開くと症状が出ないことは解ったんですがそれではあまりにも不便なんですよね。なにか替わりの方法などあればいいのですが

>・どのシートのダブルクリックでも受ける という仕様なんですね?

そういう仕様です。
見積書なんですが流れとしては、シート1で数量計算して、分割しシート2に転記して、もう一度ユーザーフォームを開いて合計を押すと自動計算されて、その時に分割が解除されるという流れです。ユーザーフォームには分割、自動計算、自動で範囲指定して印刷などいろいろ入れてあるのでどこでも開ける方が都合がいいんです。

>・すでに、画面が分割されている状態でユーザーフォームを表示させて分割すると
> どんどんこままくというか、画面がたくさんできていきますけど
> それはそれでいいのですね?

再分割という動作をすることはないのでいいのですが、他のブックを開いたままだと3つ以上に分割されるのでよくはないです。前回作ったときに、うまくいかなかったのでその点については諦めていました。

【77855】Re:excel2003で作ったVBAの誤作動?バグ...
発言  β  - 16/1/12(火) 15:29 -

引用なし
パスワード
   ▼たろう さん:

不思議ですねぇ。

ところで、ユーザーフォームの機能が、CommandButton1をクリックして
画面分割を行うだけということであれば、わざわざユーザーフォームを表示しなくても
ダブルクリックで、直接、その処理を行えばよろしいのでは?

もし、このユーザーフォームには、そのほかの様々な機能もある、また
CommandButton1_Click も、アップされたコードだけではなく、いろいろ記述されている
ということであれば、コメントしましたように、ユーザーフォームモジュールをすべて
アップされると、皆さんから新しい発見レスも寄せられるかもしれません。

【77856】Re:excel2003で作ったVBAの誤作動?バグ...
発言  たろう  - 16/1/12(火) 16:13 -

引用なし
パスワード
   ▼β さん:
>ところで、ユーザーフォームの機能が、CommandButton1をクリックして
>画面分割を行うだけということであれば、わざわざユーザーフォームを表示しなくても
>ダブルクリックで、直接、その処理を行えばよろしいのでは?

ダブルクリックでしたい動作が一つではないのでユーザーフォームにその動作を詰め込んでいるのでそういうわけにはいかないんですよね。

>もし、このユーザーフォームには、そのほかの様々な機能もある、また
>CommandButton1_Click も、アップされたコードだけではなく、いろいろ記述されている
>ということであれば、コメントしましたように、ユーザーフォームモジュールをすべて
>アップされると、皆さんから新しい発見レスも寄せられるかもしれません。

いや他の機能もありますが、新しいブックに【77849】に書いたコードだけで問題が起きるので他のコードは関係ないと思います。他の動作は問題出ないんですよ。

【77857】Re:excel2003で作ったVBAの誤作動?バグ...
発言  β  - 16/1/12(火) 19:58 -

引用なし
パスワード
   ▼たろう さん:

なるほど。
UserFormモジュールは、このコードだけ(INITIALIZEもなし)なんですね。

こちらでは、アップされたコードだけで動かして障害が出ませんので
これ以上はお手伝いできませんねぇ。
他の方からのアドバイスがあればいいですね。

【77858】Re:excel2003で作ったVBAの誤作動?バグ...
発言  ichinose  - 16/1/12(火) 21:31 -

引用なし
パスワード
   ▼たろう さん:
>ダブルクリックやコマンドボタンを使わないでマクロからユーザーフォームを開くと症状が出ないことは解ったんですがそれではあまりにも不便なんですよね。なにか替わりの方法などあればいいのですが
 Ontimeメソッドで試してみては いかがですか?

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  Application.OnTime Now(), "thisworkbook.ufmshow"
  Cancel = True
End Sub
Sub ufmshow()
  UserForm1.Show
End Sub

【77859】Re:excel2003で作ったVBAの誤作動?バグ...
お礼  たろう  - 16/1/13(水) 9:19 -

引用なし
パスワード
   ▼β さん:
長々と付き合ってくれてありがとうございました。

【77860】Re:excel2003で作ったVBAの誤作動?バグ...
お礼  たろう  - 16/1/13(水) 9:22 -

引用なし
パスワード
   ▼ichinose さん:

解決しました!
他の方の環境では再現されない誤作動だったので半分諦めてました。
ありがとうございました。

868 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free