[[20180607071130]] 『メインシートにマクロボタンを設置して別シートの』(ロジック) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『メインシートにマクロボタンを設置して別シートのマクロを実行したい。』(ロジック)

おはようございます。ロジックです。

item.xlsmというファイルにシートが4つございまして、4つ目にbase用

フォーマットというシートがございます。

A列からAI列まで項目がございまして、

A列に商品番号の欄、L列以降に画像ファイル名(例a.jpg,a-

1.jpg・・・・)を記載する欄がございます。

下記のプログラムはA列の商品番号と指定したパスに保存されているサブ

フォルダ名と一致したらその中の画像ファイル名を抽出する物になりま

す。

Sub test2()
Dim objFSO As Object
Dim sPath As String, sSubFol As String, sFileName As String
Dim nRow As Long, nCol As Long
Set objFSO = CreateObject("Scripting.FileSystemObject")
sPath = "C:\Users\Owner\Downloads\base\setting_000002016\"
nRow = 2
sSubFol = Cells(nRow, 1).Text
Do While sSubFol <> ""
nCol = 12
sFileName = Dir(sPath & sSubFol & "\*.jpg")
If objFSO.FileExists(sPath & sSubFol & "\" & sSubFol & ".jpg") Then
nCol = 13
Else
nCol = 14
End If
Do While sFileName <> ""
If sFileName = sSubFol & ".jpg" Then
Cells(nRow, 12) = sFileName
Else
Cells(nRow, nCol) = sFileName
nCol = nCol + 1
End If
sFileName = Dir()
Loop
nRow = nRow + 1
sSubFol = Cells(nRow, 1).Text
Loop
Set objFSO = Nothing
End Sub

これを昨日から、メインシートの1シート目に画像取り込みボタンという

ものを設置して、1シート目から4シートのL列以降のファイル名を抽出

させようと試しているのですが、ボタンを押しても反応しないのですが、

どのように対処したらよろしいでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


確認ですが、メインシートに設置した「ボタン」はフォームコントロール、ActiveXコントロールのどちらですか?

前者であればマクロの登録は済ませてますか?
後者であれば、

 Private Sub CommandButton1_Click()
     Call test2
 End Sub

のようにボタンをクリックしたときに、test2が動くように記述していますか?

以上2(3?)点確認です。
(もこな2) 2018/06/07(木) 07:35


もこな様

ご回答ありがとうございます。いくつかの質問の件のご回答いたします。

?@ボタンはフォームコントロールです。

?A恥ずかしい話、vbaだけでなくプログラミング自体あまり得意でないので、私なりに調べて

 フォームコントロールを選んだら、
 
 上記のようにmodule1を呼び込むだけだと思ってました。

ちなみに、ActiveXコントロールとフォームコントロールの違いはあるのでしょうか?

もし可能であれば、フォームコントロールボタンを設置する場合どういった記述をすればいいのかアドバイスをいただければと思います。
(ロジック) 2018/06/07(木) 08:18


う〜ん。。。

Webで検索してみれば解ると思うと思いつつ検索してみると
ピンポイントで解説しているサイトが見つかりませんね。

ズバリでいうと↓なんだが、なんだかおかしなことが書いてある。
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/vba2013/01-intro03.html

新たに
「ボタン1_Click」
というマクロを書かなくても、
今作ってあるマクロが一覧に出るのでそれを選択するだけです。

https://www.excelspeedup.com/button/
図形にマクロを登録するときと同じことです。

あとは、何かテキトーにいじってるとなんとなくわかる気がしますが。。。

>ちなみに、ActiveXコントロールとフォームコントロールの違いはあるのでしょうか?
デザインが違います。
あとマクロを書くのはボタンを配置したシートのモジュールに書きます。
この辺は疑問に思ったらどんどん検索しましょう。
図解付きで説明してある方が解りやすいし、
いつ回答が付くかわからない掲示板に書いて待つのも、
待つ時間がもったいないです。

検索して見つからなかった。見つかったけど自分の事例に当てはめてみて、
上手くいかない(あるいは理解できない)時などに掲示板で質問するとよいと思います。

(まっつわん) 2018/06/07(木) 08:39


あ、もし先にボタンを作って、
何か登録してあったら、選択し直すだけです。
僕なんかは先にボタンを作ってシート上のデザインを作り込んでから、
マクロを登録するので、マクロの登録を促されたらキャンセルでマクロを登録せずに、
ウィザードを抜けます。

(まっつわん) 2018/06/07(木) 08:42


 >http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=185969&rev=0

苦戦されてますね。。。。
どんまいです。
返事があるまでにもう一回質問を読み直してみてみます。

(まっつわん) 2018/06/07(木) 08:47


まっつわん様

検索して見つからなかった。見つかったけど自分の事例に当てはめてみて、 上手くいかない(あるいは理解できない)時などに掲示板で質問するとよいと思います。

その通りだと思います。
ですが、私なりに試しましたが、理解ができませんでした。

私の元のマクロ名がtest2だとして、

マクロ登録で同じマクロ名の名前を選択して試しても実行されませんでした。

上記はフォームコントロールでの場合です

(ロジック) 2018/06/07(木) 09:19


ps.教えていただいたリンク先の方法で試しましたが、やはりだめでした。
(ロジック) 2018/06/07(木) 09:24

 >その通りだと思います。
 >ですが、私なりに試しましたが、理解ができませんでした。
ならば、そう書かないと回答者へは伝わりません。
相手に伝える文章を書くのは掲示板の質問も、
プログラムのコードも同じことです。(プログラムは相手がコンピューターになるだけ)
以後、質問するときは、こう書いて他人が解ってくれるかな?ということろに気を付けて、
質問を書いて下さい。無駄なやり取りが減ると思います。

 
 >マクロ登録で同じマクロ名の名前を選択して試しても実行されませんでした。
 >ps.教えていただいたリンク先の方法で試しましたが、やはりだめでした。
そうですかぁ。
でわ、
コードはどこに書いています?
このときの書く場所は標準モジュールです。

で、
>実行されませんでした。
本当にそうでしょうか?
マクロは起動したが意図しない動作をし、結果何も返さなかったのでは?

そういう時は、ブレークポイントを設置し確認します。
ついでに、プログラムがちゃんと動いているかは、
ステップインで1行づつ動かし、
意図通りに動いているか確認します。

http://www.ken3.org/vba/excel-help.html

(まっつわん) 2018/06/07(木) 09:31


ちなみに僕なりにやりたいことを想像して書いてみました。

Option Explicit

'※FSOを使うので「Microsoft Scripting Runtime」を参照設定すること
Sub test3()

    Dim objFSO As FileSystemObject
    Dim f As File
    Dim sSubFol As String
    Dim nRow As Long, nCol As Long
    Dim c As Range
    Dim i As Long
    Const sPath As String = "C:\Users\Owner\Downloads\base\setting_000002016\"

    Set objFSO = New FileSystemObject

    nRow = 2
    nCol = 12
    Set c = ActiveSheet.Cells(nRow, 1)
    Do While c.Text <> ""
        sSubFol = sPath & c.Text
        If objFSO.FolderExists(sSubFol) Then
            For Each f In objFSO.GetFolder(sSubFol).Files
                If objFSO.GetExtensionName(f) = "jpg" Then
                    ActiveSheet.Cells(nRow, nCol).Value = f.Name
                    nCol = nCol + 1
                End If
            Next
        nRow = nRow + 1
        nCol = 12
        Set c = c.Offset(1)
        i = i + 1
    Loop
    MsgBox i - 1 & "件ありました。"
End Sub

参考URL>>
https://www.relief.jp/docs/fso-vba-references.html
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm

動作確認をしてません。上手く動かなかったらごめんなさいです。

(まっつわん) 2018/06/07(木) 09:36


わざわざありがとうございます。
帰宅後試したいと思います。

それから確認ですが、ブレイクポイントというのはoffice2016にもございますでしょうか?
(ロジック) 2018/06/07(木) 10:11


2016が手元にないですが、

VBE(VBAのコードを書く場所)はエクセル2000くらいからほとんど変わってないと思います。
し、

デバッグをするうえで一番使う機能なので、無いという事はないと思います。
(まっつわん) 2018/06/07(木) 11:14


Excel2016にはあります。VBEのF9キーでOKです。

(隠居じーさん) 2018/06/07(木) 11:22


あちらに書きましたが、
Msgboxをダミーで挿入し、出力で確認するのも
一つの確実な方法です。
ActiveXコントロールなら、特定のプロシージャー名が
付与されたプロシージャをシートモジュールに
書きます。
フォームコントロールの場合は標準モジュールに書きます。
マクロの登録処理が欠かせません。
そのあたりに勘違いがありそうです。

(γ) 2018/06/07(木) 12:26


ブレークポイントについては、2016だから無いとはおもいませんが、仮になかったとしても、STOPステートメントで代用すればいいとおもったり・・・・
(もこな2) 2018/06/07(木) 12:56

まっつわん様

ありがとうございます。確認させて頂きます。

隠居じーさん様

かしこまりました。試してみます。

γ様

かしこまりました。
ちなみに、シートモジュールとは標準モジュールとは別なんでしょうか?

もこな2様

恥ずかしながらstopステートメントとはなんでしょうか?

(ロジック) 2018/06/07(木) 13:53


 >恥ずかしながらstopステートメントとはなんでしょうか?
解らない用語は検索してみましょう。

返事を待っている時間がもったいないです。
(まっつわん) 2018/06/07(木) 14:05


まっつわん様

私の説明があっているかわかりませんが、
ようするにブレイクポイントのように処理を中断する役割であっておりますでしょうか?
(ロジック) 2018/06/07(木) 14:30


 >ようするにブレイクポイントのように処理を中断する役割であっておりますでしょうか?
合ってます。

意味あるいは役割としては同じです。

ただ、コードに書くと消すまで消えません。

ブレークポイントは、ブックを閉じたらその情報は保存されていません。

(まっつわん) 2018/06/07(木) 14:42


まっつわんさんにフォローして頂いていますが、聞くより調べるが速しですね。

↓この辺がわかりやすいかもです。
https://www.moug.net/tech/exvba/0150019.html
(もこな2) 2018/06/07(木) 14:50


まっつわん様、もこな様

ありがとうございます。
うまくいくかわかりませんが、

教えていただいたことを確認しながらやってみます。
(ロジック) 2018/06/07(木) 14:54


お世話になりますこんばんは。

activexコントロールボタンを使って、ボタンを設置したいシートに質問したときの、プログラムの下に

 Private Sub CommandButton1_Click()
     Call test2
 End Sub

と記述いたしましたが、動きませんでしたので、再度ブレイクポイントを設定してみたところ、

Do While sSubFol <> ""
の箇所でプログラムが止まっていることがわかりました。
(ロジック) 2018/06/07(木) 20:09


>Do While sSubFol <> ""
>の箇所でプログラムが止まっていることがわかりました。

その行の意味が理解できてないということですか?

その行は
sSubFol <> "" の比較式の答えが真の内はループする
ということなので、
sSubFolの値が""(=長さ0の文字列)だから、
処理がループの中に入らずにEnd Subに行っちゃってるってことです。

なんでsSubFolの中身が空白なのかというと、

sSubFol = Cells(nRow, 1).Text
↑ここのCells(nRow, 1)が、
アクティブシートのnRow行目の1列目のセルという意味になってますが、
それで合ってるんですかね?
複数シートがある場合は、どのシートの話かちゃんと書かないと、
エクセル君が勝手に解釈しますので、動作が意図通りにならない場合が出て不安定になります。
その辺をチェックしてみてください。

(まっつわん) 2018/06/07(木) 20:28


まっつワン様

設置したシートが何もセルにデータもない白紙となっているファイル抽出というシートで、

対象データがbase用フォーマットというシートでございます。
(ロジック) 2018/06/07(木) 20:32


 # 帰宅しました。少しタイミングが遅れたがコメントします。

 >ちなみに、ActiveXコントロールとフォームコントロールの違いはあるのでしょうか? 

 以下が参考になります。
 VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス
http://www.moug.net/tech/exvba/0150071.html
http://www.moug.net/tech/exvba/0150072.html
 少し古いが、フォームコントロールとActiveXコントロールの比較記事です。
 紙に打ち出して読むことを薦めます。漠然と画面を眺めるのではなく。

 -----------------

 > と記述いたしましたが、動きませんでしたので、再度ブレイクポイントを設定してみたところ、 
 > Do While sSubFol <> "" 
 > の箇所でプログラムが止まっていることがわかりました。
 意味がわかりません。
 ブレイクポイントは自分で任意の場所に設定するものです。
 > Do While sSubFol <> "" 
 にブレークポイントを設定したということですか?
 それともそこでエラーが発生しているいうことですか?

(γ) 2018/06/07(木) 20:57


γ様

そのプログラミングにブレイクポイントを設定いたしました。
(ロジック) 2018/06/07(木) 21:06


>対象データがbase用フォーマットというシートでございます。

じゃ、
sSubFol = Cells(nRow, 1).Text
 ↓
sSubFol = worksheets("base用フォーマット").Cells(nRow, 1).Text

じゃないと、質問もそうだけど、
ちゃんと省略しないで説明しないと話しがエクセル君に通じないですよ。

(まっつわん) 2018/06/07(木) 21:10


>そのプログラミングにブレイクポイントを設定いたしました。
そのプログラミングにブレイクポイントを設定という意味が不明です。

> Do While sSubFol <> ""
にブレークポイントを設定したのですか?
どこの行に設定したのか自覚されていますか?

>ちなみに、シートモジュールとは標準モジュールとは別なんでしょうか?
ここは理解されたのでしょうか?
今回のコードはどのモジュールに書いたものですか?
(上の議論をすべて読んでいないので、このあたりを理解されていたら失礼)
・標準モジュールに書いたコードでシートを省略したら、その時にアクティブなシートが前提です。
・シートモジュールに書いたコードでシートを省略したら、そのシートが前提になります。
このあたりをしっかり抑える必要があるでしょう。

(γ) 2018/06/07(木) 21:35


γ様

ートモジュールとは標準モジュールとは別なんでしょうか?
ここは理解されたのでしょうか? わたしは長い文章を呼ぶのが苦手なので、時間あるときにゆっくり見させていただきます。

まっつわん様

大変失礼いたしました。
sSubFol = worksheets("base用フォーマット").Cells(nRow, 1).Text
のように修正いたしましたが、未だにbase用フォーマットに反映されておりません。
(ロジック) 2018/06/07(木) 22:16


 >未だにbase用フォーマットに反映されておりません。
ただむやみに動かしても原因が特定できないです。
ブレークポイントで止めて、
ステップインで1行づつ実行しているときに、
その時にローカルウィンドウに
sSubFol の値は意図通りの値が入っているかどうかをまず確認してください。

後どこでどうなればいいか、イメージしながらステップ実行してみてください。

(まっつわん) 2018/06/07(木) 22:22


あくまでお手軽にやりたいということですか。
ちょっと助言する気もなくなりました。
頑張ってください。
(γ) 2018/06/07(木) 22:30

まっつわん様

ステップインで確認し値のほうは問題ないようですが、
元のシートに戻ってファイル抽出というシートを見たところ、

L列からU列に順番に

100760.jpg 000032007_0001.jpg 000032007_0002.jpg 000032007_0003.jpg 000032007_0004.jpg 000032007_0005.jpg 000032007_0006.jpg 000032007_0007.jpg 000032007_0009.jpg 000032007_0010.jpg

のようにこれだけのファイル名が意図しない形で反映されておりました。
(ロジック) 2018/06/07(木) 22:47


 >のようにこれだけのファイル名が意図しない形で反映されておりました。
と言われても、意図した形がこちらではわかりませんので、コメントのしようがありません。

どうしたいのですか?

こちらで今理解出来ているのは、

1)セルにデータもない白紙となっているファイル抽出というシートにActiveXコントロールの
ボタンが1個だけ配置
2)対象データがbase用フォーマットというシートのA列2行目から下にフォルダーのパスが羅列されている

