今だけ人気マンガ100円♪夏の100円レンタル祭り♪

Quick Test Professional(QTP)を使用して社内サーバー(Webブラウザ)より複数ExcelファイルをDLするコードをVBScriptを使用して作成しています。
ただVBScriptもQTP上で多少制限があり、完全に同じではないようです(申し訳ございません、当方もQTP及びVBScriptを始めたばかりのため把握ができていない状況です)。
QTPから記録機能を使用している箇所もあります。
そのような状況でDLしたファイルが希望したものではなく、行き詰まっております。
お知恵を拝借いたしたくお願いいたします。

※「Download Data.xlsx」というExcelファイルにDLしたいファイルの情報やログインユーザー情報などを記載し、そこから取得しています。
一部下記リンク先を参考にさせていただきました。
http://q.hatena.ne.jp/1297409549/

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2

Set obj = CreateObject("Excel.Application")
obj.Visible = True
obj.Workbooks.Open "C:\Users\XXXXX\Desktop\Download Data.xlsx"

With obj.Workbooks("Download Data.xlsx").Worksheets("Sheet1")
.Activate
uName = .Cells(2, 1).Value 'ユーザーID
pWord = .Cells(2, 2).Value 'パスワード
MaxRow = .UsedRange.Rows.Count

For i = 2 To MaxRow
getURL1 = .Cells(i, 3).Value 'DLしたいExcelファイルのURL
getPath = .Cells(i, 4).Value 'DLしたファイルを格納するデスクトップ上のフォルダ
getFL = .Cells(i, 5).Value 'DLしたいExcelファイルの名前
getURL2 = .Cells(i, 6).Value 'DLしたいExcelファイルの上位階層のURL

SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe", getURL2, "", "" 'ieの起動
Browser("XXXXXX").Page("XXXXXX").WebEdit("username").Set uName
Browser("XXXXXX").Page("XXXXXX").WebEdit("password").Set pWord
Browser("XXXXXX").Page("XXXXXX").WebButton("ログイン").Click

sSource = getURL1 '※コメントアウトにしている紆余曲折があるため意味のない置き換えをしています…
dName = getFL '※コメントアウトにしている紆余曲折があるため意味のない置き換えをしています…

'指定したデスクトップ上のフォルダに保存
Set ws = CreateObject("WScript.Shell") '特殊フォルダ名の取得
desktopDir = ws.SpecialFolders("Desktop") 'デスクトップの実体
sDest = desktopDir & "\" & getPath & "\" & dName 'コピー先
Set oHTTP = CreateObject("Msxml2.XMLHTTP")
oHTTP.Open "GET", sSource, False
oHTTP.Send
Set Stream = CreateObject("Adodb.Stream")
Stream.Type = adTypeBinary
Stream.Open
Stream.Write oHTTP.responseBody
Stream.Savetofile sDest, adSaveCreateOverWrite

Browser("XXXXXX").CloseAllTabs

Set Stream = Nothing
Set oHTTP = Nothing
Set ws = Nothing

Next

obj.Quit
Set obj = Nothing
End With

動作はエラーもなく完了し、Excelファイルも保存できましたが、そのファイルはオリジナルよりサイズが小さく、拡張子が違うとエラーが出て開くことができません。
参考とさせていただいたリンク先は画像ファイルをDLするもので、ExcelファイルをDLする場合実際は「『開く』『保存』『キャンセル』」を選択するメッセージが立ち上がり、ieのURLアドレスバーはExcelファイルのものが入力されていますが、画面はログイン画面のままです。
恐らくそのログイン画面をExcelで保存しているものと思われます。
指定したExcelファイルのアドレスからそのファイルを取得したいのですが、どのように改修すればいいのかわかりません。
このままのコードを修正してできるのであればその方法を、もし「『開く』『保存』『キャンセル』」の選択メッセージから保存を選びDLするしかないのであればその方法及び格納フォルダ指定の方法をご教示いただきたく、よろしくお願いいたします(QTPの記録でその格納先指定が上手くできなかったため上記のようなVBScriptを使用して作成しております)。

