VB初心者です。

いろんな処理をブックのマクロで行なっています。
今までは手作業でマクロを実行させてきたのですが
自動化したいと考えています。

処理させたいブックは複数あって
それぞれを処理するためのコントロール的な役割を
フォームをもたない実行ファイル(VB)で行ないたいと
思っているのです。
実行ファイルはタイマなどで自動起動を考えています。

そこで、
VBからブックのプロシージャーをCALLする方法がありましたら
具体的なコードを教えてください。
また、もっと簡単な方法がありましたら、
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

以前にエクセルとVBの連携のサンプルを乗せてます


http://oshiete1.goo.ne.jp/kotaeru.php3?q=165565
の#2の内容を見てください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=165565
    • good
    • 0

今日は仕事休んじゃいました。

。。(^^;)

エクセルを閉じた後か、ブックを閉じた後にマクロを呼んではいないですか?

ちょっと郵便局に行って来るので、レスが遅れます。
m(__)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘のとおりでした。
またよろしくお願いします。

お礼日時:2001/11/14 17:12

エクセル起動


Set xlApp = New Excel.Application

'アドイン情報の更新
xlApp.AddIns("分析ツール").Installed = False
xlApp.AddIns("分析ツール").Installed = True

'DSFP_EP 作成 ワークブックを開く
xlApp.Workbooks.Open ("F:\foruser\Duration Data 作成.xls")

として、アドイン情報をリフレッシュする必要があるようです。

うまくいかなかったら報告してください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
解決できました。
しかしそのエキスパートさには脱帽です。解答数からみて
仕事の合間に回答しているとは思えないのですが。

ついでで申し訳ないのですが、いろいろやってみましたが
自分では解決できそうにありません。

以下の不具合があります。
呼び出すマクロによっては終了時にエラーとなります。

エラーの内容は
「実行時エラー 440
Run メソッドは失敗しました:'_Application'オブジェクト 」

ただし、結果的にはうまく処理(最終的なファイルが出力されて終了)
できています。手動で行なった場合もうまく終了しています。

こころあたりありましたら、よろしくお願いします。

お礼日時:2001/11/14 15:31

なるほど、状況がわかりました。


全てはWORKDAY関数のせいです。
これはエクセルのアドインの分析ツールの関数です。
これはエクセルの追加機能なので、WORKDAY関数は反映しないようです。

回避方法は・・・すぐには調査不可能なので、また明日までに調べておきますね。
    • good
    • 0

>=TEXT(WORKDAY(TODAY(),0,Date!A2:A40),"yymmdd")&"_Duration.csv"


>と設定されていて
>
>通常は"011113_Duration.csv"となります。

とありますが
=TEXT(WORKDAY(TODAY(),0,Date!A2:A40),"yymmdd")&"
の部分で[011113]を取得するのですか?
WORKDAY関数って?オリジナル関数ですか?

画面の表示上では[011113]と出てるのに、VBAマクロ:Report内で、そこのセルの値を取得してる部分に"#NAME?"が入るという意味ですか?

VBAマクロ:Reportの内容を見てみないと、なんとも言えません。。。

この回答への補足

即日の解答ありがとうございます。これより別件で席を離れますが
以下補足いたします。

WorkDayはエクセルにあらかじめ組み込まれている関数のようです。以下はヘルプでみました。
書式
WORKDAY(開始日, 日数, 祭日)
開始日から起算して、指定された稼動日数だけ前または後の日付に対応する値を返します。

>とありますが
>=TEXT(WORKDAY(TODAY(),0,Date!A2:A40),"yymmdd")&"
>の部分で[011113]を取得するのですか?

はいそうです。
我々が使用している意味は祭日休日でない営業日を算出しています。

通常(VB起動でない)エクセルを開くと
”011113_Duration.csv"と入っていますが、
VBから起動すると、エクセルが表示され項目を見てみると "#NAME?"
となっています。

以下がReportのコードです(手動では動いています。)

