Private Sub 修正終了_Click( )
ActiveSheet .OnDoubleClick = ""
Range("A1") .Select
ActiveSheet .Protect DrawingObjects:=True ,Contents:=True ,Scenarios:=True
Unload 内容変更確認
End Sub
-----------------------------------------------------------------------------------------------------------
Private Sub 保存不要_Click( )
ActiveSheet .OnDoubleClick = ""
Range("A1") .Select
ActiveSheet .Protect DrawingObjects:=True ,Contents:=True ,Scenarios:=True
Unload 内容変更確認
End Sub
------------------------------------------------------------------------------------------------------------
Private Sub userform_queryclose(cancel As Integer ,closemode As Integer)
If closemode <> vbFormCode Then
Cancel = True
End If
●このプログラムを使用すると、フォームの右上の×で閉じられない。
必ずどれかのボタンで終了したい場合に有効である。
End Sub
Private Sub 数量変更保存_Click( )
Sh = ActiveSheet .Name ' 現在のシート名をShの代入
If Sh = "Sheet1" Then ' 現在がSheet1なら実行
If ActiveCell .Address() = "$G$12" Then ' G12でダブルクリックしたなら
内容変更確認 .変更値 .Text = Sheets("Sheet1") .Range'"G12") '
数量を表示する
Hinb = Range("D12") ' 品番を取得している。
intG = Val(Hinb + 7) ' 品番を数値に変換して、7 加算している。
' Sheet1とSheet2では品名の行位置が 7 違う
内容変更確認 .Text = intG
End If
End If
intGb = 内容変更確認 .行番 .Text
intHd = 内容変更確認 .変更値 .Text
intLb = 11 ' この11は、Sheet2の手配数の位置を仮に指しているが
' 実際の在庫帳では、分かっていないので割り出しが必要である。
Sheets("Sheet2") .Activate
ActiveSheet .Unprotect
Cells(intGb ,intLb) .Value = intHd ' Sheet2のセル位置に数値を記入している。
ActiveSheet .Protect DrawingObjects:=True ,Contents:=True ,Scenarios:=True
' シート保護をしている。
ActiveWorkbook .Save
Unload 内容変更確認
Call 加工ダブルクリック取り消し
End Sub
---------------------------------------------------------------------------------------------------------------
Private Sub 単価変更保存_Click( )
intGb = Hinb
intHd = 内容変更確認 .変更値 .Text
内容変更確認 .行番 .Text = Hinb
Sheets("Sheet2) .Activate
ActiveSheet . Unprotect
Cells(Hinb ,5)Value = intHd ' この 5 はSheet2の単価列の位置が 5列目だから
ActibeSheet .Protect DrawingObjects:=True ,Contents:=True ,Scenarios:=True
ActiveWorkbook .Save
Unload 内容変更確認
Call 加工ダブルクリック取り消し
End Sub
strCyu3 = "単価が変更されました。"
strCyu1 = "今回だけ単価を変更する場合は、" & vbCrLf & _ " 保存不要ボタンを押す"
& vbCrLf & _
& vbCrLf & vbCrLf & "次回からも単価を変更する場合は、" & vbCrLf
& _
"単価変更保存釦を押してください。" & vbCrLf & _
"自動で在庫帳に保存します。"
●現在、数量変更が選択されている。
If ActiveCell .Address( ) = "$G$12" Then ' ダブルクリックしたセル
内容変更確認 .Show vbModeless ' 内容変更確認と言うフォームを表示
内容変更確認 .Text1 .Text = strCyu1 ' フォームの Text1 に strCyu1 を表示
内容変更確認 .Label1 = strCyu2 ' フォームの Label1 にstrCyu2 を表示
内容変更確認 .単価変更保存 .Visible = False ' これは[単価変更保存]ボタンを消している。
内容変更確認 .行番 .Text = 12 ' Sheet1 で選択の行番号を表示。現在は12で
' 固定しているが、実際には割り出しが必要になる。
内容変更確認 .変更値 .Text = Range("G12") ' 選択の変更値を表示
End If
●現在、数量変更が選択されている。
Text1 に strCyu1 を表示している。
変数にする理由は、数量と単価の変更では
文面が変わるからである。
Label1 に strCyu2 を表示している。
Private Sub 加工データ読出( )
strCyu1 = "数量が変更されました。"
strCyu2 = "手持ち部品があるから少なくした場合は、" & vbCrLf & _ "
保存不要のボタンを押して
" & vbCrLf & _ "自分で手持ち数を在庫帳に入庫してください。" & vbCrLf
& _
"手配数を多くした場合は、" & vbCrLf & _ "数量変更保存釦を押してください。"
& vbCrLf & _
"自動で在庫帳に保存します。"
● vbCrLf を入れると、文字列を改行して折り返す。vbCrLf の前後には & が必要です。
vbCrLf を続けて入れると、空白の改行ができる。
Sub 加工品ダブルクリック( )
ActiveSheet .Unprotect ' シートの保護解除
ActiveSheet .OnDoubleClick = "加工データ読出" ' ダブルクリックすると"加工データ読出"
' マクロを実行する。
End Sub
Sub 加工ダブルクリック取り消し( )
Sheets("Sheet1") .OnDoubleClick = "" ' ダブルクリックを無くしている。
' ActiveSheet OnDoubleClick = "" ' こちらの構文でもよい。
End Sub
これが、[DC有効]ボタンに登録されたマクロである。
これが、[DC無効]ボタンに登録されたマクロである。
A0-04の単価が 1200 に変更された。
在庫帳のA0-04の手配数が 4 に変更された。
単価変更して[DC有効]ボタンを押すと、ダブルクリックが有効になり、単価をダブルクリックすると
フォームが表示される。
[単価変更保存]を押すとフォームを閉じて、在庫帳の単価が変更される。
数量を変更して、[DC有効]ボタンを押せば、ダブルクリックが有効になる。
変更したセルをダブルクリックすると、フォームが表示されるので、[数量変更保存]ボタンを押せば、
在庫帳の手配数量が変更される。また[保存不要]を押せば、変更しないでフォームを閉じる。
これがダブルクリックした時に表示されるフォームである。
・Label1には、注意書きが表示されるが、プログラムで
表示するようにしてある。
・テキストボックスには、数量か単価の変更が表示される。
・数量の変更の時は単価ボタンが消え、単価変更の時には
数量のボタンが消える。
これは、注文書発行の入力画面と連動した在庫帳の一部を取り出したものである。
● 設定数で最小在庫数と最大在庫数が決められていて、使用数を入力すると残数が計算され、
残数が最小在庫数か以下になると、注文書を発行する構造である。
だから、注文書入力画面には、手配数や単価などのデータが自動で入力される。
● 自動で入力された、数量、単価を変更しない場合は、そのまま印刷すればよいが、単価か
数量を変更したい時が発生する。
● その時に、変更したい数量、又は単価のセルをダブルクリックすれば、処理をするフォーム
が表示される。
これは、在庫帳と連動した注文書入力画面の一部を取り出したものである。
● 入力画面で、特定セルをダブルクリックすると、ユーザーフォームが表示される。
ダブルクリックの有効・無効の文法と使用法を解説する。
基本的なマクロの習得
セルのダブルクリックでフォームを表示させる
実際に使っているシステムの内容で解説
EXCEL VBA 講座