VisualBasicのコーディングで既存のExcelファイルを開き、変更を加えた後同一ファイルに上書き保存したいのですが...
CreateObjectだと新規作成しか出来ないし、GetObjectで上書き保存するとExcelのページ違反が発生し強制終了されました。誰か詳しい方のアドバイスを待っています。
ついでに、保存時の上書き確認メッセージを表示しないようにする方法もわかれば教えていただきたいのですが...

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

A 回答 (1件)

参照設定で、Microsoft Excel9.0 Object Library 二チェックを付けてから、下記のようにコーディングします。



Private Sub Command1_Click()
  Dim ExcelApp As New Excel.Application
  Dim mySheet As Excel.Worksheet
  ExcelApp.Workbooks.Open "C:\Folder1\book1.xls"
  Set mySheet = ExcelApp.Workbooks(1).Worksheets("Sheet1")
  'Z1とZ2のセルに値を入力
  mySheet.Range("Z1") = 1
  mySheet.Range("Z2") = 2
  '上書き保存してから閉じる
  ExcelApp.Workbooks(1).Save
  ExcelApp.Workbooks(1).Close
  Set ExcelApp = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました、うまくいきました。
考え方が間違っていたみたいですね。
excelに対してopenで開くというのは、ヘルプにも記述があったのですがついつい考えすぎ、getobjectに固執してしまいました。
また質問することがあると思いますが、その際にはよろしくお願いします。
親切な回答をありがとうございました!(^。^)/

お礼日時:2000/12/15 16:40

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

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

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

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

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

QVisualBasic6.0からVisualBasic.NET

今までVisualBasic6.0で作っていたプログラムは、VisualBasic.NETで動かすことは可能でしょうか?

Aベストアンサー

これでわからなければ、やめておいた方がいい様です。
http://www.microsoft.com/japan/msdn/vbasic/techinfo/upgrade/

QVisualBasic6.0でCSVをExcelに変換して保存する

こんにちは

どなたか教えていただけると光栄です。
CSVをエクセルに変換するにはどうしたらよいでしょうか??
今、現在マクロを使って変換しているのですが非常に遅いです。
流れとしては
エクセル起動

マクロ

エクセル終了
です。これをマクロを呼び出さずに変換したいのですが…どうしたらよいでしょうか??

Aベストアンサー

BOX_Fileさんのしたいことと違ったらすいません。
単純にCSVのファイルをエクセル形式で書き出し保存すると受け取ったのですが。。。

ここのHPにVBからエクセルを操作するサンプルが充実してました。
VBレスキュー(花ちゃん)&八日市PCサービス
http://www.bcap.co.jp/hanafusa/VBHLP/excelmenu.htm

作業の流れとしては
・CSVファイルを開いて内容を読み込む。
 (ここで読み込んだデータの変換等もできます。)
・読み込んだデータをエクセルファイルに書き出す。
・エクセルファイルを新規作成して保存する。
でいいのだと思います。

また、VBからエクセルを操作するサンプルにはマクロを
動かす方法もありましたのでご参考にしてください。

しかし、環境が違いますので一概には言えませんが、
連続して処理をするとなるとマクロを使った場合と
大差ないかもしれません。
この方法は逐一、エクセルを起動し作業を行うからです。

参考URL:http://www.bcap.co.jp/hanafusa/

BOX_Fileさんのしたいことと違ったらすいません。
単純にCSVのファイルをエクセル形式で書き出し保存すると受け取ったのですが。。。

ここのHPにVBからエクセルを操作するサンプルが充実してました。
VBレスキュー(花ちゃん)&八日市PCサービス
http://www.bcap.co.jp/hanafusa/VBHLP/excelmenu.htm

作業の流れとしては
・CSVファイルを開いて内容を読み込む。
 (ここで読み込んだデータの変換等もできます。)
・読み込んだデータをエクセルファイルに書き出す。
・エクセルファイルを新規作成...続きを読む

QVisualBasic.Netのフォーム上からExcelを起動するには

VisualBasic.Netのフォーム上からExcel2003を起動するにはどのようにすればよろしいでしょうか。
http://anetm.com/dev/tools/vbdotnet/112215.htm
を試してみましたが、
型Excel.Applicationが宣言されてません
型Eexcel.Workbookが宣言されてません
となり、うまくいきませんでした。
宜しくお願いします

Aベストアンサー

URLに記されている項番1を行い、Excelへの参照を追加した場合、オブジェクトプラウザに「Interop.Excel」と表示されていますか。
もし「Interop.Excel」がなく、「Microsoft.Interop.Excel」と表示されているようでしたら、次のようなImportsステートメントをファイルの先頭に記述する必要があります。

Imports Excel = Microsoft.Office.Interop.Excel

QEXCEL VBA すべてのブックを上書き保存して閉じる

Win8 Excel2010です。
以下のEXCEL VBA の文章を教えて下さいm--m




すべてのエクセルウィンドウを、最小化した状態で(見えなければ良い)、UserForm2.Showしながら、上書き保存してを閉じる。
その際、閉じる前に以下のマクロを実行する。
With ActiveWindow

'''罫線を表示
.DisplayGridlines = True

'''行列番号を表示
.DisplayHeadings = True

'''アウトライン記号を表示
.DisplayOutline = True

'''シート見出しを表示
.DisplayWorkbookTabs = True