A1の項目に例の内容(011113_Duration.csv)が入っています。
その内容(XXX)をOpenしてるところでエラーになり、エラーは
"実行時エラー 13
型が一致しません”です。

Sub Report()

Sheets("Macro").Select
Range("A1:A1").Select
XXX = ActiveCell.Value
Range("A10:A10").Select
YYY = ActiveCell.Value
Range("A2:A2").Select
ZZZ = ActiveCell.Value

ChDir "\\Tokyo\IFProto\foruser\調査\org"
Workbooks.Open FileName:= _
"\\Tokyo\IFProto\foruser\調査\org\" & XXX

Sheets("Yield").Select
以下コードはつづく

補足日時:2001/11/13 16:59
    • good
    • 0

>VB初心者です。


とありますが、参考URLのサンプルは難しかったですか?
わからない所があったら、聞いてください。

解決したのであれば、コメントもポイント発行しなくてもいいので、締め切ってくださいね。
    • good
    • 0
この回答へのお礼

先日も重ね重ね解答ありがとうございます。
いろいろ試行錯誤しているのですが、新たな問題があって困っています。

以下の問題解決方法知ってましたらよろしくお願いします。

呼び出され側のエクセルのマクロ内でエラーとなります。
原因はシート内の項目を参照しているのですが、内容が
"#NAME?"となっています。
実際は
=TEXT(WORKDAY(TODAY(),0,Date!A2:A40),"yymmdd")&"_Duration.csv"
と設定されていて
通常は"011113_Duration.csv"となります。
DateシートのA2からA10までは日付が入っています。

うまく関数が実行されていないのですかね?


VBのコードは以下のように作成しました

Sub main()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook

'エクセル起動
Set xlApp = New Excel.Application

'DSFP_EP 作成 ワークブックを開く
xlApp.Workbooks.Open ("F:\foruser\Duration Data 作成.xls")
Set xlBook = xlApp.ActiveWorkbook

xlApp.Visible = True

'マクロをCallする
Call xlApp.Run("Report")

'閉じる時の「保存しますか」を表示させない
xlBook.Saved = True

Set xlBook = Nothing
Set xlApp = Nothing

End Sub

お礼日時:2001/11/13 16:20

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel2013 VBA マクロ実行中に別ブックを編集すると、マクロがフリーズ

表題の通りなのですが、Worksheetのボタンイベントプローシージャ内で時間のかかる処理中
(モーダルのユーザフォームで進捗表示中)当該マクロのブックとは別に開いたブックのセルを
ダブクリックして編集モードに入ると、メインのブックのマクロがフリーズしてしまいます。
Debug.printで追い込んだところ、マクロと同じブックに所属のワークシート上のセルの
プロパティ書き換え処理....Value = ほげほげ、や.Font = ほげほげがフリーズし、
帰ってこなくなることが判明しています。これはそもそもの仕様なのでしょうか。
編集モードを抜けてもプロパティ書き換えの中で固まったままです

Aベストアンサー

マクロ実行中のBookのExcelでは他の作業をしないようにします。
Excel を Alt キーを押しながら立ち上げて別のインスタンスでExcelを開き、
そちらで作業を行えばよろしいかと。
別のインスタンスで開けているかはタスクマネージャで確認してください。

エクセル2013基本講座:Excel2013を別のインスタンスで起動するには?
http://www4.synapse.ne.jp/yone/excel2013/excel2013_kido3.html

対症療法的に感じるかもしれませんが一番確実かと思います。

なお、マクロ中でBookやSheetのオブジェクトの指定が曖昧で
問題が発生している可能性もありそうですね。

Qexcel vba 他ファイルマクロ処理中断、自己ファイルマクロ処理後、再度他ファイルマクロ継続方法

excel vbaで、他のEXCELファイルのマクロの処理を中断して、自己ファイルのマクロを処理後、再度他のEXCELファイルのマクロを継続して再度処理を行わせるにはどうすれば良いですか。教えて下さい

