重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VBの画面内容をExcelに
展開させる画面を作っています。
VB画面の実行ボタンを押して展開するのですが、
Excel展開中に「展開中」というような
メッセージを出すには、
どのようにすれば良いのでしょうか?

A 回答 (6件)

私の場合、単純です。




<<<< メイン画面側 >>>>
'実行押下
Private Sub Command1_Click()
frmMsg.show 1
End Sub

<<<< メッセージ画面側 >>>>
Private Sub Form_Activate()
Dim wFile As String

'ブック オープン
wFile = App.Path & "\" & ファイル名
Call Excel_Open(wFile)

xlsMyExcel.WindowState = xlMinimized
xlsMyExcel.Visible = True
'マクロ実行
xlsMyExcel.Run マクロ名, 引数1, 引数2
Unload Me
End Sub


Public xlsMyExcel As Object 'Excelのオブジェクト
Public xlsBook As Excel.Workbook 'Excelのワークブック
Public xlsSheet As Excel.Worksheet 'Excelのワークシート

Public Sub Us_Excel_Open(pName)
Set xlsMyExcel = CreateObject("Excel.Application")

Set xlsBook = xlsMyExcel.Workbooks.Add(pName)
Set xlsSheet = xlsBook.Worksheets(1)
End Sub
    • good
    • 0

サンプルと言っても、、、別のフォームを開いて、元のフォームを見せなくしたり、使用不能にするなどの処置をするだけだと思うのですが・・・


もしくはラベルを内部に持ったピクチャボックスをフォーム内に隠し持ち、EXCEL操作時にピクチャボックスを表示させるのも手だと思います。


んで・・・サンプルは全く別ですが・・・
私個人が使用しているオリジナルのプログレスバーがありますので、そちらを載せておきますね。
結構このクラスファイルは、使いまわしができると思います。

サンプルプロジェクト構成
Project1
┣Form1(フォーム)
┃┣Command1(コマンドボタン)
┃┣Command2(コマンドボタン)
┃┗Picture1(ピクチャボックス)
┗Class1(クラスファイル)

----Form1----
Option Explicit

Dim objBar1 As Class1

Private Sub Command1_Click()
  With objBar1
    '値を増加させる
    If .Value < .Max Then
      .Value = .Value + 10
      Select Case .Value
        Case 10:  .Caption = "はじまったばかり"
        Case 20:  .Caption = "まだまだ"
        Case 50:  .Caption = "盛り上がってまいりました"
        Case 80:  .Caption = "もうちょい"
        Case 100:  .Caption = "キター": Command1.Enabled = False
      End Select
    End If
  End With
End Sub

Private Sub Command2_Click()
  objBar1.Value = 0
  objBar1.ValueShow = False
  objBar1.Caption = "初期状態"
  
  Command1.Enabled = True
End Sub

Private Sub Form_Load()
  Command1.Caption = "増加"
  Command2.Caption = "初期化"

  'ターゲットのビクチャーボックスをセット
  Set objBar1 = New Class1
  Set objBar1.Target = Picture1
  
  '初期状態にする
  Call Command2_Click
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  'しっかり開放を忘れずに
  Set objBar1 = Nothing
End Sub



----Class1----
Option Explicit

'プロパティ変数
Private picTarget As PictureBox 'ターゲットコントロール
Private lngValue As Long    '現在の値を格納
Private lngBarColor As Long   'プログレスバーの色
Private lngBackColor As Long  'プログレスバーの背景色
Private lngMaxValue As Long   '値の最大値
Private strCaption As String  '表示する数値の単位
Private bolValueShow As Boolean '数値の表示を設定
Private lngStyle As Long    '表示スタイルを設定
'--------------------------------------------------------
'  関数名 : RefreshBar
'  用途  : バーを再描画する
'  引数  : なし
'  戻り値 : なし
'  備考  : 内部でのみ利用可能です
'--------------------------------------------------------
Private Sub RefreshBar()
  'バーを再描画する処理
  Value = lngValue
End Sub

'--------------------------------------------------------
' プロパティ名: Target(書き込み)
'  用途  : プログレスバーにするPictureBoxを設定
'  引数  : プログレスバーにするPictureBox
'  戻り値 : なし
'  備考  : なし
'--------------------------------------------------------
Public Property Set Target(picNewTarget As PictureBox)
  'プログレスバーとなるPictureBoxをセット
  Set picTarget = picNewTarget
  '初期化
  picTarget.Cls
  picTarget.AutoRedraw = True
  picTarget.ScaleWidth = lngMaxValue
  Value = 0
End Property

'--------------------------------------------------------
' プロパティ名: Value(読み込み)
'  用途  : プログレスバーのバーの値を取得
'  引数  : なし
'  戻り値 : プログレスバーのバーの値
'  備考  : なし
'--------------------------------------------------------
Public Property Get Value() As Long
  '読み取りプロパティ
  Value = lngValue
End Property

