Excel VBA質問箱 IV

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

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


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

【19545】プログレスバーの使い方を教えて頂けませんか? タフマン 04/11/8(月) 22:26 質問[未読]
【19551】Re:プログレスバーの使い方を教えて頂けま... ichinose 04/11/8(月) 23:47 発言[未読]
【19553】Re:プログレスバーの使い方を教えて頂けま... タフマン 04/11/9(火) 8:59 お礼[未読]
【19559】Re:プログレスバーの使い方を教えて頂けま... 角田 04/11/9(火) 13:46 回答[未読]
【19564】Re:プログレスバーの使い方を教えて頂けま... タフマン 04/11/9(火) 18:31 質問[未読]
【19566】Re:プログレスバーの使い方を教えて頂けま... 角田 04/11/9(火) 18:55 回答[未読]
【19576】Re:プログレスバーの使い方を教えて頂けま... タフマン 04/11/9(火) 21:07 質問[未読]
【19584】Re:プログレスバーの使い方を教えて頂け... 角田 04/11/9(火) 22:27 回答[未読]
【19587】Re:プログレスバーの使い方を教えて頂け... タフマン 04/11/9(火) 23:05 お礼[未読]

【19545】プログレスバーの使い方を教えて頂けませ...
質問  タフマン  - 04/11/8(月) 22:26 -

引用なし
パスワード
   下記の標準モジュールの処理を行う最プログレスバーコントロールを
ユーザーフォームで表示(動作)させたいのですが標準モジュール
及びユーザーフォームにはどのように記述すればよいのでしょうか、
どなたか教えて頂けないでしょうか。

Sub システム終了()

  Application.Visible = False

  Dim ShVisibility As Integer
  
  counter = counter - 1
  
    If counter <= -1 Then
    
      ShVisibility = True
      counter = 0
      
    Else
    
      ShVisibility = xlVeryHidden
      
    End If
    
  Worksheets("Sheet2").Visible = ShVisibility
  Worksheets("マスター1").Visible = ShVisibility
  Worksheets("触らないで!").Visible = ShVisibility
  Worksheets("担当部署(A)").Visible = ShVisibility
  Worksheets("担当部署(B)").Visible = ShVisibility
  Worksheets("担当部署(C)").Visible = ShVisibility
  Worksheets("担当部署(D)").Visible = ShVisibility
  Worksheets("担当部署(E)").Visible = ShVisibility
  Worksheets("グラフ").Visible = ShVisibility
  Worksheets("Sheet3").Visible = ShVisibility
  Worksheets("Sheet4").Visible = ShVisibility
    
  counter = counter + 1
  
    If counter >= 2 Then
    
      ShVisibility = True
      counter = 0
      
    Else
    
      ShVisibility = xlVeryHidden
      
    End If
  
  Worksheets("マスター1").Visible = ShVisibility
  Worksheets("触らないで!").Visible = ShVisibility
  Worksheets("担当部署(A)").Visible = ShVisibility
  Worksheets("担当部署(B)").Visible = ShVisibility
  Worksheets("担当部署(C)").Visible = ShVisibility
  Worksheets("担当部署(D)").Visible = ShVisibility
  Worksheets("担当部署(E)").Visible = ShVisibility
  Worksheets("グラフ").Visible = ShVisibility
  Worksheets("Sheet3").Visible = ShVisibility
  Worksheets("Sheet4").Visible = ShVisibility
  
  ThisWorkbook.Save
  Application.EnableEvents = False
  Application.Quit

End Sub

【19551】Re:プログレスバーの使い方を教えて頂け...
発言  ichinose  - 04/11/8(月) 23:47 -

引用なし
パスワード
   ▼タフマン さん:
こんばんは。

