• ベストアンサー

Excelの表示について

DBからデータをcsvに落とし、それをExcel表示させたいのですが、 Excel出力後、すぐに起動しようとすると、Excel自体は起動するのですが、 データが表示されません。 アプリケーション終了後にExcelを起動すれば問題なく開けます。 Excelまたはcsvの後処理の仕方が悪いのでしょうか? どなたかわかる人がいましたら教えてください。 'csvからExcelへ出力する処理が入る mxlBook.Save '変更を保存 mxlBook.Close mxlApp.Quit 'Excelから抜ける Set mxlBook = Nothing Set mxlApp = Nothing 'CSVファイルの読込み Set tsText = fsoFSO.OpenTextFile(strFileName, ForReading, False) varData = tsText.ReadAll 'DBへの格納 deTest.cnTest.BeginTrans strSQL = "SELECT * FROM CSV1" Set rsRS = New ADODB.Recordset rsRS.Open strSQL, deTest.cnTest, adOpenStatic, adLockPessimistic With rsRS .AddNew 'アップデートの処理が入る .Update End With rsRS.Close deTest.cnTest.CommitTrans tsText.Close 'CSVファイルをクライアントマシンから削除 fsoFSO.DeleteFile strFileName Set fsoFSO = Nothing Set rsRS = Nothing

質問者が選んだベストアンサー

  • ベストアンサー
  • maro200
  • ベストアンサー率45% (15/33)
回答No.2

同じ現象が起こったことがあります。 その時は、シートの設定などで、 Applicationのプロバティを参照したのが原因でした。 ちょっとわかりずらいかもしれないですが。。。 具体的に、シートのページ設定で マージンを設定するところで シート.PageSetup.LeftMargin = Application.CentimetersToPoints * 10 と書くとダメだったので Application.CentimetersToPoints を使わずに数値にしました。

mashiro78
質問者

お礼

貴重な体験談ありがとうございました。 私の場合は、Excelに出力するときに 例外のデータを行ごと削除していたのが 原因だったようで、それを直したらうまくいきました。 VBA、今回初めて扱ったのですが仕様が把握しきれていないようです。。

その他の回答 (1)

  • ninja972
  • ベストアンサー率0% (0/2)
回答No.1

回答にならないのかもしれませんが、 処理方法を大きく変えて一度CSVを削除すのは 後回しにして1件1件読みながら表示させ、 表示を確認してみたらどうでしょうか?

mashiro78
質問者

お礼

処理を細かく分け、デバックを繰り返していたら、 原因がわかりました。ありがとうございました。

