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

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

A 回答 (3件)

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の場合はわからなくてすみません。
独学なのでもっといい方法があるかもしれないですが。
    • good
    • 0
この回答へのお礼

うまくいきました。ありがとうございます。
InternetExplorerのウィンドウ内に接続していくのは大変ですね。No.2のでご紹介いただいたURLなどもみながら勉強しています。ページ内のFrame、Table、Formなどにたどり着いていくのが大変だということがよく分かりました。

お礼日時:2005/04/09 11:06

>インターネットエクスプローラーに接続



私はオブジェクト使いではありませんので、ネットを探してみました。

下記リンクの
[No.156 TypeNameとShell.Applicationを使い起動済みのIEを探す]
が役に立つかも知れません。

参考URL:http://www.ken3.org/cgi-bin/group/vba_ie.asp
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご紹介いただいたURLは確かに勉強になります。ネットを検索するにもテクニックが必要なのですね。自分ではなかなか探せませんでした。

お礼日時:2005/04/09 11:03

Set appWord = GetObject(, "Word.Application")


MsgBox appWord.Documents.Count

この回答への補足

 ありがとうございます。GetObject関数の引数をよく理解していなかったようです。ExcelからWord、AccessからExcelなどはうまく接続することができました。

 ただ、インターネットエクスプローラーに接続しようとすると、うまくいきません。
  Set appInet = GetObject(,"InternetExploere.Application")
で実行すると、「実行時エラー429、ActiveXコンポーネントはオブジェクトを作成できません。」のエラーが出てしまいます。Officeアプリと違うのでしょうか。

補足日時:2005/04/06 16:30
    • good
    • 0

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

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

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

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

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

QVBAで、アクティブなBOOKのファイル名を取得し

エクセルのVBAを使用して、選択されている、BOOKのファイル名を取得し、下記のように編集してA1セルに入れたいのですが、可能でしょうか?


BOOKのファイル名が「大阪_たこ焼き_1234.xls」の場合

大阪_と.xlsをは省いて、「たこ焼き_1234」がA1セルに入るようにしたい。

Aベストアンサー

拡張子なんでもござれ!
Sub TheBody()
Const xSeparator = "_"
Const xPeriod = "."
Dim KitCut As Variant
KitCut = Split(ActiveWorkbook.Name, xPeriod)
KitCut = Split(KitCut(0), xSeparator)
Range("A1").Value = KitCut(1) & xSeparator & KitCut(2)
Columns("A").AutoFit
End Sub

Qエクセルからワードの文書を開いて、その後開いた文書を”閲覧レイアウト”で表示したい

エクセルのマクロの超初心者です。
今、こんな事をしたくていろいろ調べながら遣っていますが、上手くいきません。どなたか方法を教えて下さい。
ド素人ですので出来るだけ簡単な方法がありがたいです。

1.エクセルシート上の”釦”を押すと指定したワードの文書を開く。

2.開いたワード文書は”閲覧レイアウト”に自動的に変更して表示。

今、エクセルから、ワードの文書は開けるようになりましたが、
次のワード側で表示を自動的に”閲覧レイアウト”に変更出来ません。
ワード側(または、エクセル側)でマクロをどんな風に記述すれば良い
のか、ご教授を宜しくお願いします。

Aベストアンサー

Wordにもマクロ記録がありますからそれが参考になるはずです。
それとWordVBAの[ReadingLayout プロパティ]のヘルプを確認してください。
>今、エクセルから、ワードの文書は開けるようになりました...
どういうコードか不明ですが、簡易なサンプルで
With GetObject("C:\temp\test.doc")
  .Application.Visible = True
  .ActiveWindow.View.ReadingLayout = True
End With

QExcelVBA:自己のBook名を取得したい

WindowsXP-Proです。
Excelヴァージョンは2003です。

ExcelVBAでコーディングしています。
で、自分自身(つまり、このVBAコードを記述しているExcel本体)のBook名を取得したいのですが、何か関数は用意されていますでしょうか?

自分自身のBook名を取得したい理由は、VBAコードを記述しているExcel本体のファイル名(Book名)の名前が変更されても、VBAが正常に機能するように、今現在のBook名を取得したいのです。

