エクセル VBA
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を組み込むことは不可能なのでしょうか?
お礼
Dim strSQL As String strSQL = _ "UPDATE '" & sheet_name & "' " & _ "SET " & _ ws.Worksheets(sheet_name).Range("C1").Value & "=" & ws.Worksheets(sheet_name).Range("C2").Value & "," & _ ws.Worksheets(sheet_name).Range("D1").Value & "=" & ws.RWorksheets(sheet_name).ange("D2").Value & "," & _ "WHERE ref_serial =" & ws.Worksheets(sheet_name).Range("A2").Value 上記で変数設定の所を全て値にしたらエラー発生しなくなったので、 1つずつ変数に変更していきました。 なお、access側でIDがオートナンバーで主キーになっており、 この主キーをwhereで設定する必要があったので、構成を変更しました。 最終、下記でエラー無く動作できました。 Dim value1 As Single Dim value2 As Single Dim ID As Long Dim ref_serial As String ID = Worksheets("result").Range("A2").value ref_serial = Worksheets("result").Range("B2").value value1 = Worksheets("result").Range("C2").value value2 = Worksheets("result").Range("D2").value Dim strSQL As String strSQL = "UPDATE [" & sheet_name & "] SET result1 ='" & value1 & "' ,result2 ='" & value2 & "' ,ref_serial ='" & ref_serial & "' WHERE ID = " & ID ちなみにUPDATE [" & sheet_name & "]の所はUPDATE '" & sheet_name & "'とするとクエリエラーとなり、 SET以降は[でなくても動作するのが?でした。 [" & sheet_name & "] が大変参考になりました。 ありがとうございます。
補足
回答ありがとうございます。 やってみましたが、状況変わらずオブジェクトが必要です。 のエラー発生です。