3)ボタン押下で、各フォルダーの中の拡張子がjpgのファイル名をどこかのシートの12列目から右に書き出す
(あってる?)

これだけです。
意図した形をちゃんと説明してみてくだささい。

あ、あとマクロの起動は、
ファイル抽出というシートのシート上のActiveXコントロールのボタンを押下で、
行う事にした。
でいいのですかね?

(まっつわん) 2018/06/07(木) 23:04


本来であれば、

A列2行目から最終行までの番号が一致したら、

同じ番号のサブフォルダが一致したらbase用フォーマットのL列以降に対象番号.jpg以後ファイル内に保存されているファイル名を記述する形になっております。

マクロの起動は、 ファイル抽出というシートのシート上のActiveXコントロールのボタンを押下で、
行う事にした。
でいいのですかね?

さようでございます。
(ロジック) 2018/06/07(木) 23:10


 >保存されているファイル名を記述する形になっております。
なっているなら、それでいいのでは?
というか「どうしたい」というあなたの意思をコードに書かなければいけないのでは?

で、どうしたいのですか?

あと、4つのシートがあると書かれてますが、結局、
1)ボタンを置くのが、ファイル抽出というシート
2)フォルダーのパスのデータがあるのが、base用フォーマットのA列
3)で、そのフォルダ内のjpgという拡張子のファイルをbase用フォーマットのL列から右に
ファイル名を書き出す。

