ネットが遅くてイライラしてない!?

VBからExcelオブジェクトを起動させて帳票を印刷するPGを作成しています。
起動するExcelオブジェクトのVBAの関数に引数を渡したいのですが、
可能でしょうか?方法を知っている方がいらっしゃいましたらどうか教えて
下さい。よろしくお願い致します。
参考までに今私が書いたコードを表示しておきます。

' Excel オブジェクト生成
Set objExcel = New Excel.Application

' 作業期間日付の取得
sSdate = txtDate.Text '開始日
sEdate = CStr(DateAdd("d", 6, CDate(sSdate))) ' 終了日

' アイコンを砂時計にする
Screen.MousePointer = vbHourglass

'列が存在している場合は確認メッセージ
If MsgBox(sSdate & "~" & sEdate & "の期間を印刷してよろ
しいですか?", vbOKCancel, sTitle) = vbCancel Then
GoTo ExitFunc
End If

'***********
' 印刷処理
'***********
Call objExcel.Workbooks.Open(ファイルのパス)
Call objExcel.Run("Main")

このような感じです。変数sSdateとsEdateをMainに渡したいと考えています。

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

A 回答 (1件)

Call objExcel.Run("Main", sSdate, sEdate)



でいきません?
    • good
    • 0
この回答へのお礼

あ、できました。
どうもありがとうございました。

お礼日時:2002/09/25 15:51

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

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

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

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

QExcelマクロを引数付で起動

VB.NET2002を使用しています。

VBよりEXCELマクロを実行できるとこまでは出来たのですが、
excel.Application.Run("Module1!test")
VBで処理した値をExcelに渡すことはできないのでしょうか?

Run("マクロ名",引数1,引数2,・・・)のように宣言すれば良さそうなのですが、 型のエラーが出てしまいます。

VB上の吹き出しには「As Object」とあるのですが、実際には文字列(string)や数字(long)です。

そのままRun("test",moji,suuji)のようには無理でしょうか。

ちなみにExcelの受け側ですが、
test(byval moji as string,byval num as integer)
のようにすれば…と思っていたのですが。

ご存知の方がいらっしゃいましたら教えてください。
お願いいたします。

Aベストアンサー

こんにちは。

>excel.Application.Run("Module1!test")

excel.Application.Run("Book1.xls!test")
これは、直していただくとして、

Dim moji As String
Dim num As Int32 '型は違ってはいますが……

excel.Run("Book1.xls!test", moji, num)

で、特に問題ないと思いますが、逆なら、Excel側から型のエラーが出てしまうでしょうね。
たとえば、以下のように、Excel側の文字と数値の引数が、逆になっていると間違えますね。

Book1.xls!Test
Function test(ByVal moji As String, ByVal num As Integer)
 test = String$(num, moji)
End Function

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Q定数配列の書き方

VB6で定数を定義する場合は次の通りです。

  Const strTest As String = "TEST"

では、定数配列を定義する場合はどのように書けばいいのでしょう?

  Const astrTest() As String = Array("A", "B", "C")      '→NG
  Const astrTest(0 To 2) As String = Array("A", "B", "C")  '→NG

いろいろな書き方を試して見たのですが、上記のような書き方でも文法的にエラーになるようです。

どのように書けばいいのでしょうか?

それとも定数を配列で定義するのは無理なんでしょうか?

Aベストアンサー

残念ですが、VBでご希望のことをすることはできません。

QVBAでループ内で使う変数名を可変にできないか。

次のような処理で・・・、
 Cnt_1 = Cnt_1 + 1
 Cnt_2 = Cnt_2 + 1
   :
実際には一つの変数(Cnt_1など)ごとに処理がもっとあるのですが、
変数はCnt_1からCnt_5まであり、すべて同じ処理をするので、変数名を
可変にして同じループで書けないかと思うのですが、可能でしょうか?

たとえば、
For I=1 to 5
 Cnt_I = Cnt_I + 1
Next I
と書くと、「Cnt_I」という変数の処理になってしまいますね・・。

なにかいい方法はないでしょうか?

Aベストアンサー

こんばんは。

配列変数を使えばいいでしょう。
変数を5個用意して、すべて1~5まで足すという処理の場合です。
Dim Cnt(4) As Integer
Dim i As Integer
Dim j As Integer
For i = 0 To 4
For j = 1 To 5
Cnt(i) = Cnt(i) + j
Next j
Next i
どうでしょうか。

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Q【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く

Windows XP
Office2003

エクセルVBAにて、ネットワーク上にある共有フォルダ内のエクセルブックを開くコーディングを教えていただけますでしょうか?

開きたいブック:\\共有サーバー\共有\TEST.xls

よろしくお願いします。

Aベストアンサー

Workbooks.Open fileName:="\\共有サーバー\共有\TEST.xls"

http://www.bokuno.biz/program/vba/reference/Workbooks.html
http://officetanaka.net/excel/vba/file/file05.htm
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page1.htm

Q指定のWORKBOOKを前面表示する方法(エクセル:VBA)

いつもお世話になっております。
エクセルにて処理が終了した時点で、VBAを使い自動的にメールを送るマクロを組みました。しかし、ユーザーからのリクエストにより、自動送信する前にメール内容を確認したいとのことで、一度このメール内容でOKかどうか聞いてから、送信するように書き換えました。そのMsgBoxは当然エクセル上に現れるのですが、特にシングルディスプレイユーザーの場合、送信用のメールが前面に出てしまい、エクセル上に表示されたMsgBoxに気が付かない人もいますので、送信用メールが作成されたら、エクセルを前面に出してMsgBoxの指示に従わせたいのですが、どう書けばいいのか分かりません。とりあえず、私がトライしてみた文字ールは下記のとおりですが、エクセルは前面には出ません(ただし、エクセルプログラム全体が点滅?しますが)。
~前略~

With myMail
.To = "abc@xxxxx.com"
.Cc = "123@xxxxx.com"
.Subject = Filename '指定済みです
.Body = strBody '指定済みです
.display '.sendの代わりにいったんここで表示させました
End With

Windows("XYZ.xls").Activate 'このワークブックで作業をしてます。全面にはでてきません。

mymsg = MsgBox("このメール内容で送信してもよろしいですか?"~中略~,vbYesNo + vbQuestion, "送信確認")
If mymsg = 6 Then
myMail.send

~後略~

いつもお世話になっております。
エクセルにて処理が終了した時点で、VBAを使い自動的にメールを送るマクロを組みました。しかし、ユーザーからのリクエストにより、自動送信する前にメール内容を確認したいとのことで、一度このメール内容でOKかどうか聞いてから、送信するように書き換えました。そのMsgBoxは当然エクセル上に現れるのですが、特にシングルディスプレイユーザーの場合、送信用のメールが前面に出てしまい、エクセル上に表示されたMsgBoxに気が付かない人もいますので、送信用メールが作成された...続きを読む

Aベストアンサー

Windows("XYZ.xls").Activate
のところに
VBA.AppActivate Excel.Application.Caption
を追加してみてください。

QバッチファイルからVBAに引数を渡したい

お世話になります。

a.batというバッチファイルがあります。
このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。

EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。

どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。
環境 WindowsXP SP3 Excel2003

==============================
バッチファイル側
==============================
@echo off

echo バッチファイルを実行します。

ABC.xls "1303"

echo 終了しました。

==============================
EXCEL VBA側
==============================
Sub auto_open(a As String)

Msg a

end sub

お世話になります。

a.batというバッチファイルがあります。
このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。

EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。

どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。
環境 WindowsXP SP3 Excel2003

===...続きを読む

Aベストアンサー

Excel には起動時に渡せるオプションがありませんね。。
Batでは
Echo 1303 > d:\後で消す.txt
Explorer.exe d:\data\ABC.xls
rem ↑横着してます。"C:\・・・\excel.exe " "d:\data\ABC.xls" が王道です

Excelでは
Sub auto_open()
Dim ff As Integer
Dim buf As Variant
If Dir("d:\後で消す.txt") = "" Then
MsgBox "何もなし"
Exit Sub
Else
ff = FreeFile
Open "d:\後で消す.txt" For Input As ff
Input #ff, buf
MsgBox buf
Close ff
Kill "d:\後で消す.txt"
End If
End Sub

とか?
一時的に"d:\後で消す.txt"に書き込んで
Excelで読み込んだらKillで消してます。

1303 だけでなく任意の値なら
Echo %1 > d:\後で消す.txt
Explorer.exe d:\data\123\ABC.xls
というBatファイルを Test.bat 名で保存して
コマンドプロンプトから
・・・・\test.bat 999
などと・・・ですかね。

Excel には起動時に渡せるオプションがありませんね。。
Batでは
Echo 1303 > d:\後で消す.txt
Explorer.exe d:\data\ABC.xls
rem ↑横着してます。"C:\・・・\excel.exe " "d:\data\ABC.xls" が王道です

Excelでは
Sub auto_open()
Dim ff As Integer
Dim buf As Variant
If Dir("d:\後で消す.txt") = "" Then
MsgBox "何もなし"
Exit Sub
Else
ff = FreeFile
Open "d:\後で消す.txt" For Input As ff
Input #ff, buf
MsgBox buf
Close ff
Kill "d:\後で消す.txt"
End If
End Sub

とか?
一時的に"d:\後...続きを読む

QExcel VBA でファイルが開かれているか確認する

ExcelのVBAで、book1.xlsというファイルが現在開かれているか確認するにはどんなプロパティを使えばいいでしょうか?

実際にやりたい事は、book1.xlsに対して処理するマクロがあるのですが、そのbook1.xlsが開かれていなければ処理が出来ないのでマクロが入っているファイルを閉じる。というものです。

Aベストアンサー

Workbookは、Workbooksコレクションによって管理されているので、Worlbooksの中身を列挙することでチェック可能です。

Dim wb As WorkBook
Dim blnFlag As Boolean
For Each wb In Workbooks
  If wb.Name = "book1.xls" Then
    blnFlag = True
    Exit For
  End If
Next

もっと手っ取り早くですと、
Set wb = Workbooks("book1.xls")

これでエラーが発生したら開いていないと判断できます。

ただし、この処理を呼ぶ前にOn Error Resume Nextでエラートラップを無効にしておかないと処理が中断してしまいます。


人気Q&Aランキング