[リストへもどる]
一括表示

投稿時間:2003/01/18(Sat) 19:58
投稿者名:まさと
Eメール:a_mst@mail.goo.ne.jp
URL :
タイトル:
エクセルデータをMSFlexGrid上に
こんにちは。まさとと申します。
皆さんにおたずねしたいことがあるのですが、既存のEcxelの*.xlsデータのデータを
MSFlexGrid上に表示したいのですが、どのように行えばよいのでしょうか?
初心者な物で困っております。ご存知の方がおられれば是非教えていただけないでしょうか?

投稿時間:2003/01/18(Sat) 20:39
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: エクセルデータをMSFlexGrid上に
> 皆さんにおたずねしたいことがあるのですが、既存のEcxelの*.xlsデータのデータを
> MSFlexGrid上に表示したいのですが、どのように行えばよいのでしょうか?
> 初心者な物で困っております。ご存知の方がおられれば是非教えていただけないでしょうか?

このホームページの「MSFlexGrid関係」や「Excel・Word関係」は見ましたか?
まずは自分の希望する処理に関係しそうなものを読み、テストして下さい。
せっかくの情報を無駄にしないように!!!

人に聞く前に自分でまずは努力をして下さい。その上でなお、不明個所を具体的に聞いて下さい。

投稿時間:2003/01/19(Sun) 21:12
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: エクセルデータをMSFlexGrid上に
*.Xls ファイルをMSFlexGrid に表示するだけなら下記のような方法もあります。

Private Sub Command1_Click()
    '参照設定でMicrosoft DAO 3.6 Object Library にチェックを
    '入れておいて下さい。
    'フォームにMSFlexGridコントロールとデータコントロールを貼り付け
    'デザイン時に下記プロパテイをセットしておいて下さい
    'MSFlexGrid1.DataSource = Data1
    'Data1.Visible = False

    Dim DB       As Database
    Dim RS       As Recordset
    Dim FileName As String
    '読込用のExcelファイル
    FileName = App.Path & "\sample.xls"
    'ファイルをオープン(HDR=NO で項目を読込まない)
    Set DB = OpenDatabase(FileName, False, False, "Excel 8.0;HDR=YES;")
    'テーブルの内容を格納(Sheet1 = Excelのシート名)
    Set RS = DB.OpenRecordset("Sheet1$", dbOpenTable)
    'MSFlexGridと連結
    Set Data1.Recordset = RS
    Data1.Refresh
    RS.Close
    DB.Close
    Set RS = Nothing
    Set DB = Nothing
End Sub


CSV形式で保存した日付データ読込む場合、文字列として読込めば問題なく表示されます。


# マルチポストはマナー違反です。マナー違反は初心者といっても許されるものではありません。
インターネット上のマナーについてご存知なければ ネチケット で検索して勉強しておいて下さい。
又、解決報告・レスに対する返信等は書き込んだすべての掲示板に報告して下さい。

投稿時間:2003/01/20(Mon) 12:33
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^2: エクセルデータをMSFlexGrid上に
マルチポストの件は失礼しました。

ただいま自分の力でなんとかデータは読めるようになったのですが、今の状況はエクセルのセルをループで読んでいるのですが、最後のセルを認識していないので永久ループ状態になっています。
本日は教えていただいた方法をチャレンジしてみたいと思います。

投稿時間:2003/01/20(Mon) 21:32
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^2: エクセルデータをMSFlexGrid上に
たびたびすいません。
せっかく教えていただいたソースですが、読み込もうとすると
オブジェクト’Sheet1$’が見つかりませんとエラーが出てしまいます。
ここのSheet1$とはエクセルファイルのワークシート名でよろしいのでしょうか?

投稿時間:2003/01/20(Mon) 21:43
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: エクセルデータをMSFlexGrid上に
> ここのSheet1$とはエクセルファイルのワークシート名でよろしいのでしょうか?

デフォルトでは Sheet1  Sheet2 とかの名前です。
正確には シート名(Sheet1) & "$" です。
シート名を変更されていたら Sheet1 の部分を変更して下さい。 

投稿時間:2003/01/20(Mon) 21:53
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^3: エクセルデータをMSFlexGrid上に
> せっかく教えていただいたソースですが、読み込もうとすると
> オブジェクト’Sheet1$’が見つかりませんとエラーが出てしまいます。
> ここのSheet1$とはエクセルファイルのワークシート名でよろしいのでしょうか?