でいいのですか?
よく、ファイル名が入っているセルをクリックしたら、
ファイルが開くようにしたいという要望もありますが、
今後そういう機能もつけますか?

というかここまで書いて思いました。
そういうことは画像系のソフトに任したら、
サムネイルで画像も見れるのに。。。
エクセルでも作れないこともないけど、
市販やフリーのソフトの方が高機能で使いやすい上に、
自作する苦労がないかと思いますが、
そういうのは検討の余地なしですか?

(まっつわん) 2018/06/07(木) 23:32


1)ボタンを置くのが、ファイル抽出というシート
2)フォルダーのパスのデータがあるのが、base用フォーマットのA列
3)で、そのフォルダ内のjpgという拡張子のファイルをbase用フォーマットのL列から右に
ファイル名を書き出す。

あっております。

ソースコードは何を書いたら言い方わかないんです。

ちなみに、フリーソフトでオススメのものがあれば教えていただけないでしょうか?
(ロジック) 2018/06/07(木) 23:39


>ちなみに、フリーソフトでオススメのものがあれば教えていただけないでしょうか?

ファイル名の一覧を抜き出したその後が何をしたいか解らないので、
用が間に合うかわかりませんが、
こういうのはいががでしょう?
http://www.ryouto.jp/f6exif/

 >1)ボタンを置くのが、ファイル抽出というシート 
 >2)フォルダーのパスのデータがあるのが、base用フォーマットのA列 
 >3)で、そのフォルダ内のjpgという拡張子のファイルをbase用フォーマットのL列から右に 
 >ファイル名を書き出す。 
 >あっております。 

