• ベストアンサー

vb.netのnewキーワード

'Excel.Application の新しいインスタンスを生成するとき Dim xlApplication As New Excel.Application() のようにNewを使いますが ワークブックを作成するときは Dim xlBooks As Excel.Workbooks のようにNewを使わないのはなぜですか?

  • ysbu
  • お礼率100% (3/3)

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

Newしないからです。 VB.NET言語において Dim xlApplication As New Excel.Application() ・・・(1) は Dim xlApplication As Excel.Application = New Excel.Application() ・・・(2) と同義ですが、Excel.WorkbooksはNewするものではなくExcel.Application#Workbooksから得るものです。 Dim xlBooks As Excel.Workbooks = xlApplication.Workbooks ・・・(3) として、Excel.ApplicationのインスタンスからExcel.Workbooksのインスタンスを取得するため、Newする必要はないというかNewされるべきではないというか。 最も重要なセンテンスは(2)です。(2)で何が行われているかを真に理解していれば、今回のような疑問は沸きません。

ysbu
質問者

お礼

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

関連するQ&A

  • vb2010で既存のエクセルを開くには?

    初心者です。 VB6.0からvb2010への乗り換えをしていますが、以下のコードでxlBooks = xlApplication.Workbooksのところで止まってしまいます。 参考ページをいろいろ見ましたが原因が分かりません。 実行する前のコードに波線はでません。 CreateObjectでやっても結果は同じでworkbookを作るところでエラーとなります。 エラーは「タイプライブラリのロードに失敗」ですが、であればDim xlApplication As New Excel.Application()かCreateObjectで止まるように思いますが、理由がわかりません。 WinXP, Office2003, .Net 4.0. vb2010Expressの組み合わせで全てアップデート済み、参照設定はExcel 11.0 Object Libraryです。 どなたかご教示頂ければ幸甚です。 Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\Hoge.xls") - - System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication) End Sub End Class

  • vb.netでEXCEl出力

    VB.NETを始めて2週間ほどの初心者ですがお願いします。 現在DataGridViewに表示した内容を、ボタン押下によEXCELに表示するという段階で悩んでおります。 現状としては、ボタン押下によりEXCELを開くところまで終了していますが、どうすればDataTableの情報をEXCELに表示できるのかが 色んな質問を見させていただいたのですが分かりません。 お忙しいとは思いますがよろしくお願いします。 現在のEXCELを表示しているソースです Dim oExcel As New Excel.ApplicationClass Dim xlBooks As Excel.Workbooks ' xlApplication から WorkBooks を取得する xlBooks = oExcel.Workbooks ' 新しい Excel ブックを追加する xlBooks.Add() 'Excelを表示する oExcel.Application.Visible = True 環境としまして Microsoft Viosual Basic 2008 Express Edition VB.NET WinXP pro まだ質問する上で何の情報が必要なのかもわかりませんので、必要な情報がありましたら教えてください。

  • VisualBaic2005でExcelファイルを読む方法2

    temtecomai2さんにアドバイスを頂き、下記のようにプログラムを修正して実行してみたのですが、下記のエラーになりました。 Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\book1.xls") ↑を実行した時点で「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」のエラーメッセージがでます。 新しいExcelブックの追加(xlBooks.Add())を実行してもエラーはでないです。大変申し訳ないのですが、エラーの回避方法を教えてください。よろしくお願いいたします。

  • VB2005でExcelのシートをコピー

    VB2005Expressで開発をしています。 Excelのシートをコピーして同じbookに追加をしたいと思っています。 下記でまずExcelを使用できるようにして  Dim xlApp As New Excel.Application  Dim xlBooks As Excel.Workbooks = xlApp.Workbooks  Dim xlBook As Excel.Workbook = xlBooks.Add '新規のファイルを開く  Dim xlSheets As Excel.Sheets = xlBook.Worksheets  Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)  xlApp.Visible = True 下記で追加できると思うのですが、()内にセットするパラメータが わかりません・・・  xlBook.Worksheets.Copy() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • VBでエクセルのバージョンを指定して開く

    PCにEXCEL2002と2013がインストールされています。 VBでエクセルを起動し、マクロを実行したいのですが、その際に起動するエクセルのバージョンを指定したいと考えています。 以下でやると標準設定のEXCELが開いてしまい、バージョンの指定ができません。 Dim xlApp As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApp.Workbooks xlBooks.Open("C:\test.xls") xlApp.Visible = True xlApp.Run("test.xls!macro") なにか方法はありますでしょうか?

  • VB.NETからExcelを開きプリンタ名を指定

    いつも大変お世話になっています。 VB.NETからExcelを開きプリンタ名を指定方法について ご助力お願いします。 以下の処理は、指定したプリンタ名を Excelのプリンタ名のデフォルト値として設定しています。 ――――――――――――――――――――――― ' Excel.Application の新しいインスタンスを生成する Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks ' xlApplication から WorkBooks を取得する xlBooks = xlApplication.Workbooks ' 既存の Excel ブックを開く xlBooks.Open(txtPath.Text) Dim i As Integer For i = 0 To System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count  Try    ’※    xlApplication.ActivePrinter= 「プリンタ名」 & " on Ne" & Format(i, "00") & ":"   Exit For  Catch ex As Exception   Debug.Print(ex.Message)  End Try Next ' Excel を表示する xlApplication.Visible = True ――――――――――――――――――――――― ◆※について 「on Ne」ですが、恐らくネットワークポートを指していると思います。 その他のポートを指す「on Ne」のようなものは他にもあるのでしょうか? 例えば、「on LPT」?「on COM」?とか… ◆指定したプリンタ名のポート(on Ne)取得について 指定したプリンタが使用しているポート(on Ne)を取得する方法が ありましたら教えてください! 以上です。よろしくお願い致します。

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。

  • 「New」キーワードを使ったFormの表示について

    よろしくお願いします。 VB2005で、Windowsアプリケーションを開発しています。 Formを開く時の「New」キーワードについてお伺いしたく、投稿しました。 手許の参考書に、Form1からForm2を開くときは、 Dim Form2 As New Form2 Form2.ShowDiaolog()  とか Dim NewForm As New Form2 NewForm.Show() と記載されていたんですが、「Dim Form2 As New Form2」や「Dim NewForm As New Form2」という部分は必ず必要なのでしょうか? Form2.ShowDiaolog()だけでも開きますが、これだけだと何か支障があるのでしょうか? Form2を「New Form2」とする意味がわかりません。Newを使って、Form2のインスタンスを作成しておく、と参考書にあったのですが、Form2にボタンや、テキストボックスを配置している時点でインスタンスはできてるのでは?と思っていました。 何かルールみたいなものなのでしょうか?

  • VB.NETからEXCELの起動が、うまくいかない

    3回目の同じ質問になってしまうのですがよろしくお願いいたします。 下記のようなソースでEXCELファイルを作成し、その後ファイルを開くという処理をしています。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Add Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) Dim xlRange As Excel.Range Dim xlCells As Excel.Range = xlSheet.Cells xlRange = xlCells(1, 10) xlRange.Value = "--" xlRange = xlCells(1, 5) xlCells.EntireColumn.AutoFit() xlBook.SaveAs(sPath & "\" & sFileName, Excel.XlFileFormat.xlWorkbookNormal) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheets) xlCells = Nothing xlRange = Nothing xlSheet = Nothing xlSheets = Nothing xlBook.Close() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBooks) xlBook = Nothing xlBooks = Nothing xlApp.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) xlApp = Nothing GC.Collect() System.Diagnostics.Process.Start(sPath & "\" & sFileName) ある特定のPCでのみEXCELのメニューバーとステータスバーのみしか表示されない状態です。 起動部分(Process.Start)をコメントアウトして確認したところ GC.COLLECTでEXCELが終了することなく、アプリの終了時にEXCELが終了する 状態にあります。 これはオブジェクトの開放がうまくいっていないのでしょうか? よろしくお願いいたします。

  • VB2005でのEXCEL制御について

    いつもお世話になってます。 私はVB入門者です。 VBからシートを選択して値を入れることは出来たのですが 範囲選択→格子罫線をひく、といったような操作について 調べたところ、マクロをつくりコピーアンドペーストでスムーズに いくということがわかったので、試したところうまくいきませんでした。 又、質問ナンバー QNo.3575919 に [Visual Basic2005でExcelに罫線を描く]とあり 「CreateObject("Excel.Application")」はソースに入っているか という部分がポイントのようなので、少しいじってはみたのですが うまくかけませんでした。 と、いうよりも理解できませんでした。 下記のコードでは選択範囲を指定する部分まで成功したものです。 アドバイスよろしくお願いします。 Sub excel_app() Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C:\hoge.xls") xlSheets = xlBook.Worksheets xlBook.Worksheets(1).Range("A31:Y55").Select() xlBook.Worksheets(1).Range.Borders. ←これ以降がわかりません。