動作環境
OS win7
QTP 11
ie 8

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

  • ご回答ありがとうございます。
    すでにご覧になられているかもしれませんが、QTPに関しては下記リンクを参照していただければと思います。
    http://it.impressbm.co.jp/articles/-/6681
    ただ今回の場合QTPの記録で取得したコードで不具合を起こしているのではなく、恐らくVBScript部分で動かしている箇所でExcelファイルをDLするには何かが足りないとか何かが違うのではないかと思い、こちらのタイトルで質問させていただきました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/08/11 18:08
  • 敢えてQTPと出したのはその記録機能で取得したコードが含まれるためで、最初からある程度説明しておいた方がいいかと思ったのですが、混乱させてしまったのであれば申し訳ございません。
    そのQTPは職場で使用しているのですが、VBScript部分を作成できる詳しい者がおらず、窮地に陥りました。
    また今回の場合はExcelのファイルをDLしたいのですが(選択メッセージで選択するのであれば『保存』を選び、保存先フォルダを指定するのが希望です)、Download Data.xlsxはいろいろな人が設定に使用するのでそのファイルにマクロ設定は避けたく、また別のExcelファイルに…となってしまうので、できればExcel VBAを使用するのは避けたい状況です。
    VBScriptでは不可能ということであれば、再考いたしますが、今一度上記内容でご教示いただきたく、よろしくお願いいたします

      補足日時:2015/08/11 18:12
  • ご回答ありがとうございます。
    また私のレベルが未熟でコメント内容を理解できず申し訳ございません。
    Excel VBAを使用ということで、ExcelでAPIを記述したxlsmファイルを用意するものだと思い込んでしまっておりました。
    VBScriptで呼び出すのですね…失礼いたしました。
    早速試してみたのですが、やはり添付画像のようなダイアログが出てしまい、そこで動作が止まっている間にマクロは実行されて、その後ろのieで画面表示されているのはログイン画面なのでそちらをExcelファイルとして取得してしまいます。

    「VBScriptでExcelファイルをD」の補足画像3
    No.2の回答に寄せられた補足コメントです。 補足日時:2015/08/12 11:39
  • どうしてもログインしなければならず、そのため一旦別のページを開き、取得したいExcelファイルのURLを指定するとそのダイアログの後ろで読み込んでるような動作が見えるのですが、直接取得したいExcelファイルのURLを指定してログインすると読み込みそのものをしないで(画面表示完了として)このダイアログが表示されます。
    私のVBScriptスキルでは可否の判断ができないため、何度も訊いてしまって申し訳ございません。
    よろしくお願いいたします。

      補足日時:2015/08/12 11:41
  • ありがとうございます。

    >元のコードでも同様ですよね。
    >それは実際成功するのですか?

    成功というかExcelファイルは作成されるのですが、それはログイン画面をExcelで保存してるという状態で正確にはDLとは違う気がします。

    >IE オブジェクトからの操作をするか

    無人の時間帯に作動させるためQTP(UWSCの有償版のようなもの)を使用するので手動操作は含められません。
    そのためVBScriptでその操作ができないか質問させていただきました。

    >#2で書いたようなWin32 APIからの手法

    今回試させていただいたのがこちらの方法でした。
    32bitなのは確認してますが、上手く作動しませんでした。
    Excel2013なのが問題でしょうか。

    スキルがなく、ご面倒おかけして申し訳ございませんが、問題点等お気づきの箇所を教えていただけると助かります。
    よろしくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/08/12 21:03
  • >>Excelで保存してるという状態で正確にはDLとは違う気がします。
    >このような表現をされたら、どうしてよいのか分かりません。
    私はDLというのはサーバー上の指定したファイルをローカルに落とす(コピーして保存する)と思っているのですが、今回の動作はie上に表示されたサーバー上の指定したものとは別のファイルを指定したファイル名に変更して保存しているということで直接DLしたファイルにアクセスしてないのに何故?という感覚でしたので動作として違うと思ってしまいました。
    これも意図してないとはいえDLということになりますね…よく推敲せず投稿してしまい申し訳ございません。

    No.4の回答に寄せられた補足コメントです。 補足日時:2015/08/13 12:06
  • >こちらが一つ書けば否定されて、再度、こちらが詳しく説明するという繰り返しでは、先に進めません。
    否定していると受け取られるのはこちらとしても心外です。
    動作環境でできることとできないことがあり、そのうち何を伝えなければならないのかはどういう処理をするかで変わります。
    それをお伝えしたり、動作確認をしてできなかった旨をお伝えしています。
    VBSの掲示板がなかったので今回こちらに投稿いたしましたが、他の質問掲示板等では、
    「私:ここまで作ったけどこれができなくて困ったとコードを載せる」→「回答者:ここをこれに変えて、とか、これを追加してという意見が出る」→「私:やってみる、でもできない」→「回答者:じゃあこれに、と別の案」という流れがあって、最終的に「動いた!」となるか、「やはりできない」→「それ以上は方法ない」と回答者が言ってくだされば、「諦める」というようにしていました。

      補足日時:2015/08/13 12:08
  • こちらでもそのような流れでいいものと判断しておりました。
    私はVBSの初心者と最初に記載していますし、文章の内容からプログラマーでもSEでもプログラミングに精通している人物でもないということは精通している方から見れば一目瞭然でしょう。
    そんな精通している方からすれば簡単な用語でも曖昧に書かれてしまえば初心者にはわからなかったり意味を取り違えられることがあるということもご判断いただけるのではないでしょうか。
    >>>IE オブジェクトからの操作をするか
    >この意味も理解していないようですね。ダウンロードのダイアログは、概ねJavaScript なのですが、それをIEオブジェクトから操作するという意味です。そのためには、Web解析をしなくてはならない、と書いても分からないかもしれませんね。
    以前のIEではExcelも画面表示できたと思います。

      補足日時:2015/08/13 12:10
  • 最近のIEでは必ずこのダイアログが出ますので、IEの仕様と思っています。
    そのためそれを回避してDLするかダイアログの操作をしてDLするVBSのコードが、プログラミングに精通している方ならご存知ではないかと思い、質問させていただきました。
    JavaScriptだと言われてもまずVBSで何ができるかもわからない私程度の者がVBSでJavaScriptを操作できるのかもわかりませんし、そこから勉強を始める時間はありません。
    そしてWeb解析までは今回の業務として行なうことはできません。
    VBAですが下記サイトに似たようなまとめが記載されておりました。
    http://www.ka-net.org/blog/?p=4855
    そのサイトでもお勧めしている2方法でできなかったので、自分レベルのVBSではできないもしくは自分の動作環境ではできないと諦めた方がよさそうですね。

      補足日時:2015/08/13 12:12

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