関連するQ&A

  • ACCESSでExcelにデータ出力、高速化

    ACCESSのVBAを使ってテーブルのデータを 既存ブックに出力し、別名で保存をしたいのですが、 どうも、処理が遅くて困っています。 改善点がありましたら教えてくださいお願いいたします。 Dim objExcel As Excel.Application Dim xlWrkbk As Excel.Workbook Dim xlWrksh As Excel.Worksheet Dim rs As DAO.Recordset Dim strFilename As String strFilename = CurrentProject.Path & "既存ブック名.XLS" Set objExcel = New Excel.Application Set xlWrkbk = objExcel.Workbooks.Open(Filename:=strFilename, ReadOnly:=True) Set xlWrksh = xlWrkbk.Worksheets("シート名") Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot) With objExcel xlWrksh.Range("A:N").Clear xlWrksh.Range("A2").CopyFromRecordset rs xlWrkbk.SaveAs Filename:=CurrentProject.Path & "新しいブック名.xls" xlWrkbk.Close .Quit rs.Close End With Set rs = Nothing Set objExcel = Nothing Set xlWrkbk = Nothing Set xlWrksh = Nothing

  • 【Access2003】VBAでタブ区切りテキストファイル読込

    はじめまして。 【Access2003】を使用し、タブ区切りのテキストファイル読込をVBAで行っています。 カンマ区切りはわかるのですが、タブ区切りの方法がわからないので教えていただけませんか? TransferTextを使用したかったのですが、読み込んだデータ1件1件に対して必須と桁数確認を行い、エラーがあった場合はテキストファイルにそのデータ1行を書き込み、エラーがない場合は1行テーブルに書き込みというように処理を分けたいからなのです。 とりあえず今のところカンマ区切りのCSVファイルを読み込むというようにしており、読み込む前にタブ区切りテキストファイルをカンマ区切りCSVファイルに変換する処理を入れようと思っています。 しかしタブ区切りテキストファイルをそのまま読むことができれば一番いいのですが。 ソースは以下の通りです。 '出力元CSVファイルを開く lngFileNum = FreeFile() 'データ読込 Open strJsnFol & "\\" & strIriInf For Input As #lngFileNum 'CSVファイルの最初の行を読み込む 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) 'データ種別のチェック If varData(0) <> "XXX" Then MsgBox "ファイルエラーです。", vbInformation + vbOKOnly intErrFlg = 1 Exit Sub End If 'タイムスタンプチェック strSQL = " SELECT CREATE_TIME FROM TB WHERE    CREATE_TIME = '" & varData(1) & "'" 'SQLを実行 If DBAC.ExecSelect(strSQL) = 0 Then '同じ処理時間のデータがなければ、タイムスタンプを取得 strCreateTime = varData(1) Else MsgBox "すでに処理済です。", vbInformation + vbOKOnly intErrFlg = 1 Exit Sub End If 'テーブルを開く Set dbs = CurrentDb Set rst = dbs.OpenRecordset("IF_TB") 'CSVファイルの全レコードを読み込むループ Do Until EOF(lngFileNum) 'CSVファイルより1件分を読み込み Line Input #lngFileNum, strData 'カンマで区切って配列に代入 varData = Split(strData, ",", , vbTextCompare) 'データチェック If varData(0) = "" Or Len(varData(0)) > 12 Then intChkErr = 1 End If If varData(1) = "" Or Len(varData(1)) > 12 Then intChkErr = 1 End If If Len(varData(2)) > 1 Then intChkErr = 1 End If 'エラーがあればエラーファイルに書き込み If intChkErr <> 0 Then strFileName = strJsnFol & "\\" & "ERR.csv" lngFileNum2 = FreeFile() Open strFileName For Append As #lngFileNum2 End If Print #lngFileNum2, "ERR1," & strData Close #lngFileNum2 Else '各フィールドデータをテーブルに追加 With rst .AddNew !K_NO = varData(0) !S_NO = varData(1) !CD = varData(2) !CREATE_TIME = strCreateTime .Update End With End If intChkErr = 0 Loop rst.Close Close #lngFileNum Exit Sub 何かいい方法があれば教えていただけませんか? よろしくお願いいたします。

  • ADOでアクセスからエクセルシートの件数を取得した

    ADOでアクセスからエクセルシートの件数を取得したいのですが、うまく行きません。 アクセスの標準モジュールに Sub ADO_TEST1() Const StrFileName = "D:\My Documents\検索.xls" Dim dbCon As ADODB.Connection Dim dbRes As ADODB.Recordset Dim i As Long Dim strSQL As String ' Connection生成 Set dbCon = New ADODB.Connection With dbCon .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Extended Properties") = "Excel 8.0" .Open StrFileName End With ' SQL文作成 strSQL = "SELECT * FROM [Access接続用$];" Set dbRes = New ADODB.Recordset dbRes.Open strSQL, dbCon, adOpenDynamic, adLockOptimistic, adCmdText i = dbRes.RecordCount MsgBox "エクセルのAccess接続用シートの最終行は、" & i & "行です。" dbRes.Close: Set dbRes = Nothing dbCon.Close: Set dbCon = Nothing End Sub ************************************************************* を貼り付けて実行すると、エラーにはならないのですが-1が返ってきます。 実際の行は、200行あります。 ここで、エクセルの最終行を取得して、いづれエクセルのデータをアクセスのテーブルに転記したいのですが まずここで躓いてしまったので、 ・dbRes.RecordCountで、-1が返ってくる原因 ・エクセルの該当のシートの最終行の取得の仕方 をご教授ください。 ご回答よろしくお願いします。

  • CSV形式で出力後、開くときの警告メッセージについ

    いつもお世話になっております。 ACCESSからデータをCSV形式で出力後、ファイルを開くときに添付のような警告メッセージが表示されます。[はい]をクリックすればファイルは開くことができるのですが、警告メッセージが表示されないようにするにはどうしたらいいでしょうか? xlsxのテンプレートを開き、そこにデータを書き出して、csvで保存するようになっています。csv形式で出力したことがないので、csvのFormatを指定する必要があると思っていますが、どうしたらいいでしょうか? ご教授お願いいたします。 Private Sub CMD_Expo_DblClick(Cancel As Integer) On Error GoTo Err_FileDialog_Click Dim strsql As String Dim strTemplate As String Dim strFileName As String Dim ExpFileName As String Dim xlapp As Object Dim xlWB As Object Dim myCn As New ADODB.Connection Dim myRs As New ADODB.Recordset 'ファイル名作成 ExpFileName = "SNDFILE" & Format(Date, "yyyymmdd") strFileName = GetFileName(False, "", "", ExpFileName & ".csv") 'EXCELアプリケーションを起動 Set xlapp = CreateObject("Excel.Application") 'セットする過程が見えないよう一旦不可視 xlapp.Visible = False Set myCn = CurrentProject.Connection strsql = "Q_BOFAXExpo_MJ" 'レコードセットオープン myRs.Open strsql, myCn, adOpenForwardOnly, adLockReadOnly With xlapp 'テンプレートを開く strTemplate = Application.CurrentProject.Path & "\" & "SNDFILE.xlsx" Set xlWB = .Workbooks.Open(strTemplate) 'テンプレートファイルが存在しないときはエラー If Dir(strTemplate) = "" Then MsgBox "テンプレートファイルを確認してください。", vbOKOnly + vbCritical, "エラー" .Visible = True .Quit Exit Sub End If 'テンプレートファイルオープン .Workbooks.Open strTemplate '結果値出力処理(1行目にヘッダーを表示しているので、2行目1列目からセット xlWB.Worksheets("Sheet1").Cells(1, 1).CopyFromRecordset myRs '完了したら保存 If Len(strFileName) = 0 Then xlWB.Close SaveChanges:=False xlapp.Quit MsgBox "処理を中止します。", vbOKOnly + vbInformation Exit Sub Else xlWB.SaveAs FileName:=strFileName End If MsgBox "BOFAX用のファイルの出力が完了しました。", vbOKOnly + vbInformation End With Set myRs = Nothing: Close Set myCn = Nothing: Close 'Excelを終了します xlapp.Quit Exit Sub Exit_FileDialog_Click: Exit Sub Err_FileDialog_Click: MsgBox "予期せぬエラーが発生しました" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End Resume Exit_FileDialog_Click End Sub

  • エクセルVBAでcommit,rollback

    エクセルVBAでcommit,rollback 初めて質問させていただきます。 エクセルVBAを一人で学習しています。 仕事で使ったことも、教えてもらったこともほとんどありませんのでほぼ初心者です。 今、エクセルファイルを二つ使って、一つをデータベースに、もう一つでそのデータベースを 利用するようなプログラムを書いています。 それで、2つの関連するテーブル(シート)を同時に変更(update)する必要があるのですが、 何らかのエラーが起きてしまったときのことを考えて、トランザクションを利用 出来たらと思っています。 いろいろググってアクセス用のコードを見つけたので、それを元に下のようなプログラムを 書いて試してみたのですが、ロールバックが効かずに更新されてしまいます。 '******** 定数 *********** Const cnsProvider = "Microsoft.Jet.OLEDB.4.0" Const cnsExtProp = "Extended Properties" Const cnsExcel = "Excel 8.0" Const cnsDBName = "SAMPLE_DB.xls" Const cnsYen = "\" '******** プログラム *********** Sub ADO_update_test() Dim dbCon As ADODB.Connection Dim strSQL As String ' -- Connection生成 -- Set dbCon = New ADODB.Connection With dbCon .Provider = cnsProvider .Properties(cnsExtProp) = cnsExcel .Open ThisWorkbook.Path & cnsYen & cnsDBName End With ' -- トランザクション開始 -- dbCon.BeginTrans ' -- sql作成 -- strSQL = "update [Sheet1$] set 金額 = 300 where ID = '001';" ' -- sqlを流す -- dbCon.Execute (strSQL) ' -- rollback -- dbCon.RollbackTrans ' -- クローズ・コネクション解放 -- dbCon.Close: Set dbCon = Nothing End Sub 1、まずこの様なことが可能なのかどうか 2、出来るとしたらどのようにすればいいのか(間違っている点を指摘してください) 以上の2点についてお答えをいただけるとありがたいです。 よろしくお願いいたします。

  • だれかぁぁぁぁぁぁぁぁ(-o-)

    質問ですっ!! 今VBを使ってシステムを作っているのですが、下の式を実行しても、Insert Intoのエラーがでてしまい、Accessのデータベースに追加する事が出来ません。 モジュール名は間違っていません! なぜ違うか分かる人がいましたら、助けてくださ~い 8(^0^)8 あっ!!ワークスペースやデータベースはちゃんと 一番最初の段階で、セットしてあります。 このフォームのどこかがおかしいと思うんですが・・・ Private Sub cmd_Input_Click() Set ws = DBEngine.Workspaces(0) Set db = ws.OpenDatabase(lcstrDatebase) strSQL = "" strSQL = strSQL & " Insert Into rireki_tb " strSQL = strSQL & " ( Hiduke" strSQL = strSQL & " ( SyainCd" strSQL = strSQL & " ,TenpoCd" strSQL = strSQL & " ,SyohinCd" strSQL = strSQL & " ,SyainNm" strSQL = strSQL & " ,Nyukin" strSQL = strSQL & " )" strSQL = strSQL & " values ('" & lbl_Date.Caption & "'" strSQL = strSQL & " values ('" & cmb_SyainCd8.Text & "'" strSQL = strSQL & " ,'" & 0 & "'" strSQL = strSQL & " ,'" & 0 & "'" strSQL = strSQL & " ,'" & lbl_SyainNm8.Caption & "'" strSQL = strSQL & " ," & txt_Nyukin8.Text & ")" db.Execute strSQL db.Close ws.Close Set db = Nothing Set ws = Nothing End Sub

  • DAOでのコードをADOへ書き直し

    Access2003、WinXPです。 レコードセットの取得関係をDAOで書いていたのですが ADOに途中から変更しました。 変数宣言を Public db As DAO.Database ⇒Public cn As ADODB.Connection Public rs As DAO.Recordset ⇒Public rs As ADODB.Recordset Public Fld As DAO.field  ⇒Public Fld As ADODB.field レコードセット取得を Set db = CurrentDb      Set rs = db.OpenRecordset(strSQL) ↓ Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn レコードセット クローズを Set rs = Nothing Set db = Nothing ↓ rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing としました。今のところ動いているようですが、 何か勘違い、気をつけないといけない事等ありますでしょうか・・・?

  • 【エクセルVBA】DBのデータをCSVに

    VBA初級者です。 oracleDBのデータをCSVへ出力するマクロをVBAで作成中ですが、実装方法が分からず困っています。 ・DB接続はoo4o ・エクセルは2010 ・SQLで取得したデータを1レコードづつCSVに書き出したい ・カラム名をヘッダーとして書き出したい 以下のような実現方法でできるか…?と考えたものの、 肝心のマクロ(VBA)でのDBデータの取得⇒CSVへの書き込み方法がいくら調べてもわかりません。 CSVからDBへのインポートはたくさんあったのですが…。 そもそも取得したレコードを配列で保持して書き出す、という考え方が合っているのか?ヘッダー(カラム名)はどのように書き出せばいいか? など疑問が尽きません。何卒お力添え頂ければ幸いです。 --ボタンクリック時のアクション-- (1)変数定義 (2)DB接続情報確認 (3)DB接続 'DB接続 Set oraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDatabase = oraSession.OpenDatabase(dbSid, dbUser & "/" & dbPass, ORADB_DEFAULT) (4)書き込み用のCSVファイルを作る (5)SQLを実行し返ってきた結果をsplit関数で配列としてwriteListにAddする (5)作成したCSVファイル内にwriteListのデータをPrint #で書き出す (6)完了メッセージを表示 MsgBox "完了しました " (7)DBの切断 'DBクローズ Set oraDatabase = Nothing Set oraSession = Nothing --SQLを実行するメソッド-- (8)SQLを記述、SELECT結果を(5)に返す 恐れ入りますがよろしくお願いいたします。

  • DBから取得したオブジェクトの受け渡し方法

    はじめましてVB初心者でわけが分からなくなっています。DBをクローズした後に取得したレコードセットを他の関数に渡すにはどうしたらよいでしょうか?おそらく、そんなのcloseせずにやればいいと思うかもしれませんが、可能かどうかがわかりません。どうか教えてくださいよろしくお願い致します。 下記のコードにて行ってます。Set rs = cn.Execute(strSQL)で取得しています。rsをDBを閉じた後も他の関数に渡せるようにしたい訳です。m(..)m Dim cn As Object Dim rs As Object Private Sub getData() Dim strSQL As String Set cn = CreateObject("ADODB.Connection") cn.Open "省略" strSQL = "SELECT * FROM swan" Set rs = cn.Execute(strSQL) Set rs = nothing Set cn.close Set cn = nothing End Sub

  • Excel出力後のExcelの起動について

    Vb側からデータをExcelに出力し、その画面を表示させたまま 出力したExcelを確認しようと思ったところ、Excelは起動するものの シートが表示されない現象が起こりました。 出力後のExcelの終了(解放?)のロジックは下記の通りです。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets.Add … … Sheetへの出力処理 … … Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing この現象の回避方法がありましたらご教授ください。 Windows2000 Vb6.0 SP5 Excel2000

専門家に質問してみよう