>下記の標準モジュールの処理を行う最プログレスバーコントロールを
>ユーザーフォームで表示(動作)させたいのですが標準モジュール
>及びユーザーフォームにはどのように記述すればよいのでしょうか、
>どなたか教えて頂けないでしょうか。
>
>Sub システム終了()
>
>  Application.Visible = False
>
>  Dim ShVisibility As Integer
>  
>  counter = counter - 1
>  
>    If counter <= -1 Then
>    
>      ShVisibility = True
>      counter = 0
>      
>    Else
>    
>      ShVisibility = xlVeryHidden
>      
>    End If
>    
>  Worksheets("Sheet2").Visible = ShVisibility
>  Worksheets("マスター1").Visible = ShVisibility
>  Worksheets("触らないで!").Visible = ShVisibility
>  Worksheets("担当部署(A)").Visible = ShVisibility
>  Worksheets("担当部署(B)").Visible = ShVisibility
>  Worksheets("担当部署(C)").Visible = ShVisibility
>  Worksheets("担当部署(D)").Visible = ShVisibility
>  Worksheets("担当部署(E)").Visible = ShVisibility
>  Worksheets("グラフ").Visible = ShVisibility
>  Worksheets("Sheet3").Visible = ShVisibility
>  Worksheets("Sheet4").Visible = ShVisibility
>    
>  counter = counter + 1
>  
>    If counter >= 2 Then
>    
>      ShVisibility = True
>      counter = 0
>      
>    Else
>    
>      ShVisibility = xlVeryHidden
>      
>    End If
>  
>  Worksheets("マスター1").Visible = ShVisibility
>  Worksheets("触らないで!").Visible = ShVisibility
>  Worksheets("担当部署(A)").Visible = ShVisibility
>  Worksheets("担当部署(B)").Visible = ShVisibility
>  Worksheets("担当部署(C)").Visible = ShVisibility
>  Worksheets("担当部署(D)").Visible = ShVisibility
>  Worksheets("担当部署(E)").Visible = ShVisibility
>  Worksheets("グラフ").Visible = ShVisibility
>  Worksheets("Sheet3").Visible = ShVisibility
>  Worksheets("Sheet4").Visible = ShVisibility
>  
>  ThisWorkbook.Save
>  Application.EnableEvents = False
>  Application.Quit
>
>End Sub
プログレスバーは、原則として、ループ処理の中で使用するものなんです。
角田さんのサイトに詳しく説明されていますから、参考にして下さい。

http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm

【19553】Re:プログレスバーの使い方を教えて頂け...
お礼  タフマン  - 04/11/9(火) 8:59 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。
早速の回答ありがとうございます。


>プログレスバーは、原則として、ループ処理の中で使用するものなんです。
>角田さんのサイトに詳しく説明されていますから、参考にして下さい。
>
>http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTopic.htm
          ↑
このホームページを見ていろいろと試していたのですが
なかなかうまくいきませんでした。
私の勉強不足なのはわかっておりますが
早くしろとの指示があり焦っております、
もう少しチャレンジしてみますが
又、ご指導いただけましたらよろしくお願い致します。

【19559】Re:プログレスバーの使い方を教えて頂け...
回答  角田 WEB  - 04/11/9(火) 13:46 -

引用なし
パスワード
   こんにちは。
>  ThisWorkbook.Save
保存の時に出したいのでしょうか?

解説の最初に書いてある様に、それは出来ませんよ。

【19564】Re:プログレスバーの使い方を教えて頂け...
質問  タフマン  - 04/11/9(火) 18:31 -

引用なし
パスワード
   ▼角田 さん:
こんにちは、ご回答有難う御座います。

>>  ThisWorkbook.Save
>保存の時に出したいのでしょうか?
>
>解説の最初に書いてある様に、それは出来ませんよ。

エクセルを開いたり、閉じたりするときには使用出来ないとのことでしたので
オブジェクトのThisWorkbookで処理していたものを標準モジュールに
移し非表示にしているシートを再表示して再びシート2以外を
非表示にするという処理をしている間のみプログレスバーを
使用したいのですがだめでしょうか?
処理が終わり次第ユーザーフォームが閉じたときのイベントを取り
ブックをセーブして閉じる処理にしたいのですが
知識,認識不足で申し訳御座いませんが宜しくお願いします。

【19566】Re:プログレスバーの使い方を教えて頂け...
回答  角田 WEB  - 04/11/9(火) 18:55 -

引用なし
パスワード
   こんにちは
>非表示にしているシートを再表示して再びシート2以外を
>非表示にするという処理をしている間のみプログレスバーを
>使用したいのですがだめでしょうか?
たかだか10シートの表示/非表示でプログレスバーを出さなければ
いけない位に遅いんですか? 10秒とか20秒とか?

ちょっと信じられないけど‥‥‥
一瞬で終わりませんか?

一応、表示/非表示処理の前で
 Application.ScreenUpdating = False
表示/非表示処理が終わった所で
 Application.ScreenUpdating = True
を入れれば、その都度描画しない分だけ負荷は減りますけど

【19576】Re:プログレスバーの使い方を教えて頂け...
質問  タフマン  - 04/11/9(火) 21:07 -

引用なし
パスワード
   ▼角田 さん:
こんばんは。

>たかだか10シートの表示/非表示でプログレスバーを出さなければ
>いけない位に遅いんですか? 10秒とか20秒とか?
>
>ちょっと信じられないけど‥‥‥
>一瞬で終わりませんか?

