Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
ファイル拡張子”.xlsm”を持つスクリプトエンジンがありません。
投稿日時: 20/07/08 12:42:19
投稿者: ザックん

いつもお世話になっております。
 
作成した帳票(vba)をタイムスケジューラーを使用して自動で起動させようとしています。
vbsファイルをクリックすると起動するのですが、タイムスケジューラーにて起動させようとすると
ファイル拡張子”.xlsm”を持つスクリプトエンジンがありません。とメッセージが出てしまいます。
何か起動するためのものがまだ足りないのでしょうか。
ご教授願います。
 

回答
投稿日時: 20/07/08 12:55:58
投稿者: QooApp

タイムスケジューラーとタスクスケジューラが同様のものかわかりませんが、
 
win10からタスクスケジューラの仕様が変わったと書いてありますが、
下記ページの作法で起動しませんか。
 
▼タスクスケジューラから起動する win10
https://qiita.com/miyamiya/items/c02e4aa5be35248099ce

投稿日時: 20/07/09 10:38:50
投稿者: ザックん

QooApp様
 
いつもありがとうございます。
 
紹介されている方法ですと
VBSファイルは必要ないという解釈で宜しいのでしょうか。
 

回答
投稿日時: 20/07/09 13:11:18
投稿者: QooApp

URL先から引用します。
 
VBSにされているということでしたが、
エクセルの中に組み込んで置き、
下記引用のワークブックが開かれたら○○するという条件プログラムへ組み込んでおけばいいんじゃないでしょうか。
 
Win10になってから正直色々な仕様が死んだのでwin7まででできたこともかなり減りました。
応急処置的な解釈をしてもらえればいいです、今自分が成功したケースはこのパターンでした。
 

引用:

'自動実行

Sub Workbook_Open()
    Application.WindowState = xlMinimized
    通話記録
End Sub
ファイル(ブック)を開いた時にマクロを自動実行するメソッドです。
 
Application.WindowState = xlMinimized
起動時に最小化します。
 
Call Logging
Loggingを呼び出します。

投稿日時: 20/07/09 15:30:26
投稿者: ザックん

ありがとうございます。
 
タスクスケジューラの機能で設定時間通り特定のエクセルを開くことはできているのですが
 
そのエクセルのマクロを起動させることができません。
 
エクセルの上段に追記したのですが、動きませんでした。
 
CALLでスタートさせているからとか、関係あるのでしょうか。

投稿日時: 20/07/09 15:34:35
投稿者: ザックん

下記を起動させようとしています。
 
 
Sub マクロ()
 
Call マクロ最終
Call 出荷速報シートへ移動
Call 発注書PDF化
Call メール立ち上げ
Call クリア
Call SHEETへ戻る
 
End Sub

回答
投稿日時: 20/07/09 16:05:44
投稿者: QooApp

若干ふわっとした状態なので想像で回答します。
見当違いだったらごめんなさい。
 
おそらく
Private Sub Workbook_Open()
'呼び出したい関数群
End Sub
 
このパーツの入力位置が違います。
結構複数の関数を呼び出そうとしているということは、
標準モジュールのフォルダ階層にあるModuleなんたらのどれかに記載していると考えられます。
 
Private Sub Workbook_Open()の記載場所は標準モジュールのフォルダの上あたりに
ThisWorkbookというモジュールに入力してみてください。
 
起動時にPrivate Sub Workbook_Open()が成功しているかを試す際にCallを全部書き込むとちょっと怖いので
 
とりあえずThisWorkbookというモジュールに下記を書いて開きなおしてみてください。
 

Option Explicit

Private Sub Workbook_Open()

MsgBox ("hello")

End Sub

 
単純にメッセージが出るだけです。成功したらここへプログラムを搭載してみてください。

回答
投稿日時: 20/07/09 16:10:25
投稿者: QooApp

追記
 
自作関数の頭に SubかFunctionがついているはずですが、
もし、Private Sub または Private Functionという記述がある場合、
 
ThisWorkbookモジュールやほかのモジュールから参照できない状態になっています。
 
Public Sub か Public Functionにするか、社外に公開しない程度の開発であればもう書かないかの2択です。
 
別のモジュールシートからその関数を呼び出せるかどうかの制約として記載される書式ですが、
取り扱っていた場合はこれらが問題の可能性もありますので、追記しました。

投稿日時: 20/07/09 18:04:50
投稿者: ザックん

お世話になっております。
最上段には下記が記載しています。
自作関数の頭は、全てsubです。
 
Option Explicit
 
Public WS1 As Worksheet
Public WS2 As Worksheet
Public WS3 As Worksheet
Public WS4 As Worksheet
Public WS5 As Worksheet
 
Public LCRN1 As Long
Public LCRN2 As Long
Public LCRN3 As Long
Public LCRN4 As Long
Public LCRN5 As Long
 
Public N1 As Long
Public N2 As Long
Public N3 As Long
Public N4 As Long
Public N5 As Long
 
Public J1 As Long
Public AllRow As Long
 
Public ItemCode As String
Public ItemName As String
Public CName As String
Public Torihikisaki As String
Public RefNum As String
Public Tantou As String
Public TName As String
 
Public HQty As Long
Public UPrice As Long
Public TtlAmount As Long
 
Public TMAd As String
Public SMAd As String
Public sendad As String
 
Public ApAd As String
Public ApAd2 As String
 
 
 
 
Sub マクロ()
 
Call 中原マクロ最終
Call 出荷速報シートへ移動
Call 発注書PDF化
Call メール立ち上げ
Call クリア
Call SHEETへ戻る

投稿日時: 20/07/09 18:05:48
投稿者: ザックん

