今だけ人気マンガ100円レンタル特集♪

こんばんは
以下の、プログラムでエクセルVBAからノーツメールを起動させることができメールは送れました。
その後、それぞれの変数にどんな値が格納されているのか確認したところ、
ノーツが起動しWknSesのなかみを確認したところ、Emptyと表示されておりました。
なぜ、そのなかにはいっている値など確認するこができないのでしょうか?
でも、ノーツが起動し動作しております。
CreateObject("Notes.NotesSession")は、wknsesになにを格納しているのでしょうか?

Set wkNSes = CreateObject("Notes.NotesSession")

たとえば、
'IE(InternetExplorer)のオブジェクトを作成する
 Set objIE = CreateObject("InternetExplorer.Application")
だどすると Objieという変数をウオッチリストで確認するとpathの情報などがはいっていることを確認できました。

以上 よろしくおねがいたします。

-------------------

Const EMBED_ATTACHMENT As Integer = 1454

Public Sub SendNotesMail()
Dim wkNSes As Object ' lotus.NOTESSESSION
Dim wkNDB As Object ' lotus.NOTESDATABASE
Dim wkNDoc As Object ' lotus.NOTESDOCUMENT
Dim wkNRtItem As Object ' lotus.NOTESRICHTEXTITEM
Dim wkNAtt As Object ' lotus.NOTESEMBEDDEDOBJECT
Dim AttFName As String ' 添付ファイル名(フルパス)

' Notesのセッションを起動する
Set wkNSes = CreateObject("Notes.NotesSession")
' NotesDatabaseオブジェクトを作成し、そのデータベースを開く
Set wkNDB = wkNSes.GETDATABASE("", "")
' NotesDBをユーザーのメールDBに割り当てた後に開く
wkNDB.OpenMail

' NotesDBに文書を作成し、新規文書をオブジェクト変数にセットする
Set wkNDoc = wkNDB.CREATEDOCUMENT()
' 件名をセットする
wkNDoc.Subject = "テスト(タイトル)"
' 宛先をセットする
wkNDoc.SendTo = Array("belie.kondo@mbh.nifty.com")
'wkNDoc.CopyTo = Array("xxx@xxx")
'wkNDoc.blindCopyTo = Array("xxx@xxx")

' 文書にリッチテキストアイテムを作成する
Set wkNRtItem = wkNDoc.CreateRichTextItem("BODY")
' 本文をセットする
With wkNRtItem
.APPENDTEXT "本文(1行目)"
.ADDNEWLINE 1
.APPENDTEXT "本文(2行目)"
.ADDNEWLINE 2
' 添付ファイル名をセットする
AttFName = "D:\TEST\Book1.xls"
' ファイルを添付する
Set wkNAtt = .EmbedObject(EMBED_ATTACHMENT ,"" ,AttFName)
.ADDTAB 1
.ADDNEWLINE 1
End With

' メールを送信する
wkNDoc.Send False

' オブジェクト変数を解放する
Set wkNAtt = Nothing
Set wkNRtItem = Nothing
Set wkNDoc = Nothing
Set wkNDB = Nothing
Set wkNSes = Nothing

MsgBox "メール発信", vbOKOnly + vbInformation
End Sub

質問者からの補足コメント

  • うーん・・・

    早速のご回答ありがとうございます。
    具体的にどういうことでしょうか?
    実際にそこにはいっている値をみることはできないのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/01/26 22:52
  • こんばんは。
    値 変数なし 型 Objectとなっておりました。
    EMPTYではありませんでした。
    すみません。

    「VBAからノーツを起動」の補足画像2
    No.2の回答に寄せられた補足コメントです。 補足日時:2017/01/27 23:18

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

A 回答 (2件)

あれ?


ウォッチリスト使えるんですよね?
見たいオブジェクトのプロパティやメソッド見れませんか?
ツリー状態でズラーッと出てくるでしょ?
この回答への補足あり
    • good
    • 0

