ママのスキンケアのお悩みにおすすめアイテム

こんにちは!
エクセルのVBA実行中の進捗バーについて押し終えてください。
よくあるソフトのインスト時に表示されるインストの進捗バー?とほぼ同じ者をエクセルVBA実行時にもでるようにしたいのですが・・・
方法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

1、テキストボックス編。



テキストボックスのテキストに四角(黒ベタ)を予めセット。

Private Sub CommandButton1_Click()
  Dim I As Integer
  Dim L As Integer
  Dim T As String
  
  T = Me.TextBox1.Text
  L = Len(T)
  Me.TextBox1.Visible = True
  For I = 1 To L
    Me.TextBox1.Text = Left(T, I)
    Pause 1
    DoEvents
  Next I
  Me.TextBox1.Visible = False
End Sub

これで、1秒毎に、四角が1個増えていきます。
見ようでは、プログレスバーです。

2、プログレスバー編。

プログレスバーそのものを配置。
プログレスバーは、[コントロールの選択]をクリックして行います。

Private Sub CommandButton2_Click()
  Dim I As Integer
  
  Me.ProgressBar.Max = 20
  Me.ProgressBar.Left = 200
  Me.ProgressBar.Top = 200
  Me.ProgressBar.Visible = True
  For I = 1 To 20
    Me.ProgressBar.Value = I
    Pause 1
    DoEvents
  Next I
  Me.ProgressBar.Visible = False
End Sub

これでも、1秒毎に、バーが伸びていきます。
上記のコードをテストするには、下記のPause関数を標準モジュールに登録する必要があります。

Public Sub Pause(ByVal PauseTime As Single)
  Dim Finish As Single
  
  Finish = Timer + PauseTime
  Do
    DoEvents
  Loop Until Timer > Finish
End Sub
    • good
    • 0
この回答へのお礼

有難うございます。
プログレスバーそのものを配置。
プログレスバーは、[コントロールの選択]をクリックして行います。
ってなんですか?
何も分からず済みません。教えてください。

お礼日時:2007/07/20 12:56

質問者さまへ …とわざわざ書くのもヘンですが。



「エクセルVBA実行時に進捗バーを表示する方法」の一つとして、
●#1さんの、「プログレスバー編」があります。

しかし、ライセンスの観点から、
「使えるけど、使って良いかどうか、あるいは使い方」に関しては議論が存在するようです。

その他の方法として、
●#1さんの、「テキストボックス編」
●#2さんの、「VBA ではラベルコントロールを使って表現するか、ステータスバーなどで簡易的に表現する」
●#6さんの、「簡単にラベルを文字の「■」などを入れる手法」
があるということのようです。

議論の是非について私はコメントする立場にありませんが、
少なくとも質問者さんのご質問やお礼自体に関して問題があったわけではありませんからご心配なく。

※コレは「まとめ回答」というやつなので、間違えてもポイントつけてはいけません。
    • good
    • 0
この回答へのお礼

誠にありがとうございました。
私の質問でなにか問題かと思い心配してました。
VBAをもっと勉強せねばとおもいました。

お礼日時:2007/07/26 11:38

こんにちは。



ちょっと情報が不足していたようです。ご心配かけて、すみませんです。

>元の記事・・・・私が何かしましたか?心配です。

そんなことはありませんです。以下に、そのサイトの著者が、

http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTop …
》※ Office のインストール又はSPアップデートにより、プログレスバーコントロールが入っている mscomctl.ocx ファイルが正規にインストールされる事が判りました(2006/7/27)。

とあります。そのいきさつを、他の掲示板で読んだのですが、それについて、詳しく語る必要はないと思い、割愛しました。

Excel2000のSPのいくつからか、インストールされるということになると、すくなくとも、Visual Basic(開発言語)を持っている人しか出来ない話ではないわけですね。かつては、私の記憶でも、そうだったのですが、以前からOffice VBAをされている方は、標準的に、MS-Office にはないという認識にあったように思います。

しかし、だいたいは、Office VBAを以前からされてきた方は、VB5/6のランタイムを入れてしまっているので、Office SPアップデートで入るということは、知らないような気がします。私自身、知りませんでした。

ある意味で、「ProgressBar Control」というのは、VBには、それは標準的にありましたが、VBAでは、仮に、それ向きに開発しても、個人的に使うだけの存在だと思いました。なかなか、VBAでは、VBランタイムを入れてくださいともいえませんしね。