複数のExcelファイルを、このVBAで操作しているため、
Workbooks("本体のBook名").Activate
を用いており、仮にファイル名(本体のBook名)の名前が変更されても、VBAが正常に機能できるように、"本体のBook名"部分を固定ではなく、可変で持てるようにしたいからです。

Aベストアンサー

Public Sub Auto_Open()
  MsgBox ActiveWorkbook.Name
  MsgBox ThisWorkbook.Name
End Sub

Private Sub Workbook_Open()
  MsgBox Me.Name
End Sub

いずれも、ブック名が表示されました。

QCreateObjectでファイルを開く

お世話になります。

下記のVBAで作成した「oApp」をその後の処理で使用しています。

---------------------------------------------------------
Set oApp = CreateObject("Excel.Application")
oApp.Workbooks.Open FileName:=CurrentProject.Path & "\メイン.xls"
---------------------------------------------------------
現在は、閉じたメイン.xlsを開いて「oApp」を取得しているのですが、
わざわざメイン.xlsを閉じるのではなく、開かれたままメイン.xlsをoAppとして
処理したいのです。

どのよにすれば、すでに開かれているメイン.xlsをoAppに
割り当てることができるでしょうか?

なにとぞよろしくお願いします。

Aベストアンサー

No1の補足です。

Sub Sample2()

Dim oApp As Workbook

Set oApp = Workbooks("Book1.xls")

oApp.Sheets("Sheet3").Range("A1").Value = "AAA"

End Sub

こちらでもよろしいのではないでしょうか。

Q他のワークシート名の取得方法 (VBAを使用せずに)

VBAを用いずに、ワークシート関数のみでワークシート名を取得できないか探しています。

自分のシート名は、以下の出力結果の一部より取得することができました。
=CELL("filename")

しかし、他のシート名を取得する方法が思いもつきません。

VBAを用いずにシート名を取得することはできないのでしょうか?

Aベストアンサー

Excel2000でしたら、
1.[挿入]-[名前]-[定義] から、名前を2つ定義します。
  ・名前:PPP  参照範囲:=GET.WORKBOOK(1)
  ・名前:QQQ  参照範囲:=GET.DOCUMENT(88)
2.A1 に =SUBSTITUTE(INDEX(PPP,ROW()),"["&QQQ&"]","") と入力します。
3.A1 を下方にドラッグコピーすると、シート名が一覧で表示されます。

例えば3枚目のシート名のみを取得する場合は、任意のセルに
=SUBSTITUTE(INDEX(PPP,3),"["&QQQ&"]","") と入力します。

※マクロ関数というものですが、最近のバージョンにこれが付帯されているのかどうか
  わかりませんが。   ^_^;

Q【HTML、VBScript】HTAアプリケーションにて別ウインドウで開きたい

お世話になります

親ウインドのHTAアプリケーション内にボタンを設置し、そのボタンを押すと”新たにHTAファイルを作成し”別ウインドとして生成したHTAアプリケーション画面を表示するようにしたいのです。(表示後は生成したHTAアプリケーションは削除する)
これ自体は、実現できたのですが、いくつか疑問点がありましたので、教えていただきたいです。

長くなるので、先に質問だけ記載します。1つでも良いので教えていただけると嬉しいです。

コード①の質問、終了していない文字列型の定数と表示されるのはなぜか?
コード②の質問、scriptの文字列が入らないように分割して変数に入れるとエラーが出ないのはなぜか?
コード③の質問、タグを記載したsample2.htaを生成し、runメソッドで起動したが、runメソッドの後にdeletefileメソッドを行なうと、inputタグを記載したにもかかわらず、テキストボックスが表示されないのはなぜか?
コード④の質問、sample2.htaを削除する手順を別プロシージャに分けたが、Callメソッドではテキストボックスが生成されず、SetTimeOutメソッドでは生成されるのは何故か?
(※④のコードで1秒後にdelfileプロシージャが呼び出されるわけではないのはわかっていますので、SetTimeOutメソッドの誤用は指摘しないで頂きたいです。)


以下、ボタンを押しonclickイベントで呼び出されるプロシージャのみ記載します。

①最初に書いたコード、「終了していない文字列型の定数」エラーが出るのは何故?
sub sample
set fso = CreateObject("Scripting.FileSystemObject")
set sh = CreateObject("Wscript.Shell")
set Mhta = fso.opentextfile("C:\sample2.hta",2,true)