ということなら、
ファイル抽出というシートにまずはActiveXコントロールのボタンを配置してください。
次にシートの見出しのタブ上で右クリックをし、コードの表示を選びます。
これで表示されたコードウィンドウにコードを書きます(貼り付けます)。

Option Explicit

Private Sub CommandButton1_Click()

    Dim FSO As FileSystemObject
    Dim f As File
    Dim rngPath As Range
    Dim c As Range
    Dim ixCol As Long

    'FSOを取得
    Set FSO = New FileSystemObject

    'フォルダーパスが書いてあるセル範囲を取得
    With Worksheets("ファイル抽出")
        Set rngPath = .Range(.Range("A2"), .Cells(.Rows.Count, "A").End(xlUp).Offset(1))
    End With

    '取得したセル範囲を巡回する
    For Each c In rngPath
        '与えられたパスが示すフォルダーがあるか存在確認
        If FSO.FolderExists(c.Value) Then
      '書出し位置(列)の初期値の設定
            ixCol = 12
            '指定されたフォルダ内のファイルについて繰り返す
            For Each f In FSO.GetFolder(c.Value).Files
                '拡張子がjpgなら
                If FSO.GetExtensionName(f) = "jpg" Then
                    'ファイル名をセルに書き出す
                    Worksheets("ファイル抽出").Cells(c.Row, ixCol).Value = f.Name
                    '次の書き出す列番号を用意
                    ixCol = ixCol + 1
                End If
            '次のファイルへ
            Next
        End If
    '次のセルへ
    Next