そのプログラムのメモリ空間への参照が入っている認識ですね。

この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QエクセルVBAからNotesでメール送信

一度、知恵袋で質問しましたが、回答に対して聞くことができないので、こちらで質問させて頂きます。

VBAでNotesからメールを送信する際、宛先に複数のアドレスを配列変数で指定すると、
2人目以降にメールが送信されません。

コードの内容はエクセルシートにあるアドレスリストのA列を順に配列にし、
重複しているアドレスを省いて配列変数(adrsarray)を作成し
配列変数に入っている複数の宛先へ、Notesからメールを送信するというものです。

以下、抜粋ですがコードを記します。

Const EMBED_ATTACHMENT As Integer = 1454
Dim nss As Object ' lotus.NOTESSESSION
Dim ndb As Object ' lotus.NOTESDATABASE
Dim ndoc As Object ' lotus.NOTESDOCUMENT
Dim rtitem As Object ' lotus.NOTESRICHTEXTITEM
Dim nemb As Object ' lotus.NOTESEMBEDDEDOBJECT
Dim fname As String
Dim r, lastr, i As Long
Dim tmp
Dim adrsarray, myarray, mydic, myitm, adrs As Variant


'A列のアドレスを配列変数adrsarrayに代入

For r = 2 To lastr
If Cells(r, 1) <> "" Then
If r = 2 Then
adrsarray = Cells(r, 1)
End If

If r > 2 Then
adrsarray = adrsarray & "," & Cells(r, 1)
End If

End If
Next

Set Dic = CreateObject("Scripting.Dictionary")

myarray = Split(adrsarray, ",")
For i = 0 To UBound(myarray)
If Not Dic.Exists(myarray(i)) Then
Dic.Add myarray(i), myarray(i)
End If
Next i

'(1)データの重複した配列を初期化し(2)で再度重複無しの配列を格納
adrsarray = ""

'(2)重複を除いて配列を作成
myitm = Dic.keys
For i = 0 To UBound(myitm)
If adrsarray = "" Then
adrsarray = myitm(i)
Else
adrsarray = adrsarray & "," & myitm(i)
End If
Next

Set Dic = Nothing


Set nss = CreateObject("Notes.NotesSession")
Set ndb = nss.GETDATABASE("", "")
ndb.OpenMail
Set ndoc = ndb.CREATEDOCUMENT()
ndoc.Subject = "データを送ります。"
ndoc.SendTo =Array(adrsarray)

ここで以下のように複数名のアドレスを指定すると
ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
一斉送信できることがわかったのですが、
宛先は固定ではない為、Array(adrsarray)のように
取得した複数アドレスを入れたいのですが
私の作成したコードではうまく動作しません。

長々と申し訳ないですが
ndoc.SendTo =array(adrsarray) で送信するにはどうすればよろしいでしょうか。
ご教授よろしく御願い申し上げます。

一度、知恵袋で質問しましたが、回答に対して聞くことができないので、こちらで質問させて頂きます。

VBAでNotesからメールを送信する際、宛先に複数のアドレスを配列変数で指定すると、
2人目以降にメールが送信されません。

コードの内容はエクセルシートにあるアドレスリストのA列を順に配列にし、
重複しているアドレスを省いて配列変数(adrsarray)を作成し
配列変数に入っている複数の宛先へ、Notesからメールを送信するというものです。

以下、抜粋ですがコードを記します。

Const EMBED_ATTACHMENT ...続きを読む

Aベストアンサー

Notes の事はさっぱりわかりませんが、

> ここで以下のように複数名のアドレスを指定すると
> ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
> 一斉送信できることがわかったのですが、

という事なので、

> ndoc.SendTo =Array(adrsarray)

ndoc.SendTo = myitm

にすると、どうなりますか。
(myitm 自体は、重複の無いアドレスの配列になっているようですが)



余計なお世話で、気になった箇所を何点か