このsample.xlsではシート名の1番目が初期値のSheet1の時です。
自作のxlsファイルを使用する時には当然「sample.xls」の名前と所在フォルダ
及びシート名は変更の必要があります。
簡単なsample.xlsを作成し、サンプル・ソースのままで動きましたよ。

投稿時間:2003/01/20(Mon) 23:26
投稿者名:まさと
Eメール:a_mst@mail.goo.ne.jp
URL :
タイトル:
Re^4: エクセルデータをMSFlexGrid上に
まだまだがんばっているのですが、ソースをコピーしてみても「オブジェクトが存在しません」とエラーが表示されてしまいます。
データコントロールはツールボックスにデフォルトで表示されているDataのことですよね。
どうして表示されないのでしょうか?

投稿時間:2003/01/20(Mon) 23:36
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: エクセルデータをMSFlexGrid上に
>データコントロールはツールボックスにデフォルトで表示されているDataのことですよね。
そうです

参照設定でMicrosoft DAO 3.6 Object Library にチェックが入っていますか?
どこでエラーがでますか?

投稿時間:2003/01/20(Mon) 23:42
投稿者名:まさと
Eメール:a_mst@mail.goo.ne.jp
URL :
タイトル:
Re^6: エクセルデータをMSFlexGrid上に
すいません。原因はパスを勘違いしていました。
とりあえずサンプルで教えていただいたソースはできました。
ところで読み込みのときVB側でRowに対して連番Colに対して名称をつけることは可能なのでしょうか?

投稿時間:2003/01/20(Mon) 23:56
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7: エクセルデータを・・・
> ところで読み込みのときVB側でRowに対して連番Colに対して名称をつけることは可能なのでしょうか?

固定型の列及び行に書きたいという事でしょうか?
それなら VBから直接MSFlexGridに書きこんだらどうですか(読込んでから)
項目の方はExcelの最初の行に書いておけばOKです。

    Dim lngCount As Long
    With MSFlexGrid1
        .Col = 0
        For lngCount = 1 To .Rows - 1
            .Row = lngCount
            .Text = lngCount
        Next lngCount
    End With

投稿時間:2003/01/21(Tue) 00:24
投稿者名:まさと
Eメール:a_mst@mail.goo.ne.jp
URL :
タイトル:
Re^8: エクセルデータを・・
2000行ぐらいサンプル作って読んでみたのですが、列が6列でも結構時間かかりますね。
列は先頭空けてくれるのに、行は先頭空けてくれないのですね。なんかアンニュイですね。

ここでまた質問ですがエクセルのファイルの中に複数のシート(名前は?のとき)がある場合ファイル名を指定して次にシート名を一覧等で表示さすことは可能ですか?要はエクセルファイル内のシート名称を得たいのです。

投稿時間:2003/01/21(Tue) 00:39
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re エクセルデータを・・
> 2000行ぐらいサンプル作って読んでみたのですが、列が6列でも結構時間かかりますね。

3000行×9列 で MSFlexGridを表示状態で 約4秒 非表示で約1秒位です。
Win98 SE 127MB Celeron 455Mz? CSVファイルを読込んでいるより数段早いですね
非表示で開けばExcelで読込んでいるより早いですよ  

> 列は先頭空けてくれるのに、行は先頭空けてくれないのですね。なんかアンニュイですね。

サンプルにも書いていたのですが

    'ファイルをオープン(HDR=NO で項目を読込まない)
    Set DB = OpenDatabase(FileName, False, False, "Excel 8.0;HDR=NO;")

で試して見ましたか?


> ここでまた質問ですがエクセルのファイルの中に複数のシート(名前は?のとき)がある場合ファイル名を指定して次にシート名を一覧等で表示さすことは可能ですか?要はエクセルファイル内のシート名称を得たいのです。

ここのExcel&Word関係の過去のログにも回答がありますよ。
    'エクセルのシート名の取得
    For i = 1 To xlApp.Worksheets.Count
        Debug.Print xlApp.Worksheets(i).Name
    Next i

サンプルの下記の部分変更願います。

    'MSFlexGridと連結
    Set Data1.Recordset = RS
    Data1.Refresh
    RS.Close
    DB.Close
    Set RS = Nothing
    Set DB = Nothing