'--------------------------------------------------------
' プロパティ名: Value(書き込み)
'  用途  : プログレスバーのバーの値を設定
'  引数  : プログレスバーのバーの値
'  戻り値 : なし
'  備考  : 不正な値は調整されます
'--------------------------------------------------------
Public Property Let Value(lngNewValue As Long)
  Dim strNumber As String '一時的に文字列を保持する
  Dim lngTargetWidth As Long
  Dim lngTargetHeight As Long

  '値の調整
  If lngNewValue < 0 Then
    'マイナス値だった場合、0に
    lngNewValue = 0
  ElseIf lngNewValue > lngMaxValue Then
    'Maxプロパティの値よりも大きかった場合、Max値に
    lngNewValue = lngMaxValue
  End If

  '値の保持
  lngValue = lngNewValue
    
  With picTarget
    '頻繁に呼び出されるプロパティの値を変数に格納しておく
    lngTargetWidth = .ScaleWidth
    lngTargetHeight = .ScaleHeight
  
    'ターゲットのPictureBoxの内容を消去
    .Cls
    'いったん白色で初期化する
    .DrawMode = 13 '塗りつぶしモード
    picTarget.Line (0, 0)-(lngTargetWidth, lngTargetHeight), &HFFFFFF, BF
    .DrawMode = 10 '反転モード
    
    'プログレスバーの文字色設定
    '基本的にバー色と同一色を使用します(表示する値によっては色を反転させる必要があるためです)
    .ForeColor = lngBarColor

    '数値を表示する場合
    If bolValueShow Then
      strNumber = lngValue & strCaption
    Else
      strNumber = strCaption
    End If
    
    '値の表示位置をPictureBox中央に設定
    .CurrentX = lngMaxValue / 2 - .TextWidth(strNumber) / 2
    .CurrentY = (lngTargetHeight - .TextHeight(strNumber)) / 2
    'Valueプロパティの値をターゲットのPictureBoxに表示する
    picTarget.Print strNumber

    'ゴミ表示対策(このコードをコメントアウトして、動作をみれば必要性が見えてきます)
    If lngValue = 0 Then lngTargetHeight = 0
    
    'バーのスタイルによって、描画タイプ範囲を変更
    Select Case Style
    Case 0
      '横型バーの場合
      'ターゲットのPictureBoxに四角形を描く
      picTarget.Line (0, 0)-(lngValue, lngTargetHeight), lngBarColor, BF
      '背景色を描く
      picTarget.Line (lngValue, 0)-(lngTargetWidth, .ScaleHeight), lngBackColor, BF
    Case 1
      '縦型バーの場合
      'ターゲットのPictureBoxに四角形を描く
      picTarget.Line (0, lngTargetHeight)-(lngTargetWidth, lngTargetHeight - lngValue), lngBarColor, BF
      '背景色を描く
      picTarget.Line (0, 0)-(lngTargetWidth, lngValue), lngBackColor, BF
    End Select
    
    'ターゲットのPictureBoxの表示を更新
    .Refresh
  
  End With
End Property

'--------------------------------------------------------
' プロパティ名: BarColor(読み込み)
'  用途  : プログレスバーのバーの色を取得
'  引数  : なし
'  戻り値 : プログレスバーのバーの色
'  備考  : ターゲットのPictureBoxのFillColorプロパティとの関連
'       はありません
'--------------------------------------------------------
Public Property Get BarColor() As Long
  BarColor = lngBarColor
End Property

'--------------------------------------------------------
' プロパティ名: BarColor(書き込み)
'  用途  : プログレスバーのバーの色を設定
'  引数  : プログレスバーのバーの色
'  戻り値 : なし
'  備考  : ターゲットのPictureBoxのFillColorプロパティとの関連
'       はありません
'--------------------------------------------------------
Public Property Let BarColor(lngNewBarColor As Long)
  lngBarColor = lngNewBarColor
  'バーを再描画する
  RefreshBar
End Property

'--------------------------------------------------------
' プロパティ名: Max(読み込み)
'  用途  : プログレスバーの値の最大値を取得
'  引数  : なし
'  戻り値 : プログレスバーの値の最大値
'  備考  : 初期値は100です
'--------------------------------------------------------
Public Property Get Max() As Long
  '読み取りプロパティ
  Max = lngMaxValue
End Property

'--------------------------------------------------------
' プロパティ名: Max(書き込み)
'  用途  : プログレスバーの値の最大値を設定
'  引数  : プログレスバーの値の最大値
'  戻り値 : なし
'  備考  : 初期値は100です
'--------------------------------------------------------
Public Property Let Max(lngNewMax As Long)
  '書き込みプロパティ
  
  '値の保持
  lngMaxValue = lngNewMax
  
  'ターゲットのプロパティをセット
  picTarget.ScaleWidth = lngMaxValue
  picTarget.ScaleHeight = lngMaxValue

  'バーを再描画する
  RefreshBar
End Property



Private Sub Class_Initialize()
  'オブジェクトの初期化処理
  
  '各変数の初期値をセット
  lngValue = 0
  'プログレスバーの色を指定
  lngBarColor = &H800000
  'プログレスバーの背景色を指定(ここでは白)
  lngBackColor = &HFFFFFF
  'プログレスバーの値の最大値
  lngMaxValue = 100
  'プログレスバーの数値の単位
  strCaption = ""
  '数値を表示するようにする
  bolValueShow = True