Mhta.Writeline "<body><script type=""text/vbscript""></script><input type=""text""></body>"
Mhta.close
sh.run "mshta.exe C:\sample2.hta"
End sub

②Writelineの内容を試行錯誤した結果、scriptと記載が入っているとNGなようなので、scriptという文字列が入らないように変数に分割して結合。エラーが出ないので上の理論は合ってる?

sub sample
set fso = CreateObject("Scripting.FileSystemObject")
set sh = CreateObject("Wscript.Shell")
set Mhta = fso.opentextfile("C:\sample2.hta",2,true)

a = "<body><scrip"
b = "t type=""text/vbscrip"
c = "t""></scrip"
d = "t><input type=""text""></body>"
Mhta.Writeline a&b&c&d
Mhta.close
sh.run "mshta.exe C:\sample2.hta"
end sub

③ボタンクリックにてsample2.htaを表示後、生成したsample2.htaファイルを削除したいので、 end subの1行前に以下のコードを追記、何故かsample2.htaにテキストボックスが表示されない

fso.deletefile "C:\sample2.hta"

④起動前にファイルが削除されてしまっているのかと思い、削除を別プロシージャに分けたところ、callメソッドではテキストボックスが生成されないが、SetTimeOutでは生成されるのはなぜか

fso.deletefile "C:\sample2.hta"  の代わりに、delfileプロシージャを呼び出す2例

(ⅰ) Callメソッドを用いた場合(sample2.htaウインドにはテキストボックスは表示されない)
Call delfile
end sub

sub delfile
set fso = CreateObject("Scripting.FileSystemObject")
fso.deletefile "C:\sample2.hta"
set fso = nothing
end sub

(ⅱ)setTimeOutを用いた場合(sample2.htaウインドにはテキストボックスが表示される)
setTimeOut "delfile",1000
end sub

sub delfile
set fso = CreateObject("Scripting.FileSystemObject")
fso.deletefile "C:\sample2.hta"
set fso = nothing
end sub

以上です、よろしくお願いします。

お世話になります

親ウインドのHTAアプリケーション内にボタンを設置し、そのボタンを押すと”新たにHTAファイルを作成し”別ウインドとして生成したHTAアプリケーション画面を表示するようにしたいのです。(表示後は生成したHTAアプリケーションは削除する)
これ自体は、実現できたのですが、いくつか疑問点がありましたので、教えていただきたいです。

長くなるので、先に質問だけ記載します。1つでも良いので教えていただけると嬉しいです。

コード①の質問、終了していない文字列型の定数と表示さ...続きを読む

Aベストアンサー

①②について、
</script>という文字があるとダメみたいですね。たぶんsample1.htaの冒頭の<script ~>に対応する閉じタグと誤認識されるではないかと。
スクリプトを書くエリアの部分を以下にしたらOKでした。
-------------------
<html>
<head>
<script language="vbscript"> ' ここは元のままでも良いかも
<!-- ' htmlのコメント開始の記号を追加する

 ここにvbscriptを書く

--> ' htmlのコメント終了の記号を追加する
</script>
</head>
<body>
以下略
-----------------------------