End Sub

対象のシートが2つあるので、どのシートに対して操作するのか明示するようにしてください。
そうすると紛れがなくなります。
(まっつわん) 2018/06/08(金) 00:23


あ、あと折角FSOを使っているので、
FSOの出来ることを理解し有効に使ってあげてください。
コードが簡単になるはずです。

(まっつわん) 2018/06/08(金) 00:25


おはようございます

先ほどやってみましたが、

Option Explicit
Private Sub CommandButton1_Click()

    Dim FSO As FileSystemObject
    Dim f As File
    Dim rngPath As Range
    Dim c As Range
    Dim ixCol As Long
    'FSOを取得
    Set FSO = CreateObject("Scripting.FileSystemObject")
    'フォルダーパスが書いてあるセル範囲を取得
    With Worksheets("base用フォーマット")
        Set rngPath = Worksheets("base用フォーマット").Range(.Range("A2"), Worksheets("base用フォーマット").Cells(.Rows.Count, "A").End(xlUp).Offset(1))
    End With
    '取得したセル範囲を巡回する
    For Each c In rngPath
        '与えられたパスが示すフォルダーがあるか存在確認
        If FSO.FolderExists(c.Value) Then
            '書出し位置(列)の初期値の設定
            ixCol = 12
            '指定されたフォルダ内のファイルについて繰り返す
            For Each f In FSO.GetFolder(c.Value).Files
                '拡張子がjpgなら
                If FSO.GetExtensionName(f) = "jpg" Then
                    'ファイル名をセルに書き出す
                    Worksheets("base用フォーマット").Cells(c.Row, ixCol).Value = f.Name
                    '次の書き出す列番号を用意
                    ixCol = ixCol + 1
                End If
            '次のファイルへ
            Next
        End If
    '次のセルへ
    Next
