Excel VBA質問箱 IV

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

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


5131 / 13644 ツリー ←次へ | 前へ→

【52405】処理順番が逆転してしまいます 07/11/13(火) 13:02 質問[未読]
【52408】Re:処理順番が逆転してしまいます Jaka 07/11/13(火) 14:30 発言[未読]
【52412】Re:処理順番が逆転してしまいます 07/11/13(火) 15:36 発言[未読]
【52416】Re:処理順番が逆転してしまいます Jaka 07/11/13(火) 16:52 発言[未読]
【52419】Re:処理順番が逆転してしまいます 07/11/13(火) 17:31 お礼[未読]
【52420】Re:処理順番が逆転してしまいます 07/11/13(火) 18:40 お礼[未読]
【52426】Re:処理順番が逆転してしまいます Jaka 07/11/14(水) 9:20 発言[未読]
【52469】Re:処理順番が逆転してしまいます 07/11/15(木) 11:09 お礼[未読]

【52405】処理順番が逆転してしまいます
質問    - 07/11/13(火) 13:02 -

引用なし
パスワード
   お世話になります。昨日初めてUserFormにトライしてみましたがうまくいきません。
内容は、指示命令の順番と実際の画面表示の順番が逆転するとうい現象がおきたことです。

『目的とこれまでの方法』 今は下記の(1)(3)をマクロ処理しています
(1)スライドショーをしながら個々の写真のファイル名を取得
(2)取得したファイル名の隣のセルに手作業で「削除」「A」「B」などを記入
(3)(2)の情報により指定フォルダーへの移動、削除などを実施、ファイル整理する

『やりたいこと』
上記の(1)〜(3)を一括で行ないたい・・・今回の質問は(1)〜(2)について
写真を見ながら次ぎのファイル操作への情報をコマンドボタンでシートへ入力したい。

『問題点★とこれまでの検証』
・UserForm1 Showを無効にした下記コードの Sub スライドショー() は正常稼動します

・★UserFormを作成し(コマンドボタン3個だけ)、マクロ稼動すると
「情報入力」→「UserForm表示」→「コマンドボタン押す」→「写真表示」→「UserForm表示」→以下省略
という順番の画面表示になり、目的の「写真を見てから情報入力」が出来ません。

・UserForm1 Show にブレークポイントを設定して画面を確認すると
「情報入力」→「写真表示」→「UserForm」→「コマンドボタン押す」→「写真表示」→省略
という順番で目的の順番に合っています。

なぜ、デパック処理と一括処理で画面表示の順番が変わるのかがわかりません。
初めてのUserFormで、目的の流れにするにはどうしたらよいのか分りません。
宜しくお願いします。
またデパック処理で困ったのですが、UserFormのコードを確認しながらシート画面を確認しようとしたら、画面切り替えが出来ませんでした。
これは正常なんでしょうか?UserFormのコードから抜け出すと大丈夫なんですが・・・。
恥ずかしい内容ですが、まわりに経験者もなく、本にも書いていませんでした。
以上、2点ご教授願います。

Sub スライドショー()

Dim FileName As String
Dim i As Integer, myFile As String
Dim intStr As String, strMsg As String, theVar As Integer
Dim wid As Integer, takasa As Integer, Ratio As Double

Sheets("データー").Select
  Columns("A:C").Clear
    Application.Goto reference:=Worksheets("表示板").Cells(1, 1), Scroll:=True

strMsg = "フォルダー名を入力。"
  intStr = InputBox(strMsg)
    If intStr = "" Then: Exit Sub
      Sheets("データー").Range("A1").Value = intStr
    theVar = MsgBox("拡大しますか、原寸表示しますか?" & Chr(1) & Chr(13) & _
      "はい→拡大  いいえ→原寸", vbYesNo)
  
Application.DisplayFullScreen = True
 
i = 1
 