だからこそ、このスレッドの最初に書いたサイトの著者(角田氏?)や、『かんたんプログラミング』(技術評論社)の大村あつしさんも、それに代わる代用法を編み出したのだと思います。(あくまでも、私の想像です。)

私の書いた
「現在のMS-Office 自体に標準的に備わっているとしたら、配布自体は関係なくなりますね。」

配布することがいけないといっても、それ自体を取りざたする必要がないのではないかなって思いました。お互いが持っているとしたら、それは、再配布することへの必要性はなくなります。私の書いたのは、そういう意味だったのですが、もちろん、その部分だけの文章を取れば、ライセンスフリーとも取られかねません。しかし、再配布権自体は認められてないと書いていますから、そこだけを捕らえて違った解釈する方はいないと信じます。

私としては、Excel上では、他のコントロールと同じように、個人としては自由に使ってかまわないよって書いたつもりなのですが、それ以外の、そのOCX などの再配布の問題は、この質問とは、また違ったステージの問題だと思いますが、ご質問者さんは気にする必要はないと思います。いろいろ試してみるのが良いかと思います。
    • good
    • 0

こんにちは。



ProgressBar Control って、

今は、標準で、Office についているように思えますね。
Office2000 SP3以降?

http://support.microsoft.com/kb/325671/ja
Office XP Service Pack 2 (SP2) の概要
MSCOMCTL.OCX は、コモンコントロールの名前は出てきますね。
VB6 ランタイム再配布バージョンでも、入っていますね。

私のところでは、ProgressBar は出せますが、こちらの環境では良く分かりません。私は、VB6は、もう入れていないだけで、あれこれ入っていますので、確信が持てません。

Developer バージョンでなければ、再頒布権はないので、ProgressBar のデザインを備えた形では配布することは出来ないという話だと思いますが、現在のMS-Office 自体に標準的に備わっているとしたら、配布自体は関係なくなりますね。もちろん、個人でお使いになる分には、まったく問題はない話ですが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私にはまだ、この手のVBAはむりです。分かりません。
勉強しなおします。また、何か問題でもありましたか?
元の記事・・・・私が何かしましたか?心配です。

お礼日時:2007/07/20 16:57

  Dim N As Integer

    • good
    • 0

Private Sub CommandButton1_Click()


  Dim I As Integer
  Dim L As Integer
  Dim N As String
 
  L = Me.Label1.Width
  N = Me.Label1.Width \ 10
  Me.Label1.Width = 0
  Me.TextBox1.Visible = True
  Me.Label1.Visible = True
  For I = 1 To 10
    Me.Label1.Width = N * I
    Pause 1
    DoEvents
  Next I
  Me.Label1.Visible = False
  Me.TextBox1.Visible = False
End Sub

一応、これで1秒間隔で進行ゲージが伸びていきます。
    • good
    • 0

断っておきますが、エクセルは一度も操作したことのない門外漢です。


ですから、あくまでも、VBAの一般論で回答しています。
エクセル固有の実現方法があれば、的を外しています。

さて、プログレスバーの配置手順ですが、

1、メニュー-表示(V)-ツールバー(T)-コントロールツールボックスにレ点。
2、最下位のアイコンをポイントすると、[コントロールの選択]という説明文。
3、[コントロールの選択]をクリックすると、選択画面が表示されます。
4、Microsoft ProgressBar Control version 6.0 があればクリック。

これで、画面に配置できます。
なお、一番上に[デザインモードの開始・終了]ボタンがあります。

ところで、Microsoft ProgressBar Control の有無は環境によるかも知れません。
仮に無い場合は、テキストボックスを使われたらいいです。
なーに、ラベルコントロールを背景色付きでテキストボックスの上に配置すればプログレスバーが出来上がります。
    • good
    • 0

> プログレスバーは、[コントロールの選択]をクリックして行います。



これは 製品版 VB(VBA とは別物)などに付属する OCX コントロール
のことですね。VB がインストールされていない環境で OCX をデザイン
使用すると、ライセンス違反になりますのでご注意を。

 # VB 未インストール環境では OCX のプログレスバーを使用しては
 # いけません.....ということです。

VBA ではラベルコントロールを使って表現するか、ステータスバー
などで簡易的に表現するのが良く知られた方法です。

参考URL:
http://www.h3.dion.ne.jp/~sakatsu/ProgressBarTop …
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルマクロで進捗状況を表示させたい

いつもお世話になります。こんなことできますか?