お世話になっております。
 
test ハローは成功しました。コードを入れて試してみます。

投稿日時: 20/07/09 18:16:23
投稿者: ザックん

お世話になっております。
コード全て貼ります。
 
Option Explicit
 
Public WS1 As Worksheet
Public WS2 As Worksheet
Public WS3 As Worksheet
Public WS4 As Worksheet
Public WS5 As Worksheet
 
Public LCRN1 As Long
Public LCRN2 As Long
Public LCRN3 As Long
Public LCRN4 As Long
Public LCRN5 As Long
 
Public N1 As Long
Public N2 As Long
Public N3 As Long
Public N4 As Long
Public N5 As Long
 
Public J1 As Long
Public AllRow As Long
 
Public ItemCode As String
Public ItemName As String
Public CName As String
Public Torihikisaki As String
Public RefNum As String
Public Tantou As String
Public TName As String
 
Public HQty As Long
Public UPrice As Long
Public TtlAmount As Long
 
Public TMAd As String
Public SMAd As String
Public sendad As String
 
Public ApAd As String
Public ApAd2 As String
 
Sub 中原マクロ()
 
Call 中原マクロ最終
Call 出荷速報シートへ移動
Call 発注書PDF化
Call メール立ち上げ
Call クリア
Call SHEETへ戻る
 
End Sub
  
 Sub 中原マクロ最終()
 
    Dim sht1 As Worksheet, sht2 As Worksheet
    Dim tcell As RANGE, trow As Long, brow As Long, drow As Long
    Set sht1 = Sheets("sheet")
    Set sht2 = Sheets("出荷速報")
    Set tcell = sht1.Columns("T").Find(WHAT:="280")
    If tcell Is Nothing Then
    MSGBOX "本日、完了品はありませんのでメール送信は致しません"
    End 'なかったら処理停
    End If
    trow = tcell.Row
    Do
    brow = sht2.RANGE("b" & sht2.Rows.count).End(xlUp).Row + 1
    If brow < 13 Then brow = 13
    sht2.Cells(brow, "B").Value = sht1.Cells(tcell.Row, "I").Value
    drow = sht2.RANGE("d" & sht2.Rows.count).End(xlUp).Row + 1
    If drow < 13 Then drow = 13
    sht2.Cells(drow, "d").Value = sht1.Cells(tcell.Row, "J").Value
    Set tcell = sht1.Columns("T").FindNext(tcell)
 Loop Until tcell.Row = trow
 
End Sub
Sub 出荷速報シートへ移動()
'
' 出荷速報シートへ移動 Macro
 
    Sheets("出荷速報").Select
End Sub
 
 
Sub 発注書PDF化()
 
Dim WS1 As Object
Dim WSH As Object
Set WSH = CreateObject("Wscript.Shell")
Set WS1 = Worksheets("出荷速報")
Dim FName As String
Dim FPath As String
 
FName = WS1.RANGE("B2")
FPath = ThisWorkbook.Path
 
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
FPath & FName & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
 
Set WSH = Nothing
 
End Sub
 
Sub メール立ち上げ()
 
Set WS1 = ActiveSheet
Set WS2 = Worksheets("USER")
Tantou = WS2.RANGE("B2")
TMAd = WS2.RANGE("D2")
 
AllRow = ActiveSheet.Rows.count
 
'Outlookオブジェクト生成
Dim OL As Outlook.Application
Dim MI As Outlook.MailItem
Set OL = CreateObject("Outlook.Application")
Set MI = OL.CreateItem(olMailItem)
Dim FName As String
Dim FPath As String
Dim i As Long
 
 
FPath = ThisWorkbook.Path
FName = FPath & "出荷速報" & ".pdf"
 
SMAd = WS2.Cells(2, 4) '発信者
sendad = WS2.Cells(2, 5) 'あて先
ApAd = WS2.Cells(3, 5) 'cc
 
    'メール各設定
MI.SentOnBehalfOfName = SMAd '差出人
MI.To = sendad 'TO
MI.CC = ApAd 'CC
 
'MI.CC = "xxx2@xxx.com;xxx3@xxx.com" 'CC
MI.Attachments.Add FName '添付
 
    MI.Subject = "本日発送します" '件名
        '本文
    MI.Body = "いつもお世話になっております。" _
        & vbCr & "添付の通り発送しますので、よろしくお願いいたします。" _
        & vbCr & "株式会社" & Tantou
 
    'メール表示
MI.Display
 
MI.Send
 
 
    'オブジェクト解放
Set OL = Nothing
Set MI = Nothing
 
MSGBOX "メール送信が完了しました"
 
End Sub
 
Sub クリア()
 
 
' クリア1 Macro
'
Sheets("出荷速報").Select
'
    RANGE("B13:D25").Select
    Selection.ClearContents
 
End Sub
 
Sub SHEETへ戻る()
 
Sheets("sheet").Select
 
End Sub
 

回答
投稿日時: 20/07/09 18:28:45
投稿者: QooApp

最後に掲載されている部分ですが、
かなり個人情報会社情報あるので掲載しない方がいいと思います。
 
テストが成功されているということなので、
プログラムの中に
 

引用:
Sub マクロ()
  
Call マクロ最終
Call 出荷速報シートへ移動
Call 発注書PDF化
Call メール立ち上げ
Call クリア
Call SHEETへ戻る
  
End Sub

 
「マクロ」を打ち込めばいいと思います。
止まったらエラーコードを投稿してくれればと思います。

投稿日時: 20/07/09 19:27:44
投稿者: ザックん

お世話になっております。
QooApp様
 
ありがとうございます。
何とか成功しました!