最近のPCだと一瞬で終わってしまいますが
うちの事業所にあるPC約80台の内の半数以上がスペックの低いものを
使用しております、その上グループウェアーと言う
インターネットエクスプローラーで動作するソフトの中で使用しております
(詳しくは分かりませんがアクセスには互換が無くエクセル・ワードしか使えません)
関西・東海で8事業所が有り大阪にあるサーバーで繋がっており
全ての事業所からも閲覧します(シートもあと10シーと有ります)
全部で400人前後の人間が使用するため、処理が終わるまで
(30秒も掛かりませんが)待っていてくれると良いのですが
中にはせっかちな方もおりアプリケーションを非表示にしている為
処理が終わるまでにログアウトしようとしてエラーにはなりませんが
混乱しているみたいです。

>一応、表示/非表示処理の前で
> Application.ScreenUpdating = False
>表示/非表示処理が終わった所で
> Application.ScreenUpdating = True
>を入れれば、その都度描画しない分だけ負荷は減りますけど

かなり極秘データなもので手動で再表示されないようにするため
この処理を行っております、もし他に良い方法がありましたら
教えて頂けないでしょうか。
各個人にパスワードが設定されており(その他のソフトも共通)
パスワードを入れるとある人には1つのシートの一部だけ
ある人には数枚のシート(パスワード別に見れる情報が異なっています)
と言った形にして有ります、閲覧中はなんらかの表示があるため
ログアウトはしませんが最後だけ一旦全てを表示させて
シート2だけ残す処理をしておりますのでスペックの低いPCだと
この処理中にデータを少しの間(数秒ですが)見ることが出来てしまいます
何回か繰り返せばデータの内容もわかってしまうかも分からないので
このような処理になってしまいました。
そこで、最後の処理中のプログレスバーでと思いチャレンジしたのですが
如何なものでしょうかダメでしょうか。
長々とすいませんでした。

【19584】Re:プログレスバーの使い方を教えて頂け...
回答  角田 WEB  - 04/11/9(火) 22:27 -

引用なし
パスワード
   こんにちは。
>うちの事業所にあるPC約80台の内の半数以上がスペックの低いものを
わたしのPCも433MHzと今では低スペックと呼ばれる域ですけど
>インターネットエクスプローラーで動作するソフトの中で使用しております
IE内でエクセル開いてVisible/Hiddenするマクロを動かしても
一瞬で終わりますね。
>グループウェアーと言う
とかいうのが重いんですかね‥‥‥

>最後だけ一旦全てを表示させて
>シート2だけ残す処理をしておりますので
なんで全てを一端[Visible]にする必要があるのでしょう?
そこが判りません。

Sheet2だけ表示させて、他を隠すなら、↓のようなマクロで良いと
思いますが? 
既に[Hidden]状態のものは、そのまま[Hidden]のままにしておけば良いだろうし
[Visible]のものだけ[Hidden]設定すれば良いでしょう。

Dim wksh As Worksheet
With Worksheets("Sheet2")
  .Visible = xlSheetVisible
  .Activate
End With
For Each wksh In ThisWorkbook.Worksheets
  If (wksh.Name <> "Sheet2") And _
    (wksh.Visible = xlSheetVisible) Then
    wksh.Visible = xlSheetVeryHidden
  End If
Next wksh

【19587】Re:プログレスバーの使い方を教えて頂け...
お礼  タフマン  - 04/11/9(火) 23:05 -

引用なし
パスワード
   ▼角田 さん:
こんばんは。

>>グループウェアーと言う
>とかいうのが重いんですかね‥‥‥
たぶんそうだと思います。

>>最後だけ一旦全てを表示させて
>>シート2だけ残す処理をしておりますので
>なんで全てを一端[Visible]にする必要があるのでしょう?
>そこが判りません。
>
>Sheet2だけ表示させて、他を隠すなら、↓のようなマクロで良いと
>思いますが? 
>既に[Hidden]状態のものは、そのまま[Hidden]のままにしておけば良いだろうし
>[Visible]のものだけ[Hidden]設定すれば良いでしょう。
>
>Dim wksh As Worksheet
>With Worksheets("Sheet2")
>  .Visible = xlSheetVisible
>  .Activate
>End With
>For Each wksh In ThisWorkbook.Worksheets
>  If (wksh.Name <> "Sheet2") And _
>    (wksh.Visible = xlSheetVisible) Then
>    wksh.Visible = xlSheetVeryHidden
>  End If
>Next wksh

有難うございました、ここまでの知恵がなくてお恥ずかしい限りです
大変ためになりました、早速使わせて頂くとともに
他でも応用できそうなのでいろいろ試してみて勉強します。
それと、プログレスバーについても違ったところで使えるように
勉強いたしますのでまたわからないときには宜しくお願いします。

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