プログラムの進捗状況を表示させたいのですが、
ステータスバーの表示だと隅っこの方ですし、表示も小さいので、画面の真ん中にメッセージウィンドウを出せないかななんて考えてます。
進捗状況は刻々と変わるので、Msgboxだといちいち「OK」を押さないといけなくなり実用的ではありません。

画面真ん中に表示する方法、何かいい方法ありませんか。

Aベストアンサー

ステータスバーに表示させるにが一番簡単な方法なのですが、お気に召さないのであればその次に簡単な方法を。

1.現在のシートとは別に表示用のシートを作成します。
2.表示用のシートのまんなかあたりのセルに、ステータスバーに表示させる進捗状況をセットします。
3.マクロ作動中は常に表示用シートをアクティブにして見せておくようにします。

これでOKですね。

QExcel2010でProgress bar

Excel2010を使っています
Progress barをツールボックスに追加したいのですが、コントロールの追加-利用可能なコントロールに出てきません

どこにあるのか教えて頂けますか?

Aベストアンサー

64bit版Officeでは(ProgressBar)ComCtrlは使えないと思います。
http://office.microsoft.com/ja-jp/word-help/HA010369476.aspx#_Toc254341418
からの抜粋を以下に。
32 ビット版の Office だけが対応する機能 (64 ビット版の Office にはない機能)
ActiveX コントロール ライブラリ (ComCtl) このライブラリには、ソリューションの構築に使用される ActiveX コントロールが含まれており、Microsoft Office プログラムの Access、Excel、および Word で最もよく使用されます。

また、Office2013(試用版)64bit でも同様でした。
今後MS社の気が変わることは多分無いかと・・・

なので、64bit版をアンインストールして32bit版に入れ替えるか、
自前でProgressBarもどきを作成するか、の二択かと?

Qexcel VBA プログレスバーについて(初心者)

VBA初心者の質問です…
excelで入力されている値を用いて、グラフ作成する簡単なデータを作りました。
特に問題なくグラフは出来たのですが、グラフ作成が1つではなく数個同時(順番)に作成しているため時間が掛かってしまいます。
この処理中にプログレスバーを表示出来ればと思い質問を致します。

私なりに調べ(goo内)下記サンプルを発見し、簡単なのでこれを使をうかと思うのですが、UserForm1の処理前にUserForm2.showだけでは
UserForm2の処理が終わらないと処理をしません…当然ですよね…
本当に初心者で申し訳ないのですが、UserForm1の処理最中にUserform2のプログレスバーを表示するのにはどうすればいいのでしょうか…

【サンプル】
Private Sub UserForm_Activate()

With Label1
.SpecialEffect = 2
.BackColor = vbBlue
www = .Width
.Width = 0
End With

For i = 1 To 1000
Me.Caption = i
Label1.Width = i / 1000 * www
Me.Repaint
Next

End Sub

また他におすすめなやり方があれば教えて頂ければ…
初心者な質問で申し訳御座いません。

VBA初心者の質問です…
excelで入力されている値を用いて、グラフ作成する簡単なデータを作りました。
特に問題なくグラフは出来たのですが、グラフ作成が1つではなく数個同時(順番)に作成しているため時間が掛かってしまいます。
この処理中にプログレスバーを表示出来ればと思い質問を致します。

私なりに調べ(goo内)下記サンプルを発見し、簡単なのでこれを使をうかと思うのですが、UserForm1の処理前にUserForm2.showだけでは
UserForm2の処理が終わらないと処理をしません…当然ですよね…
本当に初...続きを読む

Aベストアンサー

いいえ
☆下記のループに、入れては、だめです。
For j = 1 To 10000
Next
は、削除するか コメント行にしてください。


' ----------------------------------------------------
For j = 1 To 10000
'デバッグ用タイミング(実際はここに実行マクロを入れる)
↑↑
ここの部分に私で言うグラフ作成マクロを組み込めばいいのでしょうか?

Next
'-----------------------------------------------------
☆正確には、下記の中です。



' ----------------------------------------------------
'(実際はここに実行マクロを入れる)
' 例えば、
  Call グラフ作成処理プログラム
' とします。
'-----------------------------------------------------

また、
For i = 1 To cend
j = i / cend * 100
With UserForm1
.Label2.Caption = Int(j) & "%"
.Label1.Width = tsiz * j / 100
End With

の中の、cend = 1500 'デバッグ用数値を独自に設定する必要があるでしょう。
例えば、処理時間が、プログレスバーの最後にならない内に処理が終わってしまうとか、その反対にプログレスバーが、早く終わってしまうとかです。

