プロが教える店舗&オフィスのセキュリティ対策術

マクロ有効テンプレートに下記の2つのマクロを設定しております。
2つのマクロを連続して希望通りに実行できる方法を教えてください。
マクロ-1
Sub 保存()
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Array("記載方法")).Delete
Application.DisplayAlerts = False
Sheets("提出シート").Shapes("紙").Visible = False '
Application.Dialogs(xlDialogSaveAs).Show Arg1:="\" & Range("P2").Value, Arg2:=xlOpenXMLWorkbookMacroEnabled
Worksheets("提出シート").Activate
Range("B1", "C28").Select
myBook = ThisWorkbook.Path
Application.DisplayAlerts = False
Sheets("提出シート").Shapes("紙").Visible = False '
Sheets("提出シート").Shapes("紙保存").Visible = False '
Sheets("提出シート").Shapes("注意").Visible = False '
ActiveWorkbook.SaveAs Filename:=myBook & "\" & Range("P2").Value & "●.xlsx", FileFormat:=xlOpenXMLWorkbook
Application.Quit
With ThisWorkbook
.Saved = True
Application.DisplayAlerts = True
.Close False
End With
End Sub
このマクロを実行すると不要なシートが削除され、指定セル値名で、マクロ有効ブック:xlsmと一般ブック:●.xlsx
の2つのファイルで保存されます。
マクロ-2
Sub メール提出()
With Range("J40")
If .Hyperlinks.Count > 0 Then
.Hyperlinks.Item(1).Follow
ElseIf .HasFormula And InStr(.Formula, "HYPERLINK") > 0 Then
ActiveWorkbook.FollowHyperlink Address:=GetLinkURL(.Item(1))
Else
MsgBox "ハイパーリンクは設定されていません"
End If
End With
End Sub

Function GetLinkURL(rTarget As Range) As String
Dim v1 As Variant, v2 As Variant, str3 As String
Dim i As Long
If rTarget = "" Then Exit Function
v1 = Split(rTarget.Formula, "HYPERLINK(")
v2 = Split(v1(1), ",")
For i = 0 To (UBound(v2) - 1)
str3 = str3 & v2(i) & ","
Next i
str3 = Mid(str3, 1, Len(str3) - 1)
With Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Formula = "=" & str3 '値取得はExcelにお任せ
GetLinkURL = .Text
.Clear
End With
End Function
このマクロを実行すると指定セル値のハイパーリンクが開くようになってます。
このマクロを連続して実行できるように
Sub 提出統合()
Application.Run "保存"
Application.Run "メール提出"
End Sub
を作成して「Sub 提出統合()」を実行すると
マクロ-1の「Sub 保存()」が上手く実行されるのですが、マクロ-2の「Sub メール提出()」
が実行されません。
原因として考えられるのが「Sub 保存()」が実行された後にすべてのファイルがクローズするので、「Sub 保存()」が実行されないのではないかと思います。
「Sub 保存()」を実行後、マクロ有効ブック:xlsmはクローズされず、「Sub メール提出()」が実行ができ、その後、「Sub メール提出()」が実行後、マクロ有効ブック:xlsmと一般ブック:●.xlsxがクローズできる方法を教えてください。●.xlsxは「Sub メール提出()」の実行に関係が無いので、先にクローズしても構いません。
今まで色々な方に教えて頂き、ここまで来ることができました、今回もご指導をよろしくお願いいたします。

A 回答 (1件)

既存のマクロを順番に呼び出すマクロを作ればいい。



・・・

そのマクロを手作業で起動させるか、別のマクロから呼び出して起動させるかの違いですよ。

マクロの先頭行にある、
 Sub 保存()

 マクロの名前
ですので、このマクロ名を指定して呼び出せばOK。

「別のマクロを呼び出して、呼び出したマクロが終了したら呼んだマクロに戻る」
やり方を調べてみましょう。
調べると、呼び出すマクロや呼び出されるマクロで共通して使う変数の設定の方法とか出てくると思います。
そういった注意点を理解してマクロを組み上げてみましょう。

・・・

ここまでできるようになったのであれば、
マクロから別のマクロを呼び出すことができるという事を知らなかっただけのようですので
ちょっと調べれば余裕ですよね。
    • good
    • 2
この回答へのお礼

回答ありがとうございました。
頑張ってやってみます。

お礼日時:2022/10/13 09:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!