End Sub

投稿時間:2003/01/21(Tue) 23:49
投稿者名:まさと
Eメール:a_mst@mail.goo.ne.jp
URL :
タイトル:
Re: Re オブジェクト
たびたびすいません。
何回トライしてみてもオブジェクトが必要ですと出てしまいます。
今使用しているパソコンにヘルプ入れていないのでとても困っております。

投稿時間:2003/01/22(Wed) 09:48
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re:^11 エラー(オブジェクトが必要です)
どのように書かれていて、どこで、どのようなエラーが出るのか正確に教えて
頂かないと適切な回答が出来ません。
又、VBからExcelの起動はできるのでしょうか?
シート名を取得するにはExcelを起動して下記サンプルプログラムで取得します。
ここのExcel & Word 関係はご覧になったのでしょうか?

>     'エクセルのシート名の取得
>     For i = 1 To xlApp.Worksheets.Count
>         Debug.Print xlApp.Worksheets(i).Name
>     Next i

この部分だけでは勿論エラーがでますよ

投稿時間:2003/01/22(Wed) 11:27
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^2:^11できました
何度かトライしてできるようにはなったのですが、タスクマネージャで見てみるとどうしてもExcelがメモリに残ってしまいます。
現状はxlApp.Quitを入れてはいるのですが・・・。

投稿時間:2003/01/22(Wed) 11:42
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^3:^11いきなり自己レスです
いきなりですが解決できました。
原因は
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
の並び順でした。

現状はエクセルのファイル名称とシート名の両方を検索掛けてファイルオープンできるようになりました。
ありがとうございました。

投稿時間:2003/01/22(Wed) 11:49
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^4:^11やっぱりだめでした。
すいません。解決できたと思っていたのですが、またメモリにExcelが残ってしまいます。
なぜでしょうか?

投稿時間:2003/01/22(Wed) 11:55
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5:^11やっぱりだめでした。
> すいません。解決できたと思っていたのですが、またメモリにExcelが残ってしまいます。
> なぜでしょうか?

コードを投稿して下さい。
それとExcelのバージョンや参照設定の状態等も

投稿時間:2003/01/22(Wed) 12:01
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^6:^11やっぱりだめでした。
何度も申し訳ないです。
よろしくお願いします。
Private Sub Command1_Click()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    
    CommonDialog1.ShowOpen
    intFileName = CommonDialog1.FileName
    Text1.Text = intFileName
    
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlBook = xlApp.Workbooks.Open(intFileName)
    
    For i = 1 To xlApp.Worksheets.Count
        Combo1.AddItem xlApp.Worksheets(i).Name
    Next i
    
    xlApp.Quit
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
    
End Sub

投稿時間:2003/01/22(Wed) 13:29
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^7:^11やっぱりだめでした(追加)
そのコードでも、私の環境では残っておりませんが?
下記を一度試して下さい。

Option Explicit

Private Sub Command1_Click()
'On Error Resume Next
    Dim xlApp       As Excel.Application
    Dim xlBook      As Excel.Workbook
    Dim strFileName As String
    Dim i           As Long
    
    CommonDialog1.ShowOpen
    strFileName = CommonDialog1.FileName
    If Len(Trim$(strFileName)) = 0 Then Exit Sub
    Text1.Text = strFileName
    Combo1.Visible = False
    DoEvents
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open(strFileName)
    For i = 1 To xlBook.Worksheets.Count
        Combo1.AddItem xlBook.Worksheets(i).Name
    Next i
    xlBook.Close
    xlApp.Quit
    Set xlBook = Nothing
    Set xlApp = Nothing
    Combo1.Visible = True
End Sub

投稿時間:2003/01/22(Wed) 14:42
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^8:^11試してみました
sourceを丸々コピーして試してみましたが、やはりメモリーから開放されませんでした。
なぜなのでしょうか?
ちなみにOSはW2K SP3、VBは6.0です。

投稿時間:2003/01/22(Wed) 14:51
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^9:^11試してみました
Excelのバージョンと参照設定はなににチェックが入っていますか?
残っているのは途中でエラーが発生した時とかじゃないですか?
残っているExcelはその都度終了させていますか?

プロシージャ内でコード以外の処理はしていませんか?
下記の部分をコメントアウトしても残りますか?

    For i = 1 To xlBook.Worksheets.Count
        Combo1.AddItem xlBook.Worksheets(i).Name
    Next i