> Dim r, lastr, i As Long

Long は i だけで、r, lastr は Variant だったと思います。

コード部分は抜粋で、途中提示されていない処理をされているのかもしれませんが
ひと塊の処理と考えた時、以下のような書き方(雰囲気)もあるのかも(【未検証】)
(ndoc.SendTo = myitm で動いたっていう前提があってのものになりますが)

' ・・・・・
' ・・・・・
  Dim Dic As Object
  Dim ndoc As Object
  Dim r As Long, lastr As Long
  Dim adrsarray As Variant
'  Dim adrsstring As String

' ・・・・・
' ・・・・・
  
  Set Dic = CreateObject("Scripting.Dictionary")

  For r = 2 To lastr
    If (Cells(r, 1).Value <> "") Then
      Dic.Item(Cells(r, 1).Value) = Null
    End If
  Next

  If (Dic.Count = 0) Then
    ' アドレスがなかった場合 Exit ? する
    ' ・・・なら、後始末を忘れずに
  End If

  adrsarray = Dic.keys
  Set Dic = Nothing

'  adrsstring = Join(adrsarray, ",") ' カンマ(,)区切りで1つの文字列に
' ・・・・・
' ・・・・・
  ndoc.SendTo = adrsarray
' ・・・・・


Dic.Item(キー) = 値
では、
キーが登録済みなら値を設定
キーが登録されていなかったら、キーを登録してから値を設定
だったと思います。
今回、値は不要と思うので、Null にしてみました

※ Exists & Add との性能比較・・・・は、わかりません

Notes の事はさっぱりわかりませんが、

> ここで以下のように複数名のアドレスを指定すると
> ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
> 一斉送信できることがわかったのですが、

という事なので、

> ndoc.SendTo =Array(adrsarray)

ndoc.SendTo = myitm

にすると、どうなりますか。
(myitm 自体は、重複の無いアドレスの配列になっているようですが)



余計なお世話で、気になった箇所を何点か

> Dim r, lastr, i As Long

Long は i だけで、r, lastr は Variant だったと思いま...続きを読む

QLotusScript メール作成方法が解りません

lotus script言語で、メールを作成し送信する方法は解るのですが、
送信せず、作成したメールの内容で、メーラーの新規メール作成画面を立ち上げる方法がわかりません。

スクリプト(抜粋)
Set maildoc = db.CreateDocument 'maildoc
Call maildoc.ReplaceItemValue("Form","Memo")
Call maildoc.ReplaceItemValue("SendTo",uidoc.FieldGetText("mail"))
maildoc.CopyTo = uidoc.FieldGetText("itsupport")
Call maildoc.ReplaceItemValue("Subject","テスト")
Set mailritem = New NotesRichTextItem(maildoc,"Body") 'mailritemをBodyとして定義
Call mailritem.AppendText("【テスト】")
Call mailritem.AddNewline(2)
Call mailritem.AppendText("テスト")
Call mailritem.AppendDocLink(uidoc.Document,"")

Call maildoc.Send(False) 'メールを送信する

こんな感じで、普通にメール作成して最後に送信してます。
ここで、最後に送信はせず、このメール内容で新規メール作成画面を立ち上げたいです。

これはボタン内で作成しており、他にも機能をつけてるので、@関数で全体を書き直すことができません。 この新規メール作成の部分だけ@関数使う形なら問題ないのですが、

方法を教えていただけますでしょうか。

lotus script言語で、メールを作成し送信する方法は解るのですが、
送信せず、作成したメールの内容で、メーラーの新規メール作成画面を立ち上げる方法がわかりません。

