VBA内で、そのVBAの実行を制御することは可能でしょうか?
下のようなコードを作ったのですが、
Sub 承認書作成()
Dim ws0 As Worksheet, ws1 As Worksheet, r1 As Range
Dim i As Long
Dim nyuryoku(), chikuseki()
Set ws0 = Worksheets("承認書作成")
Set ws1 = Worksheets("顧客データ")
Set ws2 = Worksheets("業者コード")
Set ws3 = Worksheets("承認通知書")
Worksheets("顧客データ").Select
Range("テーブル1[[#Headers],[NO.]]").Select
Selection.End(xlToRight).Select
Selection.End(xlDown).Select
Selection.ListObject.ListRows.Add AlwaysInsert:=False
Range("B7").Select
nyuryoku = Array("b5", "d5", "f5", "h5", "j5", "l5", "n5", "p5", "b6", "d6", "f6", "h6", "j6", "l6", "n6", "p6", "b4", "d4")
'転記したいセルの位置
chikuseki = Array("0", "1", "5", "6", "8", "9", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "53", "54")
'転記先の列のオフセット値
Set r1 = ws1.Range("f" & Rows.Count).End(xlUp).Offset(0)
'データ蓄積セル
For i = 0 To UBound(nyuryoku)
r1.Offset(0, chikuseki(i)).Value = ws0.Range(nyuryokui)).Value
'入力
Next
MsgBox "入力完了"
Dim lRowNum As Long
'転記先となる行番号を求める
lRowNum = ws1.Cells(Rows.Count, "b").End(xlUp).Row
'転記
ws3.Cells(6, "d").Value = ws1.Cells(lRowNum, "j").Value
ws3.Cells(17, "g").Value = ws1.Cells(lRowNum, "c").Value
ws3.Cells(22, "g").Value = ws1.Cells(lRowNum, "l").Value
ws3.Cells(22, "ac").Value = ws1.Cells(lRowNum, "ab").Value
Set ws0 = Nothing
Set ws1 = Nothing
End Sub
ここに、
If call Macro1 then
call 承認書作成
'上のマクロです
Else: Msgbox"中止"
「Macro1を実行しないと承認書作成マクロを実行できない」
という
コードを組み込みたいのですが、うまくいきません。
VBA内に同じVBAを組み込むことは不可能なのでしょうか?
No.6ベストアンサー
- 回答日時:
#02です
>自分なりに上のマクロに組み込んでみたのですが、うまく作動してくれません。
とのことですが、まず新規のシートの標準モジュールシートに#02に書いたマクロをそのまま貼り付けて、Macro2を実行してみてください。次にMacro1を実行してから、もう一度Macro2を実行してください
簡単なマクロですから、まず動作を理解してからご自身のマクロに組み込んだ方がよいですよ。
想像が入りますが
Dim psw As Boolean
Sub Macro1()
psw = True
’ kinoyasukoさんのMacro1の記述
End Sub
Sub 承認書作成()
If psw Then
MsgBox "実行可能"
’ kinoyasukoさんの承認書作成マクロの記述
Else
MsgBox "中断"
End If
End Sub
のようにすれば動くと思います
この回答への補足
ありがとうございます!
目的の働きをしてくれました!
調べてみたのですが、Boolean型というものでしょうか?
この場合、Macro1を実行させると、「psw」がエクセルを終了するまで有効になっているのですが、
(表現の仕方が間違っていたらすみません。完璧には理解できていないです。)
承認書作成マクロの実行毎にこの動作をさせることはできないですか?
End IFのまえに、
psw = false
を入れてみたら解決しました!ありがとうございました。
また何かの機会があれば宜しくお願い致します。
No.7
- 回答日時:
#3です。
>Macro1をクリックした時のみ、承認通知書のマクロが実行されるようにしないといけなくて。
>Macro1のボタンを押せば承認書作成マクロが実行できる、押さないとできない。
シートに置いたコマンドボタンで承認書作成のマクロを実行したいと
言う事ですか?
この回答への補足
そうです、ボタンが2個ありMacro1のボタンを押さないと、
承認書作成マクロのボタンを押せないようにしたいです。
承認書作成ボタンを押すたびにリセットされ
承認書作成マクロを実行したあとに、承認書作成ボタンを2度連続で押そうとしてもMacro1のボタンをおしてからでないと実行できないようなしくみにしたいのです。
説明が分かりにくくすみません、お願い致します。
No.5
- 回答日時:
次ぎのステップへ実行したという情報を後のステップへ伝えるには、1変数(FLG)を定義しておいて、まず前もって適当な場所(色々処理により場合場合ガある)で初期化(例えばFLG=”N")しておいて、問題のステップを通ったら、FLG="Y"にして、通過したかどうかをチェックするステップでIf FLG="Y" Then (OKルーチン)のようにする。
(そして利用直後・用済み後にFLG="N"にする。)フラグ(旗を立てる)といって、プログラマの常識的手法です。
ただ変数FLGは、どのスッテップでも保持されている、PUBLIC変数などで無いと、別モジュールに行って、システムで初期化されるようでは困るので注意が必要です。
ーー
コードを長々書いて質問し、回答者に読解させるのも良いが、初めにやりたいことの要点を文章で書くのが、回答者の負担や、理解不十分を減らすことになることを考慮されたい。本件では
「プログラムのあるステップを通ったかどうか、後のステップで判別したい」ぐらいかな。
この回答への補足
>コードを長々書いて質問し、回答者に読解させるのも良いが、初めにやりたいことの要点を文章で書くのが、回答者の負担や、理解不十分を減らすことになることを考慮されたい。
説明不足ですみません。
質問が至らないのに回答して頂いて、ありがとうございます。
しかしVBA初心者なもので、ぜんぜん理解できないです、、、
すみません、勉強する限りですね。
No.4
- 回答日時:
単純に Macro1 → 承認書作成 の順番で必ずマクロを実行させたいって事じゃないみたいですね。
Macro1が一度も実行されて無い状態では「承認書作成」を実行出来ないようにしたいって事?
シェアウェアでパスワードを入れてないとダメ見たいな感じ?
例えば、Macro1を実行したら隠しシートとか既存シートの未使用セルとかに何らかのフラグを立てて、「承認書作成」マクロはそれを見て実行させるとか、、、
大した仕組みじゃないけど、例えば
'----------------------------------------------------------------------
Sub Macro1()
Do
s = Application.InputBox("パスワードは?", "入力", Type:=1)
If s = False Then
MsgBox "終了します", vbCritical, "キャンセル"
' ThisWorkbook.Close savechanges:=False
Exit Sub
End If
Loop Until s = 123456
MsgBox "OK", vbInformation, "パス解除"
Worksheets(1).Range("IV1").Value = True
ThisWorkbook.Save
End Sub
'----------------------------------------------------------------------
Sub 承認書作成()
If Not Worksheets(1).Range("IV1").Value Then
MsgBox "Macro1でパスワードを入れてね", vbInformation, "要求"
Exit Sub
End If
MsgBox "承認書作成"
End Sub
この回答への補足
ありがとうございます。
私にとっては複雑ですが、うまくいきました!
しかしどこに承認書作成マクロを組み込めばよいかが分かりませんでした。。
パスワードというのは少し大げさすぎまして、
Macro1のボタンを押せば承認書作成マクロが実行できる、押さないとできない。
といったものを作らないといけないのです。
分からない用語は勉強して、参考させて頂きます。
No.3
- 回答日時:
>「Macro1を実行しないと承認書作成マクロを実行できない」
>Macro1を実行していない場合は実行できない様にしたいのです。
承認書作成のマクロを実行した際に、まずMacro1を呼び出して実行後に
以降を続けて実行すればいいのでは?
承認書作成のマクロを実行する際に、Macro1が必ず実行されると
まずい場合があるのなら別ですが。
この回答への補足
>承認書作成のマクロを実行する際に、Macro1が必ず実行されると
まずい場合があるのなら別ですが。
まさにそうです。
Macro1をクリックした時のみ、承認通知書のマクロが実行されるようにしないといけなくて。
承認通知書のマクロに、承認通知書のマクロを組み込むと、どうしてもループしてしまいます。
なので、そんなことできるわけない、と教えてくだされば違う方法を考えてみます。
No.2
- 回答日時:
「ご参考まで」ですが、こんな制御方法も考えられます。
ただしプログラムスイッチをFalseに戻すタイミングは考える必要がありますが…
Dim psw As Boolean
Sub Macro1()
psw = True
End Sub
Sub Macro2()
If psw Then
MsgBox "実行可能"
Else
MsgBox "実行不可"
End If
End Sub
この回答への補足
迅速なご回答ありがとうございます。
自分なりに上のマクロに組み込んでみたのですが、うまく作動してくれません。
Macro1とは質問で提示したものでよろしいでしょうか?
せっかくアドバイス頂いたのに、VBA初心者なものですみません。
No.1
- 回答日時:
Sub 承認書作成()
call Macro1
Dim ws0 As Worksheet, ws1 As Worksheet, r1 As Range
:
:
ではいけないのですか?
この回答への補足
迅速なご回答ありがとうございます。
すみません、説明不足でした。
承認書作成マクロに制御をつけたいのですが、
Macro1を実行していない場合は実行できない様にしたいのです。
Ifの後にcallがどうしても入らないもので・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのデーターが2か月前の...
-
エクセルVBA、別ブックへ転記す...
-
【マクロ】顧客番号にて一致さ...
-
エクセル共有したが、アクセス...
-
エクセル②
-
(マクロ)データをAブックからB...
-
Excelでセルの値が同じか...
-
エクセルを使っていて2024/5/15...
-
指定文字の間に
-
Microsoft 365の Excel を使用...
-
エクセルの計算
-
エクセルでの作業計算方法について
-
Excelで全角を半角にしたいので...
-
エクセル関数に詳しい方教えて...
-
Googleスプレッドシートでファ...
-
エクセル 文字を増やしたい。
-
はがきについて。
-
エクセルの暗号化なしのバーの...
-
【マクロ】必要な項目(列)の...
-
Excel
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 作業後に選択範囲...
-
別のフォームで記述している関...
-
Sub Auto_Open() 実行されない
-
最小化ボタンで最小化したフォ...
-
ACCESSで別DBにあるクエリを...
-
Excelで、チェックボックスにチ...
-
円の中に等間隔に線を引くには
-
VBAでのユーザフォームの表示有...
-
エクセル マクロ 別シートから...
-
Excel vba 条件分岐 空白セルが...
-
ascW関数の結果がおかしい
-
Excelのマクロ実行後に動作が重...
-
メニューバーのイベントが2回...
-
ExcelVBAで毎月月初の最初にBoo...
-
Excel VBAのステップイン
-
ExcelVBA 日付変更
-
excel2010でボタンが反応しなく...
-
エクセルVBAのコードで質問です...
-
ExcelVBA ドロップボックスで月...
-
エクセル VBA
おすすめ情報