'''メニューを表示
Application.CommandBars("Worksheet Menu Bar").Enabled = True

'''ツールバーを非表示
For Each cb In Application.CommandBars
cb.Enabled = True

'''数式バーの非表示
Application.DisplayFormulaBar = True

'''ステータスバーの非表示
Application.DisplayStatusBar = True

Next
End With



宜しくお願いします。

Win8 Excel2010です。
以下のEXCEL VBA の文章を教えて下さいm--m




すべてのエクセルウィンドウを、最小化した状態で(見えなければ良い)、UserForm2.Showしながら、上書き保存してを閉じる。
その際、閉じる前に以下のマクロを実行する。
With ActiveWindow

'''罫線を表示
.DisplayGridlines = True

'''行列番号を表示
.DisplayHeadings = True

'''アウトライン記号を表示
.DisplayOutline = True

'''シート見出しを...続きを読む

Aベストアンサー

こんばんは。

もしかしたら思ったようにいかない可能性があります。
単純に考える人もいますが、長くやってみないと見えてこない部分もあるはずです。
私自身、こういうものは、知っているだけに気後れがしてしまいます。
簡単なことを難しく考えているようには見えますが、意外に、この種のものは、むつかしいです。
これを土台に、いろいろ試してみてください。

以下は、ユーザーフォームのコマンドボタンにつけるものです。

>すべてのエクセルウィンドウを、最小化した状態で(見えなければ良い)、

この部分は、どうするかお任せになります。
なせなら、それは、今回の質問内容とは別の問題のように思うからです。

以下は、おかしな部分があるような疑念がわくはずですが、以前、同様のものを何度も繰り返して、Excel 2007以上では、Excel のアプリケーションが終わらない現象があります。それで、このようなコードになりました。(別の掲示板では、この内容を間違いだと決めつけた人がいますが、Quit と Saveが逆にするのは、古くからの手法です)

また、名前を付けていないブックは、名前を付けて保存するか、捨ててしまうか、どちらかになります。
ThisWorkbookを最後にしないと、このような場合は、UserFormを立ち上げたままですと、途中で終了させると、ハングやクラッシュする可能性があります。

'//
Private Sub CommandButton1_Click()
 Dim wb As Workbook
 Dim fn As Variant
 For Each wb In Application.Workbooks
  If wb.Name Like "Book#*" Then
   fn = Application.Dialogs(xlDialogSaveAs).Show
   If Not VarType(fn) = vbBoolean Then
    wb.SaveAs fn
    wb.Close False
   Else
    wb.Close False
   End If
  ElseIf Not (wb.Name = ThisWorkbook.Name Or wb.Name Like "PERONAL.*") Then
   If wb.Saved = False Then
    wb.Save
   End If
   wb.Close False
  End If
 Next
 Call SettingBack(ThisWorkbook.Windows(1))
 If ThisWorkbook.Saved = False Then
  Application.Quit
  ThisWorkbook.Close True 'ここは、逆で可能なのです。
 Else
  Application.Quit
  ThisWorkbook.Close
 End If
 Application.Quit 'これでも閉じなければ、下のコードも活かしてください。
 'Application.Quit '予備
End Sub
Sub SettingBack(wb As Window)
  Dim cb As Object
  On Error Resume Next
  With wb.Windows(1)
    .DisplayGridlines = True '罫線を表示
    .DisplayHeadings = True '行列番号を表示
    .DisplayOutline = True 'アウトライン記号を表示
    .DisplayWorkbookTabs = True 'シート見出しを表示
    Application.CommandBars("Worksheet Menu Bar").Enabled = True 'メニューを表示
    For Each cb In Application.CommandBars 'ツールバー
      cb.Enabled = True
    Next
    Application.DisplayFormulaBar = True '数式バーの非表示
    Application.DisplayStatusBar = True 'ステータスバー
  End With
  On Error GoTo 0
End Sub
'//

こんばんは。

もしかしたら思ったようにいかない可能性があります。
単純に考える人もいますが、長くやってみないと見えてこない部分もあるはずです。
私自身、こういうものは、知っているだけに気後れがしてしまいます。
簡単なことを難しく考えているようには見えますが、意外に、この種のものは、むつかしいです。
これを土台に、いろいろ試してみてください。

以下は、ユーザーフォームのコマンドボタンにつけるものです。

>すべてのエクセルウィンドウを、最小化した状態で(見えなければ良い)、...続きを読む

Qexcelのマクロを使って決まった入力データ位置の文字を.......

VB(マクロ?)初心者です^^; ご教授お願いします
excelのマクロを使って ”決まった入力データ位置の文字”をコピー(又は切り取り)して同じseet内の違うセル貼り付けしたいのです。
ただし、同じセルに貼り付けては前の入力内容が消えてしまうので、2回目は前回の下のセル、3回目も....この同じ行為を続けたいのです。

                      みんなぁ~ help me 

Aベストアンサー

こんにちは。

一例です。A1に入力されたデータをB列にコピー貼り付けします。
ただし、エラー処理はしていませんので、B列最後のセル(一番下)に貼り付けた後に実行するとエラーになります。

Dim myrng As Range

If Range("B1").Value = "" Then
Range("B1").Value = Range("A1").Value
Else
Set myrng = Range("B" & Rows.Count).End(xlUp)
myrng.Offset(1).Value = Range("A1").Value
End If


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

人気Q&Aランキング

おすすめ情報