投稿時間:2003/01/22(Wed) 15:18
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^10:^11試してみました
excelは2000です。
設定はDAO3.6とEXCEL9.0liblaryはチェックしています。
しらべたのですが、残っているのはコモンダイアログでファイル名を指定したら起動されるexcelです。
キャンセルトウでは残りません。
またタスクで毎回調べて都度終了もさています。
当然のことですが、
Set xlApp = CreateObject("Excel.Application")
で立ち上がったexcelが残っています。

投稿時間:2003/01/22(Wed) 15:56
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^10:^11試してみました
googleで検索して次の記述を見つけました
http://ws.31rsm.ne.jp/~pension/access/ota2002/7165.htm
ちょっと読んでみてください。

投稿時間:2003/01/22(Wed) 16:09
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^11:^11試してみました
> googleで検索して次の記述を見つけました
> http://ws.31rsm.ne.jp/~pension/access/ota2002/7165.htm
> ちょっと読んでみてください。

Excelが落ちないで困っているのは私じゃないのですよ!
貴方が正確な情報を掲示しないといつまでも解決しませんよ!
こちらの質問にも正確に答えて下さい。

投稿時間:2003/01/22(Wed) 16:24
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^12:^11試してみました
すいません。
症状はExcel自体は画面上からは解放されてはいるのですが、タスクマネージャで確認するとEXCELEXEが残っています。
さっきのHPなんかを読んでいると残ると言うような意味合いでかかれているのですが、もしそのときvb上から強制的にExcelを解放できるのでしょうか?

投稿時間:2003/01/22(Wed) 11:52
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4:^11いきなり自己レスです
シート名の取得はExcelを操作(起動)しなくても出来るようです。
下記を試して見て下さい。

Private Sub Command3_Click()
    Dim DB          As Database
    Dim xlFileName  As String
    Dim Tbl         As TableDef
    Text1.Text = ""
    xlFileName = App.Path & "\Sample.xls"
    Set DB = OpenDatabase(xlFileName, False, False, "Excel 8.0;HDR=NO;")
    For Each Tbl In DB.TableDefs
        If Tbl.Attributes And dbSystemObject Then
        Else
            Text1.Text = Text1.Text & Tbl.Name & vbCrLf
        End If
    Next Tbl
    DB.Close
    Set DB = Nothing
End Sub

投稿時間:2003/01/22(Wed) 15:37
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 続エクセルが残る
新規プロジェクトで下記のサンプルだけを試して下さい。
問題なければコメントを解除して確認して下さい。

Private Sub Command1_Click()
    Dim xlApp       As Excel.Application
    Dim xlBook      As Excel.Workbook
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open("てすと用ファイル名 フルパスで")
    
'    For i = 1 To xlBook.Worksheets.Count
'        Combo1.AddItem xlBook.Worksheets(i).Name
'    Next i
    
    xlBook.Close
    xlApp.Quit
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

それでだめなら他の機種で試して見る
Excelを入れ替える

投稿時間:2003/01/22(Wed) 15:59
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: 続エクセルが残る(これでは)
No.2215 の方と同様Excelのファイルに問題があるかも知れません
一度違うファイル(新規に作成したファイルとか)で試して見て下さい

投稿時間:2003/01/22(Wed) 16:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^13:^11試してみました
残る事が問題なので、その問題点を探しているのと違うのですか?
No.2313 や No.2315 の結果はどうだったのでしょうか?

投稿時間:2003/01/22(Wed) 17:10
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^14:^11見落としてました
すいませんツリーの位置が変わっていたので見落としていました。
現状開こうとしているファイルを新しいシートで保存したら成功しました。

投稿時間:2003/01/22(Wed) 18:32
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^15:^11もとのデータのままで正常に動かすには
現状では元のExcelデータを一度コピーして新しいシートに貼り付けなければならないのですが、元データをそのまま読み込もうとするにはどのようにすればよいのでしょうか?
それとも強制的にExcelを解放さす方法はあるのでしょうか?

投稿時間:2003/01/22(Wed) 21:01
投稿者名:まさと
Eメール:
URL :
タイトル:
Re^16:^11ツリーが大きくなりましたので
たびたびすいません。
ツリーが大きくなりすぎたので別のスレッドを立てさせていただきます。