他のEXCELファイルとして、フリーソフトを利用しています。
そのソフトは、モジュールにロックが掛ってるので、その中のマクロなどを編集することはできません。(ロック解除などは考えていません。)
そのソフトを起動して、データファイル入力画面で、データファイルを入力して、処理をして、処理結果を保存することを、入力データファイルを変えながら、繰り返し行いたいです。
そこで、処理マクロを作成しています。その手順とVBAを説明します。

1)フリーソフト(違法なものではありません。)を開き、
2)そのフリーソフトのシート内のボタンを、VBAで、マウスカーソルを移動させて、マウスのキー操作で、「押す」「離す」を行い、
3)ファイルの初期化の問合せの警告が出るので、キー操作で、「Y」を押し、
4)データファイルの名称をクリップボードにコピーし
5)EXCELのカレントフォルダを、データファイルのあるフォルダに変えて
6)DoEventsとして、フリーソフトのデータファイル入力画面を開いています。
この時、画面のポインタは、データ入力画面のファイル名入力欄にあり、
この後、データファイル名をクリップボードから入力したいので、
キー操作で、「crtl+v」としたいのですが
フリーソフトのマクロが起動中で、作成している処理マクロに制御が移らないためと思いますが
入力できません。(人手での入力は可能ですが)、自動化したいので、どの様にすれば良いか教えて下さい。
マクロは長いので、抜粋して記載します。

sub a()
(宣言文省略します。)
Workbooks.Open freesoft
Dim mPSet As Long
mPSet = SetCursorPos(b,c)
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
keybd_event VK_Y, 0, fKEYDOWN, 0
keybd_event VK_Y, 0, fKEYUP, 0
Application.CutCopyMode = False
Dim d As New DataObject
With d
.SetText e
.PutInClipboard
End With
ChDrive f
ChDir g
DoEvents
(ここで、止まります。)
With d
.GetFromClipboard
.GetText
End With
keybd_event VK_RETURN, 0, fKEYDOWN, 0
keybd_event VK_RETURN, 0, fKEYUP, 0
DoEvents
Dim mPSet2 As Long
mPSet2 = SetCursorPos(h, i)
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Workbooks(freesoft).SaveAs FileFormat:=xlNormal, Filename:=k
Workbooks(k).Close
End sub

excel vbaで、他のEXCELファイルのマクロの処理を中断して、自己ファイルのマクロを処理後、再度他のEXCELファイルのマクロを継続して再度処理を行わせるにはどうすれば良いですか。教えて下さい

他のEXCELファイルとして、フリーソフトを利用しています。
そのソフトは、モジュールにロックが掛ってるので、その中のマクロなどを編集することはできません。(ロック解除などは考えていません。)
そのソフトを起動して、データファイル入力画面で、データファイルを入力して、処理をして、処理結果を保...続きを読む

Aベストアンサー

フリーソフトに関する詳細が分からないのですが、たぶん、MsgBox、InputBox、または、モーダルのUserFormが表示されたタイミングで、動作待ちになっているものと思われます。動作待ちになるトリガーは、Workbooks.Open freesoftでしょうか?(Open直後にUserFormが表示される?)

であれば、次のように、Shell関数でブックを開くようにすれば良いと思います。
Dim FreeSoft
FreeSoft = Shell("Excel " & "C:\xxxxx\フリーソフト.xlsm",1)
MsgBox "フリーソフトが開くまでの時間稼ぎ!!"
AppActivate FreeSoft

その後は、SendKeysステートメントでフリーソフトを操作することになります。たぶん、mouse_eventやkeybd_event も使えると思います。
ただし、Workbooks(freesoft).SaveAs 等は使えなくなるので、SendKeysによるキーボード操作で保存動作を行う必要があります。

Q[excel][マクロ]フォルダ内のマクロ有効のブックを通常のブックにするコード