A 回答 (4件)

申し訳ないのですが、私の話は、ほとんど伝わっていないようです。



こちらが一つ書けば否定されて、再度、こちらが詳しく説明するという繰り返しでは、先に進めません。

一つのポイントをクリアして、次に進むのであっても、未だ、最初の段階さえクリアしていないのでは、次には進みません。

>Excelで保存してるという状態で正確にはDLとは違う気がします。
このような表現をされたら、どうしてよいのか分かりません。

>>IE オブジェクトからの操作をするか
この意味も理解していないようですね。ダウンロードのダイアログは、概ねJavaScript なのですが、それをIEオブジェクトから操作するという意味です。そのためには、Web解析をしなくてはならない、と書いても分からないかもしれませんね。

以上ですが、私から、お教えできることは、これ以上ないのです。
もう一度、話をまとめて、質問を仕切り直ししたほうが良いかもしれません。無駄に、お時間を取らせてすみせんでした。
この回答への補足あり
    • good
    • 0
この回答へのお礼

こちらこそありがとうございました。

お礼日時:2015/08/13 12:12

こんにちは。



>早速試してみたのですが、やはり添付画像のようなダイアログが出てしまい、そこで動作が止まっている間にマクロは実行されて、その後ろのieで画面表示されているのはログイン画面なのでそちらをExcelファイルとして取得してしまいます。

ということは、ダウンロードは失敗しているという意味でしょうか。

>直接取得したいExcelファイルのURLを指定してログインすると読み込みそのものをしないで(画面表示完了として)このダイアログが表示されます。

これは、元のコードでも同様ですよね。それで、マニュアルであろうとも、それは実際成功するのですか?

私が同じ場面に直面した時は、2つの方法を考えますが、
 IE オブジェクトからの操作をするか、
 もう一つは、#2で書いたようなWin32 APIからの手法です。

ふつうは、前者で済んでしまうのですが、Web解析をしなくてはなりません。それは、個別の内容になりますから、公開しない限りは、自分で開発しなけれはならないと思います。なれていないと、なかなか、一筋縄ではいかないような気がします。

後者の方は、Excel オートメーションで、Win32 APIを呼び出して、SendMessageあたりで、処理してしまう、ということです。ただ、ここら辺りのことになると、分からないなら、USCW などの、Windows マクロで済ませたほうが早いような気がします。中身は、Win32 APIと同じですけれどね。
この回答への補足あり
    • good
    • 0

こんにちは。



>QTPに関しては下記リンクを参照していただければと思います。
残念ながら、私には、総論的な話を読んでも、それ自体はわかりませんし、この部分は直接に触れるつもりはありません。

再度、自分の#1のレスも含めて、読みなおしてみました。

>もし「『開く』『保存』『キャンセル』」の選択メッセージから保存を選びDLするしかないのであればその方法

>今回の場合はExcelのファイルをDLしたいのですが(選択メッセージで選択するのであれば『保存』を選び、保存先フォルダを指定するのが希望です)

全面的に、コードを変えないとできません。今回たまたま、ここのカテゴリの別の質問で、「Webページ中の javascript をVBAから実行するには」という質問がありましたが、こちらでは、概略的な部分でしかアドバイスができません。試行錯誤は避けられないと思います。今のような、直接ダウンロードというようには行きません。また、IEの execWB で行うという方法もありますが、現状でみる限りは、必要があるとも思えません。

また、保存先フォルダを変えるというのは、少なくとも、プログラム上のIEから、触らないほうがよいと思います。かなりセンシティブな問題が発生しかねませんから。むろん、事前には可能です。

それに、
 sSource = getURL1
この部分が無駄になってしまいます。

>恐らくVBScript部分で動かしている箇所でExcelファイルをDLするには何かが足りないとか何かが違う

それは、質問のコードを試したわけではありませんが、もし気になるなら、その都度、コードの途中で、ファイル状態をチェックしてみないと分かりません。

試しに、3つの違ったコードを書いてみました。その内、2つを紹介します。(もう一つは、SFCminiを使ったものです)
使用するデータは、公開された公共のデータですから、著作権には該当しません。

'//(1)
'三田線の駅
Const strURL ="http://www.mlit.go.jp/common/001094832.xlsx"
Dim myFOLDER
Dim objADO
Dim dstDLFolder
Dim WSHShell
Dim WSH_Folder
Set WSHShell = CreateObject("WScript.Shell")
Set WSH_Folder = WSHShell.SpecialFolders
myFOLDER =WSH_Folder.Item("Desktop")
i = InStrRev(strURL, "/")
buf = Mid(strURL, i + 1)
If InStr(dstDLFolder, ".") = 0 Then
dstDLFolder = myFOLDER & "\" & buf
Else
dstDLFolder = myFOLDER
End If
On Error Resume Next
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Call objHTTP.Open("GET", strUrl, False )
objHttp.Send
If objHttp.status = 200 then
Set objADO = CreateObject("ADODB.Stream")
objADO.Open
objADO.Type = 1 ' バイナリ
objADO.Write objHTTP.responseBody
objADO.SaveToFile dstDLFolder, 2
objADO.Close
Else
WScript.Echo "Error: " & Err.Description
Wscript.Quit
End if

'//

'(2)Excelを利用した方法
'都庁 入札サンプル
Const strURL ="http://www.njss.info/v6/files/organization_offer …
Dim myFOLDER
Dim i
Dim buf
Dim dstDLFolder
Dim command
Dim WSHShell
Dim WSH_Folder
Set WSHShell = CreateObject("WScript.Shell")
Set WSH_Folder = WSHShell.SpecialFolders
myFOLDER =WSH_Folder.Item("Desktop")
i = InStrRev(strURL, "/")
buf = Mid(strURL, i + 1)
If InStr(dstDLFolder, ".") = 0 Then
dstDLFolder = myFOLDER & "\"& buf
Else
dstDLFolder = myFOLDER
End If
command = "CALL(""urlmon"", ""URLDownloadToFileA"", ""JJCCJJ"", 0, """& strURL &""", """& dstDLFolder &""", 0, 0)"
With CreateObject("Excel.Application")
.ExecuteExcel4Macro(command)
End With

'---
>そのファイルにマクロ設定は避けたく
>Excel VBAを使用するのは避けたい
Excelで利用しても、何の遜色もありません。むしろ、こちらに軍配が上がります。今回は、メインの問題には外れますが、試してみる価値はあるように思いました。理由は、他からの介入の度合いが低いからです。「マクロの設定」というのは、何を意味しているのか分かりませんが、Excelを使いながら、上記のように、VBA(アプリ用の言語)の利用はダメというのは、誤解なのか、それとも変則的なルールなのでしょうか。ただ、あまり厳密に排除していくと、結果的には、Excelそのものが使えなくなってしまいます。その辺りは、臨機応変に考えたらいかがかと思います。
この回答への補足あり
    • good
    • 0

こんにちは。



なかなか、レスがつきませんね。
つかない理由は、2点です。

一つは、QTP というのは分からないということです。
もうひとつは、内容的に変則的だからです。Excelがあるなら、Excel VBAで処理してしまえばよいと思います。

仮に、Excel オートメーションで使ったとしても、ダウンロードに、Win32API のURLDownloadToFileを使えば簡単に済むはずです。もし、そういうスタイルに支障があれば、また話は変わってくるのですが、Adodb.Streamでダウンロードで行うというのは、何か、せっかくのExcel の機能をフルに使っていないような気がします。

インターネットで、Excel オートメーションだけで、Win32 APIを使うのは、

command = "CALL(""urlmon"", ""URLDownloadToFileA"", ""JJCCJJ"", 0, """& url &""", """& sFileName &""", 0, 0)"

With CreateObject("Excel.Application")
  .ExecuteExcel4Macro(command)
End With

とするようです。(以下のサイトも伝聞のようですが……)

https://omuraisu777.wordpress.com/2009/05/23/vbs …

ややこしいので、許されるなら、SFC mini をインストールして、呼び出したほうがよいかもしれませんね。
この回答への補足あり
    • good
    • 0

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

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

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

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

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

Qダウンロード支援フリーソフトについて

ダウンロード支援フリーソフトについて
色々なダウンロード支援フリーソフトを試しましたが私の設定が良くないのか私の思うようにダウンロード出来ません、おすすめのダウンロード支援フリーソフト・設定を教えてください。

用途としてはインターネットのページ上でサムネイル化されている画像を大きいサイズで保存したいのです、上記のとおり一通りフリーソフトを試しましたがサムネイルサイズの小さい画像しか保存できず困っています。

フリーソフト等を使ってサムネイル化された画像を元々のサイズで保存する方法はないのでしょうか?出来るのなら出来るフリーソフト・設定を教えて下さい。

質問内容が分かりにくく大変申し訳ありません。

Aベストアンサー

そのサムネイルは大きい画像へのリンクになっていますか?

小さいサムネイル画像しか持たない(リンクしていない)画像だったらどんなソフトを使っても小さな画像しか得られませんので

http://www.flashget.com/index_jp.htm

QあるExcelファイルのセルへの入力を異なるExcelファイルのセルへリンクさせる方法

 Excelで、あるセルへの入力と同時に異なるファイルの一つのセルへ自動で入力内容がリンクされるようにするには、どうすればいいでしょうか?
 例えば、A1セルに入力した100という数字が異なるファイルのB8セルへも100が入力されるような形です。「結合」という項目である程度可能のようななのですが、同じ行の多数のセルのリンクには対応できないようなのです。もしVBが必要なのでしょうか??
 是非アドバイスお願いします。

Aベストアンサー

No.1663741 質問:エクセルのファイル間データ共有
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1663741

のような方法ではいかがですか。

Qフリーソフトをダウンロード,なのに有償版のアイコンがある…

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困っています。

フリーソフトのみをダウンロードしたつもりなのにWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがあることや,間違いダウンロードをしてしまったかもしれないということについて尋ねたくてもどうしてよいかわかりません。

これは請求されるのでしょうか?

もし,ダウンロードミスをしていた場合,これは間違 いダウンロードだとしてダウンロードを返上,撤回す るのはどうすればよいでしょうか?

お教えください。

ラスター・ベクター変換で
http://www.softsoft.net/wintopo/dl-wintopo.htm
という英国のWinTopo Freeware 1.7というフリーソフトをダウンロードしました。

ですが,インストールを終えてみるとWinTopo Freeware 1.7のフリーソフトとWinTopo Professionalの有償版のアイコンがうまれているのです。

どこかで間違った手続きをしたのでしょうか?

特に変わったこともなくダウンロードして,インストールをしました。 

そして,サイトがすべて英語なのでわかりづらくて困ってい...続きを読む

Aベストアンサー

正常です。

私もインストールしたことがありますが、たしかその有償版は期間限定だか機能限定だかの試用版のはずです。
一緒にインストールされる旨どこかに書かれていたと思います。

Q既存のExcelファイルをコピーして、コピーしたファイルに画面内容を転記する方法

タイトル通りの質問です。
流れ的には、こんな感じになると
思われますが、文法等がイマイチ
分からなかったので書き込みしました。
お分かりの方がいらしたら、お願い致します。

Option Explicit

変数の指定

Private Sub 実行ボタン_Click()

 Excelファイルをコピー

 コピーしたExcelファイルをオープン

 指定したセルに画面内容(テキストボックス)を転記

 コピーしたExcelファイルをクローズ

End Sub

Aベストアンサー

こんにちは。

検索しろとのご指摘もありますが。。。

> 指定したセルに画面内容(テキストボックス)を転記

の意味が良く解かりませんので、テキトーにやってます。
何のエラー処理もしてないので、テストブックで試して下さい。

Sub Test()
Dim wb As Workbook
 'コピー
 FileCopy "C:\Book1.xls", "C:\copy.xls"
 'オープン
 Workbooks.Open ("C:\copy.xls")
 Set wb = ActiveWorkbook
 '記入
 wb.ActiveSheet.Range("A1") = Now
 '保存
 wb.Save
 'クローズ
 wb.Close
End Sub

Q「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダ

「着もと」というフリーソフトのダウンロードサイトが開けなく、ソフトがダウンロードできません。
着もとのように着信音設定を可能にするフリーソフトがあれば教えていただけないでしょうか?

Aベストアンサー

http://www.vector.co.jp/soft/dl/winnt/art/se460732.html
ここからどうぞ

QVBScriptからEXCELのVBAコマンドを実行するには?

VBScriptからEXCELのVBAコマンドを実行するにはどうしたら良いでしょう?

例)
Set P_OBJEXCEL = CreateObject("Excel.Application")
※ここで EXCEL VBA の Chdir "N:\"を行いたい
W_INFILE = P_OBJEXCEL.Application.GetOpenFilename("EXCEL(*csv),*.csv",,"入力ファイル")
P_OBJEXCEL.Application.Quit

環境→EXCEL2000+Windows2000+IE6
目的→入力ファイルを取得ため、N:\配下をGetOpenFileNameにて開きたい
※EXCELのデフォルトパスを変更したくないため

何かヒントを御願いします

Aベストアンサー

> 目的→入力ファイルを取得ため、N:\配下をGetOpenFileNameにて開きたい

ファイル名の取得だけなら、こういうのじゃダメですか?
Excel で開くなら、この後で Workbooks.Open で開けば良いですし。。

なお、字下げは全角SPでしてますので、実際にテストするときは、
タブに置換して下さい。

With CreateObject("MSComDlg.CommonDialog")
  '.CancelError = True
  .MaxFileSize = 256
  .InitDir = "N:\"
  .DialogTitle = "ファイルを開く"
  .Filter = "TEXT (*.csv)|*.csv|すべてのファイル (*.*)|*.*"
  .ShowOpen
  MsgBox .FileName
End With

あと、

> ※EXCELのデフォルトパスを変更したくないため

この意味が良くわからないです。

Qベクターのフリーソフトがうまくダウンロードできない

ベクターのフリーソフトを手順どうりダウンロードして 解凍ソフトを重ねて
解凍してみると何故か全て、エキサイト壁紙マネジャーの絵になります。
どんな、フリーソフトをダウンロードしても全部 壁紙マネジャーになるのです
なぜでしょうか?教えてください

Aベストアンサー

壁紙マネジャーを終了してから ダウンロードしてみては いかがでしょうか?
そのソフトが 余計なことをしているのかもしれません。

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ベクターのあるフリーソフトのダウンロード法

訳があって デザインした文字をTシャツに昇華プリント加工する必要に迫られ しかも「立体文字」を
デザインする必要に迫られ ウェブサイトをさまよってると ベクターのフリーソフト「もこもこ」なるサイトに出会いました。
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005196.html
フリーソフトと分かって 喜びいさんでダウンロード
しようとして うまくダウンロード出来ません。
ウェブ上の「ダウンロード」の項をクリックしても
うまくダウンロード出来ません。
実は ベクターのフリーソフトをダウンロードした
経験ゼロです。ひょっとして 事前の会員登録制?
なのでしょうか。
どなたか 御教示 お待ちしています。
PS。「ラーサプラス」なる解凍ソフトは
   インストール済みです。

Aベストアンサー

最近「Vアップ通知」なるサービスが開始され、ダウンロードを開始する前に、そのサービスの案内ページが挿入されるようになりました。
このページで「登録するとバージョンアップの連絡…」などの文面があるのでそれで迷われたのでしょうか?
案内ページの下にある「いまは登録しない」ボタンを押すととりあえずダウンロードが開始されますよ。

自分も変更直後に「登録が必要になったのか?」と勘違いし少しハマりました(^^;

Q[VBScript]ファイルの入出力を同時に行う方法

[VBScript]ファイルの入出力を同時に行う方法

以下の入力ファイルから以下の出力ファイルを作るアルゴリズムを考えていたのですが、
不明な点が出てしまい、アドバイスいただけないかと思い投稿しました。

不明な点は、掲題の通り、
「ファイルの入出力を同時に行うことが出来ないのではないか」という点です。

以下の入力ファイル形式を出力ファイル形式へ変換するには、
「セクション1」の「りんご」の行までは、入力ファイルを 1 行ずつ読み込んで
出力ファイルへ 1 行ずつ書き込めば良いと思います。

しかし、「セクション2」の「みかん」の「100」の文字列を出力ファイルへ書き込むには、
現在書き込み途中の出力ファイルの中を検索し、「みかん」の行が見つかったら
その隣に「,100」という文字列を書き込むという処理が発生します。

つまり、出力ファイルに対し、書き込みと読み込み(検索)を同時に行わければなりません。
このようなことが果たして可能なのか、以下のコードで確かめてみたのですが
エラーとなってしまいました。

やはり一旦出力ファイルをクローズするしかないでしょうか……?

■入力ファイル形式
・セクション1
いちご
みかん
りんご

・セクション2
みかん:100円

・セクション3
キウイ
バナナ
マンゴー

・セクション4
マンゴー:300円

■出力ファイル形式
いちご
みかん,100
りんご
キウイ
バナナ
マンゴー,300

■コード
Private Const overWrite = "True"
Private objFSO: Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Private objTextStream_out : Set objTextStream_out = objFSO.CreateTextFile(".\out.txt", overWrite)

objTextStream_out.WriteLine("いちご")
objTextStream_out.WriteLine("みかん")
objTextStream_out.WriteLine("りんご")

Private buffer_out : buffer_out = objTextStream_out.ReadAll()

[VBScript]ファイルの入出力を同時に行う方法

以下の入力ファイルから以下の出力ファイルを作るアルゴリズムを考えていたのですが、
不明な点が出てしまい、アドバイスいただけないかと思い投稿しました。

不明な点は、掲題の通り、
「ファイルの入出力を同時に行うことが出来ないのではないか」という点です。

以下の入力ファイル形式を出力ファイル形式へ変換するには、
「セクション1」の「りんご」の行までは、入力ファイルを 1 行ずつ読み込んで
出力ファイルへ 1 行ずつ書き込めば良いと思います。

し...続きを読む

Aベストアンサー

ファイルの入出力方法はFileSystemObjectだけではありません。
ADODB.Streamオブジェクトを使うと、Positionプロパティを
操作することにより、任意の入出力ポイントに移動することが
可能です。この他、文字コードの変換やバイナリデータも扱う
ことができます。勿論、それだけ面倒な制御が必要ですが、そこは
頑張るしかないですね。以下はサンプルです。

Dim X, T, C
Set X = CreateObejct("ADODB.Stream")
A.Open
A.Type = 2 'テキスト形式を意味する。バイナリなら1
A.LoadFromFile "C:\~" 'ファイルを読み込むため開く
A.Position = 0 'ファイルの先頭に位置付ける
'---- 1行読み込み
T = ""
Do
    If A.EOS Then Exit Do '終端に達していれば終了
    C = A.ReadText(1) '1文字読み込む
    If C = vbLf Then Exit Do '改行なら抜ける
    T = T & C ’文字を結合する
Loop
'---- ファイルを書き込む
A.SaveToFile "C;\~", 2 '上書き許可を指定、不可なら1

ファイルの入出力方法はFileSystemObjectだけではありません。
ADODB.Streamオブジェクトを使うと、Positionプロパティを
操作することにより、任意の入出力ポイントに移動することが
可能です。この他、文字コードの変換やバイナリデータも扱う
ことができます。勿論、それだけ面倒な制御が必要ですが、そこは
頑張るしかないですね。以下はサンプルです。

Dim X, T, C
Set X = CreateObejct("ADODB.Stream")
A.Open
A.Type = 2 'テキスト形式を意味する。バイナリなら1
A.LoadFromFile "C:\~" 'ファイルを読み...続きを読む


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

人気Q&Aランキング