③④について
sh.runの第三引数をtrueにすると起動したプログラム(mshta.exe)が終了するまで、スクリプトの実行が停止するので、その直後でファイル削除してもイケます。
詳細はMSDNを参照してくだい(https://msdn.microsoft.com/ja-jp/library/cc364421.aspx)

-----------------------------
sh.run "mshta.exe C:\sample2.hta", 1, true
fso.deletefile "C:\sample2.hta"
-----------------------------

①②について、
</script>という文字があるとダメみたいですね。たぶんsample1.htaの冒頭の<script ~>に対応する閉じタグと誤認識されるではないかと。
スクリプトを書くエリアの部分を以下にしたらOKでした。
-------------------
<html>
<head>
<script language="vbscript"> ' ここは元のままでも良いかも
<!-- ' htmlのコメント開始の記号を追加する

 ここにvbscriptを書く

--> ' htmlのコメント終了の記号を追加する
</script>
</head>
<body>
以下略
-----------------------------



③④について
sh.run...続きを読む

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

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

Aベストアンサー

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

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

QVB6.0 CreateObject以外のファイルI/O

以前CreateObject("Scripting.FileSystemObject")を使用してファイルを読込む方法、一行ずつ書込む方法を教えていただいたのですが。
環境によってはウイルスチェックに引っかかってしまうようで、別な手段を取らなければならなくなりました。
読込み:
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTxtSt = objFso.OpenTextFile(strFilePass, 1)
strData = CStr(objTxtSt.ReadAll())
書込み:
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTxtSt = objFso.OpenTextFile(strFilePass, 2, False)
Call objTxtSt.WriteLine(strData)
現在の処理は以上です。
上記と同じ処理をCreateObjectを使用せずに作成するにはどのようにすればよろしいでしょうか。

以前CreateObject("Scripting.FileSystemObject")を使用してファイルを読込む方法、一行ずつ書込む方法を教えていただいたのですが。
環境によってはウイルスチェックに引っかかってしまうようで、別な手段を取らなければならなくなりました。
読込み:
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTxtSt = objFso.OpenTextFile(strFilePass, 1)
strData = CStr(objTxtSt.ReadAll())
書込み:
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTxtSt = ob...続きを読む

Aベストアンサー

基本的な命令ならまずマニュアルで調べるのが妥当な方法だと思いますよ
VB付属のMSDNや Webの http://msdn.microsoft.com/ja-jp/library/default.aspx
などで ・・・

ファイルの削除なら『Kill』、存在の確認には『Dir』で出来ると思いますよ

QVBAでアカウント名を取得する方法

VBAで処理したEXCELブックをデスクトップに自動保存しようとしています。VBAで現在作業中のユーザーアカウント名を自動で取得する方法を教えていただきたいのですが。

デスクトップ上にブックを保存するには、パスを記述すればよいのですが、現在PC毎にユーザーアカウントを設定しユーザー名が異なっています。
このため、PC毎にこのユーザー名をデスクトップへのパスに入れ込まなければなりません。毎回キーボードからこのユーザー名を入力する方法もありますが、自動的にユーザー名を取得し、正しいパスを指定する方法を検討しています。
どなたか、VBAでこのユーザー名を取得する方法が有れば教えていただきたいのですが。
よろしくお願いいたします。

Aベストアンサー

Environ関数で、環境変数[USERNAME]を取得する。

MsgBox Environ("USERNAME")

QInternetExplorer.Applicationオブジェクトで用紙を横にしたい

HTA内であるページを印刷するのにInternetExplorer.Applicationを
使っています。

ページ印刷時にExecWBプロシージャでプレビュー画面を出しているの
ですがA4用紙が絶対に縦になってしまいます。IE7を使っているので
プレビュー画面上で用紙を横にできるのですが、プレビュー画面を
開くときに縦にするにはどうしたらよいのでしょうか?

ieオブジェクトで height,width を横長になるようにしてみたのですが
頑固に縦に印刷しようとします。

Set ie=CreateObject("InternetExplorer.Application")
ie.Height=1280
ie.Width=960

Aベストアンサー

ScriptXというコントロールが Webブラウザ(IE)の印刷関連を制御するのに使えるようです

下記からダウンロードできます
http://www.meadroid.com/scriptx/index.asp

Googleなどで『ScriptX portrait』などで検索してみましょう

コントロールをインストールしたら
<object id="factory"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,429,14">
</object>
のようなオブジェクトタグを挿入して
factory.printingオブジェクトのプロパティなどを設定します
printメソッドや printpreviewメソッドなどを試してみてください
用紙の方向は portraitで trueで縦 falseで横 になります

@ITのInside.NET会議室 > 縦印刷設定 が参考になるでしょう
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9590&forum=7&6

参考URL:http://www.meadroid.com/scriptx/index.asp

ScriptXというコントロールが Webブラウザ(IE)の印刷関連を制御するのに使えるようです

下記からダウンロードできます
http://www.meadroid.com/scriptx/index.asp

Googleなどで『ScriptX portrait』などで検索してみましょう

コントロールをインストールしたら
<object id="factory"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,429,14">
</object>
のようなオブジェクトタグを挿入して
factory.printingオブ...続きを読む


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

人気Q&Aランキング

おすすめ情報