以前フォルダ内の通常のブック(xlsx)をマクロ有効のブック(xlsm)にするマクロを組んだのですがそれを応用して今度は逆の作業をすることになり以前教えて頂いたマクロを有効にするコードを参考に以下を作りましたが動作しませんでした

やりたい作業は
フォルダ内のマクロ化されているブックを開く
通常のブックとして保存
閉じる
次のファイルを開いて同様の動作をフォルダ内のすべてのブックに適用
です

実行したところ
Set wb = Workbooks.Open(Fn)
のところが黄色く表示されてにエラーが出てしまいました、改善点を教えてください


Sub 非マクロ化テスト2()
Dim Fs, Fl, Fn, wb
Set Fs = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files
For Each Fl In Fs
Fn = ThisWorkbook.Path & "\" & Fl.Name
If Right(Fn, 5) = ".xlsm" Then
Set wb = Workbooks.Open(Fn)
Fn = Left(Fn, Len(Fn) - 5) & ".xlsx"
Application.DisplayAlerts = False
wb.SaveAs FileName:=Fn, FileFormat:=xlOpenXMLWorkbook
wb.Close
Application.DisplayAlerts = True
End If
Next
End Sub

以前フォルダ内の通常のブック(xlsx)をマクロ有効のブック(xlsm)にするマクロを組んだのですがそれを応用して今度は逆の作業をすることになり以前教えて頂いたマクロを有効にするコードを参考に以下を作りましたが動作しませんでした

やりたい作業は
フォルダ内のマクロ化されているブックを開く
通常のブックとして保存
閉じる
次のファイルを開いて同様の動作をフォルダ内のすべてのブックに適用
です

実行したところ
Set wb = Workbooks.Open(Fn)
のところが黄色く表示されてにエラーが出てしまい...続きを読む

Aベストアンサー

こんにちは。

私も、マクロ化のブックは作りましたが、逆は考えたことがありません。
(マクロ化は、VBEの中身を検索し、1行でも存在すれば、.xlsm にするということです。)

もしかしたら、
>CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files

Set wb = Workbooks.Open(Fn)
おそらくエラーの原因は、属性の問題あたりが原因かもしれません。それを、Normal ファイルであるか、調べる必要があるかと思います。

ちなみに、私も独自路線でかんがえてみました。
私は、以下のようにあらがじめ該当するブック名を取得し、配列変数の中に入れておくようにします。Dir は、途中で操作されるのを嫌います。

私のこだわりは、2点
変換後の同名ファイルの存在。
枝番付にします。
後は、パスワードの有無 (たぶん、バージョンによって反応の違いが出るかもしれません。こちらは、Excel 2013 です。)

'//

Sub DeMacroFileName()
 Dim myPath As String
 Dim myArray()
 Dim fName As String
 Dim i As Long
 Dim fn As Variant, nFn As String
 Dim cnt As Long
 Dim wb As Workbook
 ReDim myArray(1999)
 myPath = ThisWorkbook.Path & "\"
 On Error GoTo ErrHandler
 fName = Dir(myPath & "*.xlsm", vbNormal)
 Do While fName <> ""
  If (GetAttr(myPath & fName) And vbNormal) = vbNormal Then
   If fName <> ThisWorkbook.Name Then
    myArray(i) = fName
    i = i + 1
   End If
   DoEvents
   If i > 2000 Then Exit Do '2000ファイル以上は不可能
  End If
  fName = Dir
 Loop
 ReDim Preserve myArray(i - 1)
 
 Application.EnableEvents = False '開いた時にマクロが邪魔になる
 Application.ScreenUpdating = False
 Application.DisplayAlerts = False
 For i = 0 To UBound(myArray)
  fn = myArray(i)
  Set wb = Workbooks.Open(Filename:=myPath & fn, Password:="")
  If Not wb Is Nothing Then
   nFn = RenamingF(fn, myPath)
   wb.SaveAs nFn, xlOpenXMLWorkbook
   wb.Close False
   DoEvents
   cnt = cnt + 1
  End If
  Set wb = Nothing