スクリプト(抜粋)
Set maildoc = db.CreateDocument 'maildoc
Call maildoc.ReplaceItemValue("Form","Memo")
Call maildoc.ReplaceItemValue("SendTo",uidoc.FieldGetText("mail"))
maildoc.CopyTo = uidoc.FieldGetText("itsupport")
Call maildoc.ReplaceItemValue("Subject","テスト")
Set mailritem = New NotesRichTextItem(m...続きを読む

Aベストアンサー

仕様がいまいちわからないのでなんとも言えませんが
多分こんなことがしたいんだろうなぁというソースを書いておきます。

Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim maildb As New NotesDatabase("","")
Call maildb.OpenMail
Set uidoc=ws.CurrentDocument

Set doc = maildb.CreateDocument
Call doc.ReplaceItemValue("Form","Memo")
Call doc.ReplaceItemValue("Subject","テスト")

Set rtitem = New NotesRichTextItem(doc,"Body")
Call rtitem.AppendText("【テスト】")
Call rtitem.AddNewline(2)
Call rtitem.AppendText("テスト")
Call rtitem.AppendDocLink(uidoc.document,"")
Call doc.Save( False, False)
Call ws.EditDocument(True,doc)

ローカルでメールファイルの設定とかきちんとしてあれば
ご自身のメールボックスが開きます
(一部未提示の仕様SendToの指定とか・・・は実装していません)

仕様がいまいちわからないのでなんとも言えませんが
多分こんなことがしたいんだろうなぁというソースを書いておきます。

Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim maildb As New NotesDatabase("","")
Call maildb.OpenMail
Set uidoc=ws.CurrentDocument

Set doc = maildb.CreateDocument
Call doc.ReplaceItemValue("Form","Memo")
Call doc.ReplaceItemValue...続きを読む

QノーツのデータをVBScriptで取得したい

ノーツのデータをVBScriptで取得しようとしております。
そのために, 次のスクリプトを書きました。

Set objNotes = CreateObject("Notes.Notessession")
databaseName = "xxxxxxx.nsf"
Set objDB = objNotes.GetDatabase("",databaseName)
universalID = "ffdecaef1b87c101c925656e000c02dc"
Set objDoc = objDB.GetDocumentByUNID(universalID)
If objDoc.HasItem("Subject") Then WScript.Stdout.Write("Yes"&vbCrLf)
itemValueList = objDoc.GetItemValue("Subject")
WScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
WScript.Stdout.Write(itemValueList(0)&vbCrLf)
Set objDoc = Nothing
Set objDB = Nothing
Set objNotes = Nothing

結果は
Yes
String()
C:\temp\notesvalue.vbs(9,1) Microsoft VBScript 実行時エラー: 型が一致しません。: 'itemValueList'

とGetItemValueの値を取得することができません。

上の例では, Subjectというアイテムを取得することにしていますが,
その他のItemでもだめでした。

ノーツのバージョンは4.6a
OSはWindows 2000 Professional
でございます。

識者の方, どうすればGetItemValueから有効な値を取得できるかお教えください。
よろしくお願いいたします。

ノーツのデータをVBScriptで取得しようとしております。
そのために, 次のスクリプトを書きました。

Set objNotes = CreateObject("Notes.Notessession")
databaseName = "xxxxxxx.nsf"
Set objDB = objNotes.GetDatabase("",databaseName)
universalID = "ffdecaef1b87c101c925656e000c02dc"
Set objDoc = objDB.GetDocumentByUNID(universalID)
If objDoc.HasItem("Subject") Then WScript.Stdout.Write("Yes"&vbCrLf)
itemValueList = objDoc.GetItemValue("Subject")
WScript.Stdout.Write(TypeNam...続きを読む

Aベストアンサー

メッセージをそのまま受け取ると,

itemValueListが配列ではないにもかかわらず,
配列として扱っている(itemValueList(0)の部分)

からではないかと思われます。

単なる勘なんですけど,LotusScriptにおいて,
NotesDocumentクラスのGetItemValueの戻り値は
確かにString型の配列ですが,VBScriptで
暗黙的に型変換(文字列とか)されているのでは。

試しに7行目itemValueList = objDoc.GetItemValue("Subject")
の後に,Msgbox(IsArray(itemValueList))で確認して
みて下さい。(配列であればTrueが返るはずです)

またMsgbox(itemValueList)などとして,中身をが改行や
コロンで区切られた文字列リストであれば,Splitで配列を
作成してやればよいかもしれません。

っつーか,Subjectのアイテム数が1つだけ(配列ではない)
ことが確実であれば,そのまま
WScript.Stdout.Write(itemValueList&vbCrLf)とか
できないんでしたっけ?
↑Stdout.Write使った事ないんで,かなりテキトーです。
参考までにWScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
が何を標準出力に送信してるか教えて頂けると嬉しいです。

メッセージをそのまま受け取ると,

itemValueListが配列ではないにもかかわらず,
配列として扱っている(itemValueList(0)の部分)

からではないかと思われます。

単なる勘なんですけど,LotusScriptにおいて,
NotesDocumentクラスのGetItemValueの戻り値は
確かにString型の配列ですが,VBScriptで
暗黙的に型変換(文字列とか)されているのでは。

試しに7行目itemValueList = objDoc.GetItemValue("Subject")
の後に,Msgbox(IsArray(itemValueList))で確認して
みて下さい。(配列であれ...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELの表をNotesメール本文に貼り付けたい

過去の質問で、同じようなものがあったのでその通りにしてみたのですが、うまくいきません。
excel2003作成の表の一部をメールの本文に表がずれないように貼りつけたいのです。
解決策として、
1.[ファイル] メニューの [送信] をポイントし、[メールの宛先] をクリックします。

2.ブック全体または現在のシートのどちらを送信するかを確認するメッセージが表示されたら、[メッセージ本文として現在のシートだけを送信] をクリックします。

と説明があるのですが、2の選択ができません。
1の時点で、、[メールの宛先(校閲用)]か、、[メールの宛先(添付ファイル)]を選択させられます。

Lotus Notes6.5を使用しています。

どうぞ宜しくお願いします。

Aベストアンサー

シート=表計算ソフトのエクセルで使う縦の「列」、横の「行」という形でマス目の入った計算表が「シート」。表計算ソフト一般では「ワークシート」と呼ばれることが多い。あるいは表計算、一覧表という意味から「テーブル」ということもある。また複数のシートを1つのファイルとしてまとめたものが「ブック」。ファイル=File。

QVBA エクセル メール送信 ハイパーリンクの貼り方

お世話になります。
首題の通り、エクセルに記述したマクロを使いメールを送りたいのですが、その際に文章の記述にハイパーリンクを張りたいのです。
例えば下記のモジュールですと、文章のBODYの部分には「OKWAVE」とだけ表示されますが、これをクリックすると[http://okwave.jp/]が開くようにしたいのですが、どのように記述すればよろしいのでしょうか?よろしくご指南くださいませ。

Sub test()
Dim strBody As String

Filename = "ハイパーリンクの貼り方???"
strBody = "OKWAVE"

Set myOL = CreateObject("Outlook.Application")
Set myMAIL = myOL.CreateItem(0)
With myMAIL
.to = "123@123.GOM"
.Subject = Filename
.body = strBody
.display
'.send
End With
Set myMAIL = Nothing
Set myOL = Nothing
End Sub

お世話になります。
首題の通り、エクセルに記述したマクロを使いメールを送りたいのですが、その際に文章の記述にハイパーリンクを張りたいのです。
例えば下記のモジュールですと、文章のBODYの部分には「OKWAVE」とだけ表示されますが、これをクリックすると[http://okwave.jp/]が開くようにしたいのですが、どのように記述すればよろしいのでしょうか?よろしくご指南くださいませ。

Sub test()
Dim strBody As String

Filename = "ハイパーリンクの貼り方???"
strBody = "OKWAV...続きを読む

Aベストアンサー

こんにちは。

返事が遅くなりしまた。

(1)
a) Msg = "<A HREF=;http://google.co.jp/><b>goole検索</b></A>"

b) Msg = "<A HREF=""http://google.co.jp/""><b>goole検索</b></A>"
は何が違うんでしょうか?

VBAで書く場合は、b)側が正しいです。理由は、VBAでは、素のコードの場合は、String型の変数の中に代入されるので、コードの中では、一個の「"」はエラーが出ると思います。うまく書けているか、Debug.Print でチェックしてみると良いです。リンク先では、b)で書かれていると思います。

(2)は、私は、CSS 自体はインラインで埋め込めば可能だと思います。しかし、フォームまでは書いたことがありませんが、可能・不可能なら、こちらも可能だと思います。ただし、相手側のメールで、セキュリティが働いたら、意味がありません。メールのマナーとしては、あまり良くないようですから、どこかのウェブサイトに飛ばせて、そこが使うようにしたらいかがですか?

HTMLメールの制作時に気をつけたい9つのポイント
http://coliss.com/articles/build-websites/operation/work/879.html

こんにちは。

返事が遅くなりしまた。

(1)
a) Msg = "<A HREF=;http://google.co.jp/><b>goole検索</b></A>"

b) Msg = "<A HREF=""http://google.co.jp/""><b>goole検索</b></A>"
は何が違うんでしょうか?

