ネット上で散々ある良回答を拝見させていただいても,
自分で解決しきれませんでした.どうぞよろしくお願いいたします.
下の2行を追加するとエクセルが解放できなくなってしまいます.
Private Sub Excel一括置換(ByRef N As Integer)
Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
Dim WB As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim Mypath As String = TextBoxパス.Text
Dim FName As String
FName = Dir(Mypath & "*.xls", vbNormal)
Do While FName <> ""
WB = xlBooks.Open(Mypath & FName)
For Each xlSheet In WB.Worksheets 'For N_s = 1 To WB.Worksheets.Count
Next 'Next N_s
' ↑の2行がなくなれば無事解放できます
MRComObject(xlSheet) : xlSheet = Nothing
WB.Save() : WB.Close()
MRComObject(WB)
FName = Dir()
Loop
Me.Activate()
xlSheet = Nothing
WB = Nothing
MRComObject(xlBooks) : xlBooks = Nothing
xlApp.Quit() : MRComObject(xlApp) : xlApp = Nothing
End Sub
最初の「For N_s = 1 To WB.Worksheets.Count」という書き方だと,
ネット上で見かけるWorksheet「暗黙のオブジェクト」になるのかな??と思い,
xlSheetを宣言してみましたが,うまくいきません.
できればFor N_s = ~ という記述法にしたいのですが...
お詳しい方がいらっしゃれば,どうぞよろしくお願いいたします.
No.1ベストアンサー
- 回答日時:
こんにちは、
私も、エクセルのオブジェクトの解放の問題になったときに
紹介されたページ
http://hanatyan.sakura.ne.jp/dotnet/index.html
花ちゃん、コード見ると、このページにもたどり着いた様に
見受けられますが。
このページと、camputerさんのコードを見て
気づいた点として、
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
(注意)Sheetも宣言しますが、Sheetsも宣言しています。
がないですね。
そのせいか、
xlSheetsの表現が、WB.Worksheets に変わっています。
花ちゃんでは、
花ちゃんから、転載****************
1.基本的に、下記のように、[.]が2つ連続で使用されたら解放できません。
誤り
xlRange = xlCells(1,1)
xlRange.Interior.Color = RGB(0, 255, 0)
'使った変数の解放処理(.NETからExcelの基本的な操作方法 参照の事)
MRComObject(xlCells)
MRComObject(xlRange)
正
xlRange = xlCells(1, 1)
Dim xlInterior As Excel.Interior
xlInterior = xlRange.Interior
xlInterior.Color = RGB(0, 255, 0)
MRComObject(xlInterior)
MRComObject(xlCells)
MRComObject(xlRange)
必ず、上記のように分解して変数に受けて、解放処理をして下さい。
***************************************転載終了
WB.Worksheets.Countの表現を使っていますが。
花ちゃんからの転載に書いてある。[.]が2つ連続で使用されています。
ここは、WB.WorksheetsをxlSheetsで受けて、
xlSheets.Countに変えたほうが、良い様な気がします。
とうぜん、xlSheetsを、使っているので、他にもこれ用にコードを
変更しないと、いけないかも知れませんが。
後は、気がついた点は、ないです。
外していたら、ごめん。
どうもありがとうございます.
分かりにくくてもうしわけございませ.
'For N_s = 1 To WB.Worksheets.Count
のほうはコメントアウトしております.
For Each xlSheet In WB.Worksheets が実行文になります.
しかしtom11様のご指摘で
Dim xlSheet As Excel.Worksheetではなく
Dim xlSheet As Excel.Worksheetsにしたところ
正常に解放されるようになりました.ご指摘どうもありがとうございました.
今からExcel.WorksheetとExcel.Worksheetsについて勉強してみます.
ほんとうにどうもありがとうございました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
コードでオブジェクトを最前面に
-
文字列で小数点以下の0を削除し...
-
Access からオブジェクトとして...
-
エクセルのデータをwebフォーム...
-
Excel VBAでマウスの左クリック...
-
WSH or VBの質問
-
アクセスVBAのMe!と[ ]
-
日本語の文字化けを直す方法
-
起動済のIEから.NET Framework...
-
【エクセル】複数のTextBoxに共...
-
Accessのフォーム上にエクセル...
-
エクセルVBAでセル番地を指定し...
-
構造体の静的な初期化
-
「ご処理進めて頂きますようお...
-
VBA SaveChanges 上書きされない
-
Pythonでgif画像が上手く作れない
-
VBAでループ内で使う変数名を可...
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
文字列で小数点以下の0を削除し...
-
日本語の文字化けを直す方法
-
Excel VBAでマウスの左クリック...
-
エクセルのデータをwebフォーム...
-
Access からオブジェクトとして...
-
コードでオブジェクトを最前面に
-
Accessのフォーム上にエクセル...
-
構造体の静的な初期化
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
PowerpointVBAで指定のShapeオ...
-
現在アクティブになっているオ...
-
[C#] DataGridViewの項目名
-
Excel VBA でPictureBoxオブジ...
-
Excelを閉じるときVBAプロジェ...
おすすめ情報