FileName = Dir("C:\My Documents\仮保管写真\" & intStr & "\*.*")
 
Do While FileName <> ""
  myFile = FileName
  
  Application.ScreenUpdating = False
  Worksheets("表示板").Activate
  
If theVar = 6 Then
With ActiveSheet.Pictures.Insert("C:\My Documents\仮保管写真\" & intStr & "\" & myFile)
  .Top = Range("A1").Top
  .Left = Range("A1").Left
  .ShapeRange.LockAspectRatio = msoTrue
  .Width = 680
  .Height = 550
End With
Else
With ActiveSheet.Pictures.Insert("C:\My Documents\仮保管写真\" & intStr & "\" & myFile)
  .Top = Range("A1").Top
  .Left = Range("A1").Left
  .ShapeRange.LockAspectRatio = msoTrue
 ' .Width = 680
 ' .Height = 550
End With
End If

UserForm1.Show

  Application.ScreenUpdating = True
  Sheets("データー").Cells(i + 1, 1).Value = i
  Sheets("データー").Cells(i + 1, 2).Value = FileName
  
      Worksheets("表示板").Activate
      Application.Wait (Now + TimeValue("00:00:03"))
      ActiveSheet.Pictures(1).Delete
   
      FileName = Dir()
  
    i = i + 1
 Loop
 
MsgBox "終了しました"
Application.DisplayFullScreen = False
Sheets("目次").Select

End Sub

Private Sub UserForm_Initialize()

 With UserForm1
  CommandButton1.Caption = "A級"
  CommandButton2.Caption = "B級"
  CommandButton3.Caption = "×"
 End With
 
  With UserForm1
  .StartUpPosition = False
  .Top = 400
  .Left = 650
End With
End Sub

Private Sub CommandButton1_Click()
Dim myTag As String

myTag = CommandButton1.Caption
Sheets("データー").Select
Range("C65536").End(xlUp).Offset(1, 0).Select
Selection.Value = myTag
UserForm1.Hide
End Sub

Private Sub CommandButton2 、3は省略

【52408】Re:処理順番が逆転してしまいます
発言  Jaka  - 07/11/13(火) 14:30 -

引用なし
パスワード
   全部読んでないけど気になったところだけ、シートに画像を貼り付けているようですが
イメージを使った方が良いんじゃないかと思います。

フォーム、シートどちらにも置けますし。

イメージを使った場合の例(ユーザーフォームの場合)

Me.Image1.Picture = LoadPicture("フルパス")
DoEvents

ロードした画像は、イメージの各プロパティにて表示する大きさなどそれなりのものが用意されてます。

消す場合は、
Me.Image1.Picture = Nothing

【52412】Re:処理順番が逆転してしまいます
発言    - 07/11/13(火) 15:36 -

引用なし
パスワード
   ▼Jaka さん:回答ありがとうございます
10日前に別件で【52242】で質問した時に、ぱっせんじゃーさんからも写真の取り込みはImageの推奨を受けました。
UserFormは作ったことがないので、本で調べて、どうにかImageに写真を取り込むことは出来たんですが、写真の中央部だけが表示され修正が必要(これは簡単かなとは思っています)、UserFormの青色のCaptionがじゃま(消し方が分らない)など
もっと勉強する必要性を感じているところです(これまでは必要性感を感じませんでした)

Imageをうまく使いこなすことは、これから続けていきますが
今回は、投稿した疑問を解きたいと思っております。
宜しくお願いします。

【52416】Re:処理順番が逆転してしまいます
発言  Jaka  - 07/11/13(火) 16:52 -

引用なし
パスワード
   >処理順番が逆転してしまいます
これは、アロケーションテーブル?かなんだか知らないところに記録されている順番で探すから(多分)、処理の順番は自分でソートするなりして決めた方が良いと思います。
この記録された順は、どんなタイミングだか良く解らないけど、移動しただけでも書き換えられていると思います。

だから、Dir関数の中で1回1回処理をしないで、パスは先に全部取得してソートしてから処理するとか。

>デパック処理と一括処理で画面表示の順番が変わるのかがわかりません。
これは、どういうことなのか、原因が良く解りませんでした。


>またデパック処理で困ったのですが、UserFormのコードを確認しながらシート画面を確認しようとしたら、画面切り替えが出来ませんでした。
これは正常なんでしょうか?UserFormのコードから抜け出すと大丈夫なんですが・・・。
これって、VBエディタのツールバーにある「EXCEL表示」ボタンの事でしょうか?
普段は、VBエディタを小さくして、ステップ実行しているのであまり気にした事はありませんが、「EXCEL表示」ボタンでVBエディタとエクセルが切り替わりました。
違う?

ユーザーフォームが邪魔だから閉じたい?
実行中は閉じられません。

Private Sub UserForm_Initialize()

 With UserForm1  ←Me、もしくはない方が良いと思います。
  CommandButton1.Caption = "A級"
  CommandButton2.Caption = "B級"
  CommandButton3.Caption = "×"
 End With

  With UserForm1  ←Me、もしくはない方が良いと思います。
  .StartUpPosition = False
  .Top = 400
  .Left = 650
End With
End Sub

これも
UserForm1.Hide
 ↓
Me.Hide

>  Worksheets("表示板").Activate
>If theVar = 6 Then
>With ActiveSheet.Pictures.
アクティブシートとかあいまいにしないで決まっているなら、
Worksheets("表示板").Pictures.Insert・・・
とかはっきり指定した方が良いです。

>写真の中央部だけが表示され
これは、イメージプロパティのPictureSizeModeとか他で全表示とか位置を指定できます。

長々と頓珍漢なことを書いていたらすみません。

【52419】Re:処理順番が逆転してしまいます
お礼    - 07/11/13(火) 17:31 -

引用なし
パスワード
   ▼Jaka さん:ありがとうございます。
私のレベルでは、まだJakaさんのアドバイスを理解できるまでいっていませんが
これから、1個づつ確かめながら理解をしたいと思います。
ありがとうございました。

【52420】Re:処理順番が逆転してしまいます
お礼    - 07/11/13(火) 18:40 -

引用なし
パスワード
   ▼皆様、ご迷惑をかけました。
再度、見直して、
Application.ScreenUpdating = False
Application.ScreenUpdating = True
を削除したら、一部問題はありましたが予想した順番で表示されました。
投稿した時の現象との関係がいまいち分りませんが、取りあえず使える状況になりました。(投稿前に気が付くべきでした・・・反省)
Jakaさんはじめ、一緒に考えていただいた皆様、ありがとうございました。

【52426】Re:処理順番が逆転してしまいます
発言  Jaka  - 07/11/14(水) 9:20 -

引用なし
パスワード
   ▼岳 さん:
>Application.ScreenUpdating = False
>Application.ScreenUpdating = True
>を削除したら、一部問題はありましたが予想した順番で表示されました。
もしかしたら、これかな?とは思ってはいたんですが、
また頓珍漢なことを書きそうだったので....。
画面の更新を止めているから、入れ変わったのが反映されないのでは?
と、もっと速く書いておけばよかったですね。
すみません。

挿入や削除をした直後にDoEventsを入れておいた方が良いと思います。

【52469】Re:処理順番が逆転してしまいます
お礼    - 07/11/15(木) 11:09 -

引用なし
パスワード
   ▼Jaka さん:
最後まで気にかけて頂き、ありがとうございました。
返信に気づくのが遅くなってスイマセンでした。
問題の削除したコードは、それまであれこれ検討した残骸(その時は必要だった?)です。

>
>挿入や削除をした直後にDoEventsを入れておいた方が良いと思います。
上記アドバイスは、これから勉強します。

お礼が遅くなったこと、重ねてお詫び申し上げます。

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