End Sub

の記述だと動かないでしょうか?

対象となるシートがbase用フォーマットですので、上記のように書き換えをしたのですが、それだけだとまだ十分ではないということでしょうか?

試しにこれで動かして、

ステップインで動かしつつローカルウインドウで値のデータの変化を見ましたが、nothingのままでした。

また、最後に

「FSOの出来ることを理解し有効に使ってあげてください。
コードが簡単になるはずです。」
というお言葉をいただきましたが、FSOを利用すれば上記のプログラムよりさらに簡単にできるということでしょうか?

(ロジック) 2018/06/08(金) 08:31


たびたびすみません。

Option Explicit

Sub Test2()

    Dim objFSO As Object
    Dim sPath As String, sSubFol As String, sFileName As String
    Dim nRow As Long, nCol As Long
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    sPath = "C:\Users\Owner\Downloads\base\setting_000002016\"
    nRow = 2
    sSubFol = Worksheets("base用フォーマット").Cells(nRow, 1).Text
    Do While sSubFol <> ""
        nCol = 12
        sFileName = Dir(sPath & sSubFol & "\*.jpg")
        If objFSO.FileExists(sPath & sSubFol & "\" & sSubFol & ".jpg") Then
            nCol = 13
        Else
            nCol = 14
        End If
        Do While sFileName <> ""
            If sFileName = sSubFol & ".jpg" Then
                Worksheets("base用フォーマット").Cells(nRow, 12) = sFileName
            Else
                Worksheets("base用フォーマット").Cells(nRow, nCol) = sFileName
                nCol = nCol + 1
            End If
            sFileName = Dir()
        Loop
        nRow = nRow + 1
        sSubFol = Worksheets("base用フォーマット").Cells(nRow, 1).Text
    Loop
    Set objFSO = Nothing
End Sub


Private Sub CommandButton1_Click()
   Call Test2
End Sub

ファイル抽出というシートに
この二つのコードを入力したら問題なく実行できました。

ありがとうございます。

最後にコントロールボタンについて質問させてください。

クリックしたときに、マクロが実行しているということがわかるようにボタンを細工させることって可能でしょうか?

たとえば、マクロが実行していたらボタンが沈んでいる、終わったらボタンが上がるというような状態のことです。

(ロジック) 2018/06/08(金) 09:07


ActiveXのボタンですよね? 何もしなくとも、処理中はボタンが引っ込んだままになり、終わると戻るように作られていますよ。 もしかして、コマンドボタンではなく、トグルボタンを配置していたりしませんか?(トグルボタンは勝手に戻らないやつです)

ただ、表示更新する隙なくロジックが動いていると、引っ込む描画が後回しにされるので、マクロ内のどこかに DoEvents を入れてみてください。
(???) 2018/06/08(金) 09:15


???様

かしこまりました。

もう一つ私なりに試しましたが、

msgbox"実行が完了いたしました"
という分を加えたのですがそれでもよろしいでしょうか?
(ロジック) 2018/06/08(金) 09:24


とりあえず今回の質問の件は解決いたしましたので、
このスれはクローズしていただいて構いません。
(ロジック) 2018/06/08(金) 09:25

 >たとえば、マクロが実行していたらボタンが沈んでいる、
 >終わったらボタンが上がるというような状態のことです。
こういう時によく使われるのが、ステータスバーに表示する方法があります。
http://www.moug.net/tech/exvba/0150098.html
http://www.k1simplify.com/vba/tipsleaf/leaf190.html

また、処理の最初にボタンの色を変えて、最後に戻すとか。
ボタンのキャプションを変えたりするとか。いろいろあると思います。
メッセージボックスを最後に出すのもありですが、
ユーザーにOKボタンを押す手間を強要するので、個人的には好きではありません。

また、市販のソフトで良く出てくる、プログレスバー
を自作するのもなくはないと思います。
http://pg-sample.sagami-ss.net/?eid=36
http://addinbox.sakura.ne.jp/ProgressBarTopic.htm

(まっつわん) 2018/06/08(金) 10:52


かしこまりました。
ありがとうございます。

もし別件でお世話になることがあればよろしくお願いいたします。
(ロジック) 2018/06/08(金) 14:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.