お世話になっております。
VBAは初心者ゆえ基本的な質問失礼いいたします。
前任者は退職しているため誰にも聞けないので相談にのっていだけないでしょうか?
今excel2016で
ID シート名 ボタン ================================ 1 あああ 「削除」 2 いいい 「削除」 3 ううう 「削除」 「行を追加」 ================================ [概要][あああ][いいい][ううう]←シート名
との表があり ↑の「削除」ボタンを押すとその行と
その指定の文字列のシートを削除するVBAを組もうと思っております。
その行は前任者が消しているのでシートの方も楽勝だと思ったのですが
スパゲッティソースで訳がわからないので相談させてください。
↑のIDを前任者が使っていれば良かったのですが
「行を追加」を押しても内部で利用しているIDは分からないのです……
(デバッグで表示させたが不明で下記関数のリターン値を持ってきている)
Public Function AddRow(Sh As Object) As Long Dim LastRo As Long Dim TargetRo As Long Dim Tpos As Double Dim RefNum As Long With Sh LastRo = Module1.GetLastRow(Sh, .Rows.Count, 2) TargetRo = LastRo + 1 AddRow = TargetRo .Rows(TargetRo).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows(TargetRo).RowHeight = 20 '整理番号 RefNum = TargetRo - 5 'グローバル変数;記入対象の行 CiteRo = TargetRo .Cells(TargetRo, 2).Value = RefNum '「工事名」の記入 .Cells(TargetRo, 5).Value = "未記入" End With Tpos = (RefNum - 1) * 19.8 + 90.6 'Tpos = (RefNum - 1) * 19.584 + 96.768 '罫線引き Call DrawRuledLines(Sh, TargetRo, 2, 13) '[記入]と[削除]ボタン作成 Call MakeCmdButton(Sh, 73.8, Tpos, 35.4, 19.8, RefNum) 'Call MakeCmdButton(Sh, 70.848, Tpos, 35.136, 20.1, RefNum) '[記入]ボタンのプロシージャ作成 Call ShowProcInsert(Sh.CodeName, RefNum, TargetRo) '[削除]ボタンのプロシージャ作成 Call DelButtonProcInsert(Sh.CodeName, RefNum) '[適用追加]ボタンの Enable=False/True Call CiteAddButtonEnabledChange(Sh) End Function
なんかVBAだと特殊は返り値があるのでしょうか?
もう本当にスパゲッティソースで訳がわからないのですが
とっかかりが掴めないので質問失礼します。
上記シート【いいい】を削除する方法で良い方法は無いでしょうか???
自分が混乱しているのは自覚しているのですが何か案があればと書き込み失礼いいたします。
【追加】ココから================================
Private Sub DelButtonProcInsert(ShCodeName As String, Num As Long) '[削除]ボタンのプロシージャ作成 Dim DelProcName As String Dim Cnt As Long DelProcName = "Del" & Num & "_Click" With ThisWorkbook.VBProject.VBComponents(ShCodeName).CodeModule On Error Resume Next '同名のプロシージャがなければエラー発生、あればCnt>0 Cnt = .ProcBodyLine(DelProcName, 0) On Error GoTo 0 If Cnt > 0 Then Exit Sub '←同名のプロシージャがなければ Cnt=0 .insertlines 1, "Private Sub " & DelProcName & "()" .insertlines 2, "'Del" & Num & "Button" .insertlines 3, vbTab & "Call ThisWorkbook.DelButtonClick(Activesheet," & Num & ")" ' .insertlines 3, vbTab & "If Not Application.EnableEvents Then Exit Sub" ' .insertlines 4, vbTab & "Call Module3.DelRow(Activesheet," & Num & ")" .insertlines 4, "End Sub" End With End Sub
Public Function AddRow(Sh As Object) As Long Dim LastRo As Long Dim TargetRo As Long Dim Tpos As Double Dim RefNum As Long With Sh LastRo = Module1.GetLastRow(Sh, .Rows.Count, 2) TargetRo = LastRo + 1 AddRow = TargetRo .Rows(TargetRo).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows(TargetRo).RowHeight = 20 '整理番号 RefNum = TargetRo - 5 'グローバル変数;記入対象の行 CiteRo = TargetRo .Cells(TargetRo, 2).Value = RefNum '「工事名」の記入 .Cells(TargetRo, 5).Value = "未記入" End With Tpos = (RefNum - 1) * 19.8 + 90.6 'Tpos = (RefNum - 1) * 19.584 + 96.768 '罫線引き Call DrawRuledLines(Sh, TargetRo, 2, 13) '[記入]と[削除]ボタン作成 Call MakeCmdButton(Sh, 73.8, Tpos, 35.4, 19.8, RefNum) 'Call MakeCmdButton(Sh, 70.848, Tpos, 35.136, 20.1, RefNum) '[記入]ボタンのプロシージャ作成 Call ShowProcInsert(Sh.CodeName, RefNum, TargetRo) '[削除]ボタンのプロシージャ作成 Call DelButtonProcInsert(Sh.CodeName, RefNum) '[適用現場を追加]ボタンの Enable=False/True Call CiteAddButtonEnabledChange(Sh) End Function
私も良く分からないなりで言いますが、提示のコードって『行を追加』のコードではないですか?
他にコードはありませんか?アドインはありませんか?
他にコードはあります……丸投げになりそうだったので
必要かな?と思われる部分を表記しました……
ID シート名 ボタン
================================
1 あああ 「削除」
2 いいい 「削除」
3 ううう 「削除」
「行を追加」
================================
というところまでが表で、それが[概要]シートに書かれている?
Public Function AddRow のコードは、どのモジュールに書かれている?
jinoji様
コメントありがとうございます。
仰る通りそれが【概要】シートに記載されています。
Public Function AddRow のコードは標準モジュールのModule3に記載しており
質問文に追記しました。
そのAddRowにて内部で使用しているID?が分かる気がします……
前任者は何かドキュメントを残して欲しかったです……
「行を追加」ボタンを押すと、どんな処理がどんな順番で動くのですか。
(ThisWorkbook.AddButtonClickとかでしょうか??)
なお、Module3.AddRowファンクションは、
概要シートの表の最下行に新規行を追加し、
そこにボタンを配置し、
そのボタンで呼び出されるVBAコードを作成する、
という流れに見えます。
最下行に追加するので、もし実行時にあるIDが1~3だったら、
追加する行のIDは4になるのだと思います。
今回、削除ボタンを押したときの処理を作るのであれば、
どの行の削除ボタンを押したか、によってIDが決まることになるはずで、
AddRowとは少し考え方が異なるのではないでしょうか。
回答2件
あなたの回答
tips
プレビュー