私の場合は、処理する セルの数を算出して 設定しています。
参考として、変形させた コードを乗せます。
詳しいことは、省略します。[ ご自分で、考えてください。 ]


' 以下は 標準モジュールです。
Sub 123()
Dim tsiz As Integer, K As Integer, N As Integer
Dim Memorys As Long, Memorys_Cunt As Long, Memoryss As Long


Do
' 実際はここに実行マクロを入れる) 

Call My_Progress_bar(Memorys_Cunt, RoW, Memoryss)
Loop

UserForm1.Hide

End Sub


Function My_Progress_bar(I As Long, tsiz As Integer, cend As Long)

Dim J As Integer



J = I / cend * 100
If J >= 100 Then J = 100

With UserForm2
.Label2.Caption = Int(J) & "%"
.Label1.Width = tsiz * J / 100
End With

DoEvents

End Function
UserForm1.Show vbModeless


注意:これは、VBA には、プログレスバーの機能(コマンド)が、ないので、プログレスバー風に考えられたものです。

いいえ
☆下記のループに、入れては、だめです。
For j = 1 To 10000
Next
は、削除するか コメント行にしてください。


' ----------------------------------------------------
For j = 1 To 10000
'デバッグ用タイミング(実際はここに実行マクロを入れる)
↑↑
ここの部分に私で言うグラフ作成マクロを組み込めばいいのでしょうか?

Next
'-----------------------------------------------------
☆正確には、下記の中です。



' ----------------------------------------------------...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QEXCEL VBA で指定した範囲に入力があるかどうか?

こんばんは!!
EXCEL VBAを使い出して、初日からつまずいてます・・・。
みなさん、アドバイスよろしくお願いします!!

で、早速、質問なんですけど、
指定したセル範囲のいずれかに入力があるか調べたいんですけど、それができるプロパティとかってあるんでしょうか?
地道にセル毎にチェックするしかないいんでしょうか??

たとえば、範囲をA1:H1として、その範囲内のセルに何か入力があったらTrueが返ってくるとか・・・。

もし、知ってる方がいらっしゃたら教えてください!!
よろしくお願いします!!!!!

Aベストアンサー

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてしまうんですが、『WorksheetFunction.』と打てば、候補の関数名が表示されると思います。

下記の fnc入力チェック は入力有無を返すユーザー定義関数です。
書き方の例です。分かりやすくなった?この例は引数に"A1:H1"をセットしています。任意の範囲にするには Selection.Address に変えます。

Sub 入力チェック()
  Dim 入力有無フラグ As Boolean        '入力有無の答え

  入力有無フラグ = fnc入力チェック("A1:H1")  'モジュール内でA1~H1を指定(固定)

  MsgBox 入力有無フラグ            '帰ってきた答えをメッセージボックスで確認
End Sub

'入力有無を返すユーザー定義関数
Function fnc入力チェック(checkAddress As String)
  If WorksheetFunction.CountA(Range(checkAddress)) > 0 Then
    fnc入力チェック = True
  Else
    fnc入力チェック = False
  End If
End Function

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてし...続きを読む

Qマクロの進捗率の表示

エクセルのVBで、マクロの進捗率を棒グラフまたは、計算値で表示する方法を教えて下さい。

Aベストアンサー

こちらをどうぞ。

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

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセルで別ブックをバックグラウンドでオープンする方法

最初にメニュー画面となるブックを開いた後、データブックをバックグランドのみで開きたいのですが、エクセルVBAで単純にOPENを行うと画面上にデータブックが表示されてしまいます。操作作業者に画面が次々入れ替わることを見せたくないのですが、ブックをバックグラウンドだけで開く方法はあるのでしょうか。VBAについては素人で宜しくお願いします。

Aベストアンサー

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
Public Bk3 As Workbook
Dim PathName As String

Sub Auto_Open()
PathName = ThisWorkbook.Sheets("メニュー").Range("C28").Value
ファイル読込 "初期値.xls", Bk1
ファイル読込 "データ1.xls", Bk2
ファイル読込 "データ2.xls", Bk3
End Sub

Sub ファイル読込(BkName, ObjBk)
Application.ScreenUpdating = False
Set ObjBk = Workbooks.Open(Filename:=PathName & "\" & BkName)
Windows(BkName).Visible = False
Application.ScreenUpdating = True
End Sub

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
P...続きを読む


人気Q&Aランキング