• ベストアンサー

Excel ファイルに保存すると実行時エラーになる

こんにちは。宮本と申します。VB6(SP5)で、 プログラミングをしております。 下記の様にプログラミングをしましたが、どうしても [実行時エラー’1004’ test_1.xlsにアクセスできません]と、なります。 c:\test.xls は、元々ある事を前提とし、c:\test_1.xlsに上書きをしたいのです。 宜しくお願い致します。 Dim wApp As Excel.Application Dim wExl As Object Set wApp = CreateObject("Excel.Application") Set wApp = CreateObject("Excel.Application") Set wExl = wApp.Workbooks.Open("c:\test.xls") wExl.Worksheets(1).Cells(1, 1).Value = 3000 wExl.Application.Visible = False wExl.Application.DisplayAlerts = False wExl.SaveAs "c:\test_1.xls" <---ここで、エラー

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

  • ベストアンサー
  • wan-chan
  • ベストアンサー率13% (169/1255)
回答No.6

Set wApp = Nothing wExl.Close True 最後に追加すればOKだと思います。

m-toshi
質問者

お礼

解決いたしました。ありがとうございました。

その他の回答 (6)

  • you111111
  • ベストアンサー率45% (20/44)
回答No.7

wExl.Closeの追加で解決ですね・・・ ちなみにCloseの前に.DisplayAlertsはTrueに戻した方がよいでしょう。 #4さんの回答について補足というかなんと言うか・・・ Sava  → 上書き保存 SaveAs → 名前をつけて保存(上書き可) です。

m-toshi
質問者

お礼

解決いたしました。ありがとうございます。 Save & SaveAs の 件も、勉強になりました。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.5

1回目にキッチリ終わっていないので、2回目にエラーになるのでは? CloseやSet Nothingをしてますか?

参考URL:
http://oshiete1.goo.ne.jp/goo_search.php3?dummy=%A5%E1%A1%BC%A5%EB&MT=&TAB=&kw=Excel.Application+%BD%AA%CE%BB&c=0
m-toshi
質問者

お礼

していませんでした。これが原因の様です。 ありがとうございました。

回答No.4

こんにちは、ats8181oyajiです ごめんなさい。説明が足りませんでした 引数が違うエラーはSaveでファイル名を書くと 出ます。Saveは今開いているファイルを上書き 保存する場合に使います。 今回の場合は test_1.xlsについては新規に一回だけ作成するのですか? ならば、テストで一回目はSaveAsで正常にできますが (当方テスト済み)二回目はエラーになります。 ようするに、正しい処理です。 しかし、何度も同じtest_1.xlsに書き込みが発生する のでしたら、上記のことを考慮する必要があります。 いつでも書き換えるのであれば 1.test_1.xlsの存在チェックで、あればkillで削除 2.SaveAsで新規名前付け保存 で可能かと思います。

m-toshi
質問者

お礼

何度も、ありがとうございました。

回答No.3

こんにちは、ats8181oyajiです SaveASとSaveの違いなのでは? SaveASは初回のみ、すでに存在するときはエラーです 二回目以後はSaveを使います。

m-toshi
質問者

補足

ご回答をありがとうございます。 >SaveASとSaveの違いなのでは? 書き換えてみました。が、今度は、 [実行時エラー'450' 引数の数が一致していません。 または、不正なプロパティを指定しています。] と、なってしまいました。(;_;) 原因は、No.1さんのおっしゃる様に他に原因が あるような気がしてきました。

  • wan-chan
  • ベストアンサー率13% (169/1255)
回答No.2

実行したところ1回目は上手く行きました。 (test.xlsのみ用意し、実行しました。) No.1さんもおっしゃるように、 test_1.xlsが使用中であることが原因のようです。

m-toshi
質問者

お礼

ご回答をありがとうございました。

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

VBがないのでWSHのVBScriptで試したところ、 c:\test_1.xlsが別のエクセルで開かれていることが原因のようです。 Application.VisibleをTrueにしてみて確認してください。 または、Ctrl+Alt+Delのプログラムの強制終了画面でExcelというプログラムが動いていればそれを終了すればいいかも。

m-toshi
質問者

補足

ご回答をありがとうございました。 >Application.VisibleをTrueにしてみて確認 確認しました。c:\test.xls は、読み取り専用で開かれていました。が・・・それ、以外はありません。(;_;)