End Sub

'--------------------------------------------------------
' プロパティ名: Caption(読み込み)
'  用途  : プログレスバーのバーの値の単位を取得
'  引数  : なし
'  戻り値 : プログレスバーのバーの値の単位
'--------------------------------------------------------
Public Property Get Caption() As String
  Caption = strCaption
End Property

'--------------------------------------------------------
' プロパティ名: Caption(書き込み)
'  用途  : プログレスバーのバーの値の単位を設定
'  引数  : プログレスバーのバーの値の単位
'  戻り値 : なし
'--------------------------------------------------------
Public Property Let Caption(strNewCaption As String)
  strCaption = strNewCaption
  'バーを再描画する
  RefreshBar
End Property

'--------------------------------------------------------
' プロパティ名: ValueShow(読み込み)
'  用途  : プログレスバーに値を表示するか否かを取得
'  引数  : なし
'  戻り値 : プログレスバーに値を表示するか否か
'       True 表示する(初期値)
'       False 表示しない
'--------------------------------------------------------
Public Property Get ValueShow() As Boolean
  ValueShow = bolValueShow
End Property

'--------------------------------------------------------
' プロパティ名: ValueShow(書き込み)
'  用途  : プログレスバーに値を表示するか否かを設定
'  引数  : プログレスバーに値を表示するか否か
'       True 表示する(初期値)
'       False 表示しない
'  戻り値 : なし
'--------------------------------------------------------
Public Property Let ValueShow(bolNewValue As Boolean)
  bolValueShow = bolNewValue
  'バーを再描画する
  RefreshBar
End Property

'--------------------------------------------------------
' プロパティ名: BackColor(読み込み)
'  用途  : プログレスバーの背景色を取得
'  引数  : なし
'  戻り値 : プログレスバーの背景色
'  備考  : ターゲットのPictureBoxのBackColorプロパティを
'       直接操作しても、変更は反映されません
'       通常は白色(初期値)を使用される事をお勧めします
'--------------------------------------------------------
Public Property Get BackColor() As Long
  BackColor = lngBackColor
End Property

'--------------------------------------------------------
' プロパティ名: BackColor(書き込み)
'  用途  : プログレスバーの背景色を設定
'  引数  : プログレスバーの背景色
'  戻り値 : なし
'  備考  : ターゲットのPictureBoxのBackColorプロパティを
'       直接操作しても、変更は反映されません
'       通常は白色(初期値)を使用される事をお勧めします
'--------------------------------------------------------
Public Property Let BackColor(lngNewBackColor As Long)
  lngBackColor = lngNewBackColor
  'バーを再描画する
  RefreshBar
End Property

'--------------------------------------------------------
' プロパティ名: Style(読み込み)
'  用途  : プログレスバーのスタイルを取得
'  引数  : なし
'  戻り値 : プログレスバーのスタイル
'       0 横型バー
'       1 縦型バー
'  備考  : デフォルトは横型です
'--------------------------------------------------------
Public Property Get Style() As Long
  Style = lngStyle
End Property

'--------------------------------------------------------
' プロパティ名: Style(書き込み)
'  用途  : プログレスバーのスタイルを設定
'  引数  : プログレスバーのスタイル
'       0 横型バー
'       1 縦型バー
'  戻り値 : なし
'  備考  : デフォルトは横型です
'--------------------------------------------------------
Public Property Let Style(lngNewStyle As Long)
  lngStyle = lngNewStyle
  '最大値を再設定
  Max = lngMaxValue
  'バーを再描画する
  RefreshBar
End Property
    • good
    • 0

別スレッドにできないMSGBOXはダメです。



だれもが思いつくのが
※別フォームに進捗表示
※ステータスバーコントロール
※プログレスバーコントロール
の3タイプだと思います。

どれにするかは、お好み次第だと思います。
    • good
    • 0
この回答へのお礼

>回答者の方へ

回答ありがとうございました。
TAGOSAKU7さんのご指摘通り、
今回の場合ですと、
別フォームに進捗表示(処理実行中に
メッセージをフォームを出して、終わったら消える)で
良いと思います。
プログレスバーを出すほどの事では無い訳でして…

ソースの例などがありましたら
再度書き込み願います。

お礼日時:2002/11/07 17:20

私の場合、展開中というウインドウをShowし、そのウインドウ側で、Excelを起動してマクロを実行してExcelにグラフ表示を行、Excelが終了した時点で、展開中のウインドウをUnloadして終了するという形をとりました。




Excelのマクロでプログレスバーがあります。みてみてください。

参考URL:http://member.nifty.ne.jp/bear/hobby/hobby4.htm#プログレスバー
    • good
    • 0

なお、展開が終わって表示を削除するならば、


別のFORMを用いて、メッセージを表示してあげればいいですね。
    • good
    • 0

MsgBox ("展開中")



とやればいいでしょう。
    • good
    • 0

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