VBAで書く場合は、b)側が正しいです。理由は、VBAでは、素のコードの場合は、String型の変数の中に代入されるので、コードの中では、一個の「"」はエラーが出ると思います。うまく書けているか、Debug.Print でチェックしてみると良いです。リンク先では、b)で書かれていると思います。

...続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QVBAで既に開いている別アプリケーションのオブジェクトを得る

 VBAで別のアプリケーションにアクセスするには、CreateObject関数を使ってアプリケーションのオブジェクトを作るようにすると思います。例えば、ワード文書にアクセスするなら次の構文になると思います。
  Set appWord = CreateObject("Word.Application")
  appWord.Visible = True
 しかしこれだと新しいワード文書を作ったり、既存のワードファイルを開いて扱うことしかできません。GetObject関数を用いても同様のようです。既に別ウィンドウで開いているワード文書があって、そこへアクセスするにはどうしたらよいのでしょうか。
 また、同じアプリで複数のファイルを開いている場合には、どうやって目的のファイルへのオブジェクトを得るのでしょうか。(ファイル名などを参照して判断?)

Aベストアンサー

Internet Explorerで開いているWindowを取得することはできますよ。

そのためには、まず開いているWindowを順番に取得し、それがInternet Explorerならばそれをオブジェクトに代入し、ひとつもIEウィンドウが存在しない場合は新規作成(CreateObject)すればいいのです。
Windowを取得するにはShell.Applicationというのを使います。

Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Dim WinExist As Boolean

WinExist = False
Set ObjShell = CreateObject("Shell.Application")
For Each ObjWindow In ObjShell.Windows
If TypeName(ObjWindow.Document) = "HTMLDocument" Then
 WinExist = True
 Set ObjIE = ObjWindow
End If
Next
Set ObjShell = Nothing

If Not WinExist = True Then
Set ObjIE = CreateObject("InternetExplorer.Application")
End If

ObjIE.Navigate "http://nantokakantoka.html"
ObjIE.Visible = True


というような感じです。
Wordの場合はわからなくてすみません。
独学なのでもっといい方法があるかもしれないですが。

Internet Explorerで開いているWindowを取得することはできますよ。

そのためには、まず開いているWindowを順番に取得し、それがInternet Explorerならばそれをオブジェクトに代入し、ひとつもIEウィンドウが存在しない場合は新規作成(CreateObject)すればいいのです。
Windowを取得するにはShell.Applicationというのを使います。

Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Dim WinExist As Boolean

WinExist = False
Set ObjShell = CreateObject("Shell.Applicatio...続きを読む

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
'-------------------------------------
 
 

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング