アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBからテキストファイル(タブ区切り)をエクセルで開く方法を探しています。CSVデータを出力する方法や、テキストファイルを読み込む方法等の情報はたくさんあるのですが、直接エクセルを起動し、それにテキストファイルを出力するのはなかなか見当たらない状況です。
質問の主旨は、もともと、参照ボタンを押下すると、選択されている指定のテキストファイルを保存するダイアログが出力される仕組みであったものを、どうせ開くのはエクセルだからと言うユーザーの要望から、参照ボタンクリックと同時にエクセルが起動し指定のテキストファイルをエクセルで開いて見ることができるように改造するといったものです。(参照のみですので読み取り専用で見たい)
テキストファイルをドラッグしてエクセルシートに持っていけばタブを認識して格セルに分割して開いてくれるのですが、VBから同じような動作をさせることは可能なのでしょうか?
よいヒントになるような情報でもかまいません
うまく説明できずわかりにくいかも知れませんがご助言をお願いいたします。
【環境】
WindowsXP、VB6.0、EXCEL2002

A 回答 (6件)

SendKeyを使うより直接EXCELオブジェクトを操作するほうがいいです。


こんな感じでしょうでしょうか。
VBの参照設定でEXCELオオブジェクトライブラリを
ロードしてやることを忘れずに。

Sub a()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

'オブジェクトのロード
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Open("D:\tab.csv", , True)
Set xlSheet = xlBook.Worksheets(1)

'A列をタブ区切
xlSheet.Columns("A:A").TextToColumns , Tab:=True
xlSheet.Cells(1, 1).Select

'当該EXCELを画面に表示
xlApp.Visible = True

'オブジェクトの破棄
Set xlBook = Nothing
Set xlApp = Nothing

End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
上記コードで問題なく動作確認できました。
で、ちょっと疑問に思ったのは

'A列をタブ区切
xlSheet.Columns("A:A").TextToColumns , Tab:=True
xlSheet.Cells(1, 1).Select

の部分はNo.3でご回答いただいた部分と違う部分で無くても動作したのですが、省略可能と解釈して問題ないのでしょうか・・。

もう少し調査してみます。

お礼日時:2006/10/18 17:07

#4です。



>'A列をタブ区切
>xlSheet.Columns("A:A").TextToColumns , Tab:=True
>xlSheet.Cells(1, 1).Select

>の部分はNo.3でご回答いただいた部分と違う部分で無くても動作したのですが、省略可能と解釈して問題ないのでしょうか・・。

上記の部分ですが、TAB区切りで開きたいとの事でしたので、
明示的にTAB区切りを指定しています。
自動でTAB区切りになるかどうかは各PCの設定によりますので。
ちなみに私のPCではなりませんでした。(Excel2000)

2行目でA1をセレクトしているのは、TAB区切りした後で
A1列の表示(上部に表示されるセルの値の部分)を再表示させています。
…これも私のPCではなぜかTAB区切り前の表示になっていたので
気持ち悪かったから付け加えただけです。
    • good
    • 0
この回答へのお礼

なるほど!そういうことでしたか!。
使う人の環境がまちまちなのはわかってることですので、この2行は絶対必要ですね^^;
ご回答本当にありがとうございました。

お礼日時:2006/10/19 09:06

VB 6.0 から Excel を Com オブジェクトで操作すれば問題ないかと。


Excel への参照設定を行ったうえで
Dim xlApp As Excel.Application
Dim xlBooks As Excel.Workbooks
Dim xlBook As Excel Workbook

Set xlApp = New Excel.Application
Set xlBooks = xlApp.Workbooks
Set xlBook = xlBooks.Open("c:\hoge.txt")
xlApp.Visible = True

Set xlBook = Nothing
Set xlBooks = Nothing
Set xlApp = Nothing

または、Excel のバージョン変化に何とか対応するには
Dim xlApp As Object
Dim xlBooks As Object
Dim xlBook As Object

Set xlApp = CreateObject("Excel.Application")
Set xlBooks = xlApp.Workbooks
Set xlBook = xlBooks.Open("c:\hoge.txt")
xlApp.Visible = True

Set xlBook = Nothing
Set xlBooks = Nothing
Set xlApp = Nothing

てな感じで。

> VBからテキストファイル(タブ区切り)をエクセルで開く方法を探しています。CSVデータを出力する方法や、テキストファイルを読み込む方法等の情報はたくさんあるのですが、直接エクセルを起動し、それにテキストファイルを出力するのはなかなか見当たらない状況です。

ズバリなサンプルを探してしまうのは最初は仕方のない事なのですが、そこから前進するためには、
かつて得たズバリな知識、または今回も Web で調べまくった数々のサンプル。これらを小さな点に例えます。
kodawariha さんの中にはこれら小さな点がいくつもあるはずですので、次はこの小さな点たちの間に空いている空間を埋める努力をし、大きな円になるようにします。(なんのこっちゃって思います?)
空いている空間を埋めるのは「ひらめき」もあるのですが、「すでにある知識の中に出てくる要素から探っていく」という方法が大事です。
今回の目的には合致しなかった無数のサンプルをとりあえず入力してみる。
オブジェクト ブラウザとかで、Excel を VB から扱う時にどんな命令などがあるのか見てみる。
そんな行動から目的の解決方法が見つかったり、今後使うかもしれない何かを先取りすることが可能になります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おっしゃるとおりですね。私はお察しのとおり最近巷で流行のコピペ職人?とも言われる(言われてない?)駆け出し技術者です。。。情けないですが・・・。恥ずかしながら、点を円にする努力はそれなりにしてきたつもりです、しかしながら、その手段や方法が悪いのか、自力でこれらの事を探って解決した経験はほとんどありません。temtecomai2のおっしゃるオブジェクトブラウザも何の為にあるものかも知らないしまつです。どうせわからないからと自分で考えなくなる悪循環スパイラルですね・・・いけないこととは思いつつついついネットに頼ってしまいます。

こういう職人が蔓延る悪い時代ですね・・・。

お礼日時:2006/10/18 17:28

じゃんぬねっと です。



> CSVデータを出力する方法や、テキストファイルを読み込む方法等
> の情報はたくさんあるのですが、
> 直接エクセルを起動し、それにテキストファイルを出力するのは
> なかなか見当たらない状況です。

そうでしょうか?
CSV でも TSV でも、'形式さえ正しければ' Excel から開くことはできますので、同じように可能だと思います。

たとえば、以下のような方法があります。
まず、プロジェクトの参照設定に 'Microsoft Excel xx.x Object Library' を追加します。
(Excel 2002 であれば、'Microsoft Excel 10.0 Object Library' のハズ)

次に以下のようなテストソースを書きます。

Dim xlApplication As Excel.Application
Set xlApplication = New Excel.Application

Dim xlWorkbooks As Excel.Workbooks
Set xlWorkbooks = xlApplication.Workbooks

Call xlWorkbooks.Open("C:\Hoge.txt")

Set xlWorkbooks = Nothing
xlApplication.Visible = True
Set xlApplication = Nothing

動作確認済みです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
上記コードで実行できました。
ありがとうございました。

お礼日時:2006/10/18 17:03

手元に開発環境が無く、最近はVB.NET 2003ばかりつかっているので正確ではないかもしれませんが、Excel自体が、オブジェクトとして単独で存在し得るのではないでしょうか?



現在の仕事で、VB.NETから「Wordオブジェクト」を生成し、Wordを起動、指定されたWordファイルを開いて内部を編集、保存して印刷して、なんてのを一通りやってます。実は、VB.NETだといろいろと面倒がありまして、本来はVB6.0などでやるための手順を応用してやっていますので、VB6.0からも同様のことができるはずです。

内容は.NET向けですが、マイクロソフトにもいくつか文献はあります。
http://msdn2.microsoft.com/ja-JP/library/y1xatbk …
などです。また、「VB Wordオブジェクト」などで検索してもいくつか文献が引っかかります。VBから見れば、WordもExcelもオブジェクトという面では基本性能は同じですので、同様に検索できるでしょう。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/6/ …
なども参考になるかと。

いろいろ調べて試してみてください。基本的に、ExcelのVBA(マクロ)でできることは、おそらくVB6.0からもできると思います。
    • good
    • 0
この回答へのお礼

ご回答感謝します。
ありがとうございました。
参考にさせていただきます。

お礼日時:2006/10/18 16:59

他プログラムを起動させる・・・shell関数


他プログラムをアクティブにする・・・AppActivateステートメント
他プログラムをリモート操作・・・・・sendKeysステートメント

私がVB5でこれらのものを使用したことがあります。
VB6にあるかどうかわかりませんが、これで事が足りるのであれば、
似たようなものはあるのではないでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
起動したエクセルをリモート操作まではする必要なさそうですが
これらをキーワードに調べさせていただきます。

お礼日時:2006/10/18 16:41

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