関連するQ&A

  • Excel.Applicationへのシートコピー

    Public xlApp As Excel.Application Public xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") '非表示・画面更新無・アラート非表示 xlApp.Visible = False xlApp.ScreenUpdating = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Add xlBook.SaveAs "test123.xls" '※ここでエラー Workbooks("TEST.xls").Sheets("TEST_1").Copy After:=xlApp.Workbooks(xlBook).Sheets(3) Set xlApp = Nothing Set xlBook = Nothing 環境:WindowXP SP2,Excel2003 SP3 以上のようにオブジェクト変数のEXCELに対してのシートコピーを行いたいのですが、コンパイルを行うとエラーがなく、実行すると「コンパイルエラー 修正候補:区切り記号 または(」とエラーが発生します。色々書き方を試してみたのですが、どれもうまくいきませんでした。 宜しくお願いします。

  • excelのデータをvbにとりこむ

    excelのあるセルのデータを取り込みたいのですが、 どうすればよいでしょうか? C:\123.xlsというファイルのsheet1の (2,4)というセルにある実数型のデータを 出力するという、意図です。 Private Sub Setting_Click() Dim xls As Object Dim xlsFilename As String Dim xlsSheetname As String xlsFilename = "C:\123.xls" xlsSheetname = "Sheet1" Set xls = CreateObject("Excel.Application") xls.Application.Visible = False xls.Application.Workbooks.Open xlsFilename Dim r1 As Double r1 = xls.Application.Workbooks.cells(2, 4).Value Print r1 end sub

  • VB2008 エクセル出力

    VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています

  • Excel VBAで確認なしで上書き保存

    起動中のBookでファイル名が Data.xlsのものを閉じたいと思いますが、 上書き確認メッセージを出さないように oExcel.DisplayAlerts = False を設定すると エラーになります。 CreateObject で作成した場合は、DisplayAlerts が使えるようですが、 すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい のでしょうか? Sub UnloadFile()   Dim myBook2 As Workbook   Dim myBook1 As Workbook    For Each myBook2 In Workbooks      If myBook2.Name = "Data.xls" Then        Set myBook1 = myBook2        myBook1.SaveAs myBook1.FullName        myBook1.Close      End If    Next myBook2    Set myBook1 = Nothing End Sub

  • 開いているXLSファイルが読み取り専用か調べる

    Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\test.xls") Set xlSheet = xlBook.Worksheets(1) 開いたExcelファイルが読み取り専用になっているかどうかを調べるにはどうすればいいですか? ファイルの属性が読み取り専用かどうかは取得できるのですが、属性は読み取り専用ではなくても誰か他のユーザーがネットワークから開いているために読み取り専用で開いている場合もわかるようにしたいです。 お願いします。

  • 【VB】【エクセル操作】 SaveAsでエラーが出てしまいます。

    VB6.0で作成したソフトの一部でエクセルを操作する箇所があります。 『新しいブックを作成して名前を付けて保存する』ところでエラーが出てしまいます。 Excel2007,2003では正常に動作するのですが、2000ではエラーが発生し強制終了されてしまいます。 '//////////////////////////////////////////////////////////// Private Sub EditExcelFile(FileName As String) Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlApp.Visible = True With xlBook .Application.DisplayAlerts = False .SaveAs (FileName) .Application.DisplayAlerts = True End With Set xlBook = Nothing Set xlApp = Nothing End Function '//////////////////////////////////////////////////////////// 上記コードの .SaveAs (FileName)の箇所でエラーがでます。 .SaveAs (FileName)をコメント文にすると2000でも正常に動作します。 FileNameは新しいブック名のパスが入ります。 2000でも正常に動作させるにはどのような処理を加えれば良いでしょうか? 宜しくお願い致します。

  • Excel VBA で 保存

    VBAマクロで 終了ボタンを押した時に あるシートを削除をし TEST2 と言う名前で保存したいのですが 保存したシートを開こうとすると強制終了してしまいます。どなたか詳しい方ロジックを見ていただけませんか?よろしくお願いします。 ちなみに Excel2000 です。 以下ロジック Dim fs As Object Dim w As Object strWK_SaveBmnFile = "c:\TEST2.xls" '' ------------------------------ '' strWK_SaveBmnFile ファイルの存在チェック '' ------------------------------ Set fs = CreateObject("Scripting.FileSystemObject") If fs.FileExists(strWK_SaveBmnFile) Then Kill strWK_SaveBmnFile End If Set fs = Nothing Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=strWK_SaveBmnFile, _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("TEST2.xls").Activate Worksheets("DATA1").Select ActiveWindow.SelectedSheets.Delete Worksheets("DATA2").Select ActiveWindow.SelectedSheets.Delete ActiveWorkbook.Save Application.Quit

  • エクセルファイルが既に開いてるのなら開かない

    エクセルファイルが既に開いてるのなら開かない としたいです Sub test() Dim app As Excel.Application Dim book As Excel.Workbook app = CreateObject("Excel.Application") If app.ReadOnly Then MsgBox("既に開いています") End If End Sub このようにやろうと思ったけど、 これじゃファイル名をしてしてないから無意味ですよね しかも上記のコードを実行したら --------------------------------------------------------- 型 'System.MissingMemberException' のハンドルされていない例外が Microsoft.VisualBasic.dll で発生しました 追加情報: 公開メンバー 'ReadOnly' は型 'ApplicationClass' に見つかりませんでした。 --------------------------------------------------------- というエラーが発生しました。 Sub test() Dim app As Excel.Application Dim book As Excel.Workbook app = CreateObject("Excel.Application") app.Visible = True book = app.Workbooks.Open("C:\Users\test.xlsm") End Sub このようにして、エクセルファイルを開くコードは分かるのですが、 このコードに、「既に開いているのなら開かない」という処理を付け加えたいです。 よろしくお願いします。

  • エクセルVBAでPDF/実行時エラー

    以下はネットで検索して見つけたPDFのプリント用VBAですがやってみるとSet acroApp = CreateObject("AcroExch.APP")のところで実行時エラー「インターフェイスがサポートされていません」になります。 Adibe Acrobat 10.0 Type Liblaryも参照設定しました。 Windows11でエクセルは2019です。Acrobat Readerも入っています。 どうすればいいのでしょう? https://ziomatrix18.blog.fc2.com/blog-entry-406.html Sub test01() Dim ret As Integer Dim filePath As String filePath = "C:\Temp\Test.pdf" Dim acroApp As CAcroApp Dim pdDoc As CAcroPDDoc Dim avDoc As CAcroAVDoc Set acroApp = CreateObject("AcroExch.APP") Set pdDoc = CreateObject("AcroExch.PDDoc") Set avDoc = CreateObject("AcroExch.AVDoc") ret = acroApp.Show ret = avDoc.Open(filePath, "") Set pdDoc = avDoc.GetPDDoc() Dim numPage As Long numPage = pdDoc.GetNumPages ret = avDoc.PrintPages(0, numPage - 1, 2, 0, 0) ret = avDoc.Close(False) acroApp.Exit Set avDoc = Nothing Set pdDoc = Nothing Set acroApp = Nothing End Sub

  • 実行時エラー91について

    vbでエクセルにデータを入力したあと、2つのシートを選択し、 その後に両面印刷を行うプログラムを作成中ですが、 印刷の段階で 「実行時エラー91。オブジェクト変数または with ブロック変数が設定されていません。」 とのエラーがでます。 どの部分がおかしいのかわからないので教えて下さい。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlSheet2 As Excel.Worksheet Dim xlFile As String xlFile = App.Path & "表.xls" Dim MyFile As String MyFile = Dir$("表.xls") If Len(MyFile) > 1 Then Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(xlFile) Set xlSheet = xlBook.Worksheets("裏") Set xlSheet2 = xlBook.Worksheets("表") xlApp.Visible = True a1 = Label47.Caption a1 = Format(a1, "#,#") a2 = Label48.Caption m = a1 & "及び" & a2 & "とする。" For k = 1 To 18 s = Mid(m, k, 1) i = 8 + (k - 1) * 2 xlSheet.Cells(40, i).Value = s Next k Set xlSheet2 = xlBook.Worksheets("表") xlSheet2.Cells(4, 2).Value = Text11.Text xlSheet2.Cells(4, 10).Value = Text12.Text xlSheet2.Cells(4, 19).Value = Text13.Text xlBook.Sheets(Array("表", "裏")).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ←ここでエラー Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing Set xlSheet2 = Nothing

専門家に質問してみよう