nextFn:
 Next i
 Application.DisplayAlerts = True
 Application.EnableEvents = True
 Application.ScreenUpdating = True
 MsgBox cnt & "/" & UBound(myArray) + 1 & "が成功しました。", vbInformation
 Exit Sub
ErrHandler:
 MsgBox "ファイル名 : " & fn & vbCrLf & _
 Err.Number & ": " & Err.Description
 
 Debug.Print fn '失敗した時に記録を取る
 If Err.Number = 92 Then  '滅多に発生しません。
  MsgBox "中途で終了します。", vbExclamation
  Exit Sub
 Else
  Resume Next
 End If
End Sub
Private Function RenamingF(ByVal fName As String, mPath As String)
'同名ファイルの枝番付け
Dim SaveName As String
Dim j As Long
If Right(mPath, 1) <> "\" Then mPath = mPath & "\"
SaveName = mPath & Mid(fName, 1, InStrRev(fName, ".") - 1)
 Do While Dir(SaveName & ".xlsx") <> ""
  If InStrRev(SaveName, "_") > 0 Then
   SaveName = Mid$(SaveName, 1, InStrRev(SaveName, "_") - 1)
  End If
   j = j + 1
   SaveName = SaveName & "_" & CStr(j)
  Loop
RenamingF = SaveName
End Function

こんにちは。

私も、マクロ化のブックは作りましたが、逆は考えたことがありません。
(マクロ化は、VBEの中身を検索し、1行でも存在すれば、.xlsm にするということです。)

もしかしたら、
>CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files

Set wb = Workbooks.Open(Fn)
おそらくエラーの原因は、属性の問題あたりが原因かもしれません。それを、Normal ファイルであるか、調べる必要があるかと思います。

ちなみに、私も独自路線でかんがえてみました。
私は、以下のように...続きを読む

QVBSでAccessマクロ実行

VBSでAccessのマクロを実行するには、どうすればよいか教えてください。
どうか、お願いします。

Aベストアンサー

#1 です。
Access をオートメーションでコントロールするには、「何をどう書けば Access の各機能を操作できるのか」を覚える必要があります。
練習としては Excel を使うと良いでしょう。
Excel の VBEditor を開き、参照設定で「Microsoft Access xx Object Library」(xx はバージョン番号)を参照設定し、[F2] でオブジェクト ブラウザを開いて Access Application の下を見てみるとイロイロと出てくると思います。

とりあえず
Dim acApp As New Access.Application
acApp.OpenCurrentDatabase FilePath:="C:\hoge.mdb"
これで準備完了です。
あとはオブジェクト ブラウザを見たり、「acApp.」と書いたところで出てくるインテリセンスの一覧を見たりしてやってみてください。
というかたぶん・・・
たぶんですが、
acApp.DoCmd ~
だと思います・・・

なんでこんな回りくどい書き方をしてるのかって言うと、単純に今手元に Access がないからです(^_^;
でもこうすると学ぶべきものが多いですよ。

#1 です。
Access をオートメーションでコントロールするには、「何をどう書けば Access の各機能を操作できるのか」を覚える必要があります。
練習としては Excel を使うと良いでしょう。
Excel の VBEditor を開き、参照設定で「Microsoft Access xx Object Library」(xx はバージョン番号)を参照設定し、[F2] でオブジェクト ブラウザを開いて Access Application の下を見てみるとイロイロと出てくると思います。

とりあえず
Dim acApp As New Access.Application
acApp.OpenCurrentDatabase FilePath...続きを読む

QVBからエクセルマクロを実行したい

VB2008で
コマンドボタンを押すと
現在開いているエクセルファイル(test.xls)のマクロ1を実行させることは可能でしょうか?

できればコードを教えていただける助かるのですが、、、
よろしくお願いします。

Aベストアンサー

こんにちは、
試してみませんが。以下のページを応用すれば
出来るような気がしますが。

http://support.microsoft.com/kb/219905/ja


人気Q&Aランキング

おすすめ情報