- 締切済み
インスタンスを消滅させる方法
PHPでAccessのインスタンスを生成しましたが、 これが消滅せずに残ってしまいます。 Submitの度にインスタンスが増えて困ります。 インスタンスを消滅させる方法をご教授ください。 以下に試した方法を記載します。 いずれも成功しませんでした。 (1) $ap = new COM("Access.Application"); $ap->Quit(); unset($ap); (2) $sc = new COM("ScriptControl"); $sc->Language = "VBScript"; $sc->ExecuteStatement("Dim A"); $sc->ExecuteStatement("Set A=CreateObject(\"Access.Application\")"); $sc->ExecuteStatement("A.Quit"); $sc->ExecuteStatement("Set A=Nothing"); $sc->Reset(); unset($sc); 以上、よろしくお願いします。
- nda23
- お礼率90% (39/43)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- foreach
- ベストアンサー率51% (43/84)
> いずれも成功しませんでした。 何がどのように成功しなかったのですか? 一般的にPHPは処理が終わるタイミングでオブジェクトは自動的に破棄されます。 そのCOMクラスか継承したクラスにデストラクタを定義して中でログを書き出す処理を追記した上で実行してみて下さい。 このときログが書き出されればインスタンスは自動的に破棄されてることになります。 そうじゃなければ別の問題だと思います。
関連するQ&A
- クラスのインスタンス作成について
以下のようなクラス(単純化しています)とテスト関数内でインスタンス生成しています。どちらも意味は同じですが、(1)はtest関数を抜けると勝手に消滅(デストラクタ)してくれますが、(2)はdeleteを使わないと消滅しません。 (2)の方が面倒くさい(new, delete)ですが、(2)を使わないといけない場面や理由が想像できません。クラスの配列なら意味がある???と思いますが、1つのインスタンスで(2)にする場合どんな利点があるのでしょうか? class A { }; void test{ A a; -----> (1) A *pa = new A; -+ (2) delete pa; -+ } あと、A::TEISU = 1とクラスのグローバル定数を設定したいのですがどうすればよいのでしょうか?
- ベストアンサー
- C・C++・C#
- 変数の定義の仕方をご教授ください。
Option Explicit Function EncodeURI(uri As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set js = sc.CodeObject EncodeURI = js.encodeURIComponent(uri) End Function ------------------------------------------- をデバッグすると「sc =」と「js =」の部分が「変数が定義されていません」となってしまいます。 変数を宣言する時に、 dim sc as まではわかるのですが変数のデータ型を何にしてあげればいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- objAcc.Visible = False 可視
アクセスからアクセスファイルを開いています。 Set objAcc = CreateObject("Access.Application") objAcc.OpenCurrentDatabase "C:\あああ.accdb", False objAcc.Run "test1" objAcc.Quit Set objAcc = Nothing の様にして、VBAでアクセスファイルを開いてるのですが この時、起動するファイルの可視をFalseにすることは可能でしょうか? Set objAcc = CreateObject("Access.Application") objAcc.Visible = False objAcc.OpenCurrentDatabase "C:\あああ.accdb", False としても、ファイルが開いてるのが見えてしまいます。
- 締切済み
- オフィス系ソフト
- EXCEL VBA Applicationインスタンス内での範囲指定
Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Private Const SCol = 1 Private Const SRow = 1 Private Const ECol = 1 Private Const ERow = 1 Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add xlBook.Sheets("Sheet1").Range("A1") = 1 xlBook.Sheets("Sheet1").Range(Cells(SCol,SRow), Cells(ECol, ERow)).Borders.LineStyle = True xlBook.SaveAs "c:\ss.xls" xlBook.Close xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing 以上のようにEXCEL VBA内で新規ExcelApplicationインスタンス内で値を代入し、線を引いているのですが線を引く範囲指定部分でアプリケーション定義またはオブジェクト定義のエラーですと表示されます。 xlBook.Sheets("Sheet1").Range("A1:B2").Borders.LineStyle = True ↑のような形であればエラーは出ません。 xlBook.Sheets("Sheet1").Range(Cells(1,1),Cells(2,2)).Borders.LineStyle = True ↑ではエラーが出ます。 新規ExcelApplicationインスタンス内でのRange(Cells)の使用方法が違うのでしょうか?よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 画面のちらつきをやめるにはどうすればいいでしょうか
アクセスです。 Sub test() Set objAcc = CreateObject("Access.Application") objAcc.OpenCurrentDatabase "C:\test.accdb", False objAcc.Run "プロシージャー" objAcc.Quit Set objAcc = Nothing End Sub ------------------------- 上記のプロシージャーを実行して、他のファイルのプロシージャーを実行しているのですが 毎回ファイルが立ち上がってしまいます。 画面のちらつきをやめるにはどうすればいいでしょうか? DoCmd.SetWarnings False と DoCmd.SetWarnings True を入れてみましたが、無意味でした。 objAcc.OpenCurrentDatabase でアクセスが起動し、 objAcc.Quit で閉じます。 エクセルで例えるのなら、 Application.ScreenUpdating = False みたいなことがやりたいです。
- ベストアンサー
- オフィス系ソフト
- VBSで起動したアプリが前面表示しない
Powerpointをコンテキストメニューに「読み取り専用」を追加するために以下のVBscriptを起動すると前面表示されません。 どうしたら前面表示されますでしょうか? 起動コマンド wscript.exe "C:\Program Files\Microsoft Office\Office14\OpenPptAsReadOnly.vbs" "%1" 以下がVBscript(OpenPptAsReadOnly.vbs)です。 Dim strPPTFileName Dim objPPTApp '引数のチェック If WScript.Arguments.Count <> 1 Then WScript.Quit 'ファイル名取得 strPPTFileName = WScript.Arguments(0) '起動 Set objPPTApp = WScript.CreateObject("Powerpoint.Application") objPPTApp.Visible = True '読み取り専用で開く Call objPPTApp.Presentations.Open(strPPTFileName,True) '終了処理 Set objPPTApp = Nothing WScript.Quit
- ベストアンサー
- Visual Basic
- ASP(VBScript)にてExcelアプリケーションが終了しない
こんばんは VBScriptでExcelを読込みサーバのDBに内容を登録後に終了をしているのですがサーバにExcelアプリケーションが残ったままになっています。 strGetFileName = "C:\a.xls" 'Excelシート設定 Set xlsApp = Server.CreateObject("Excel.Application") xlsApp.Workbooks.Open strGetFileName Set xlsBook = xlsApp.Workbooks(1) Set xlsSheet = xlsBook.Worksheets(2) ← 二枚目のシート --中略-- xlsSheet.Application.Quit 'Excelアプリケーションのメモリ開放 Set xlsSheet = Nothing Set xlsBook = Nothing Set xlsApp = Nothing といったコーディングなのですが処理を重ねるたびにタスクマネージャに Excelアプリケーションが残り、重くなってしまいます。 終了の方法が悪いのではないかとは思いますが、実現方法がわかりません。 オブジェクトをオープンしているのでクローズ命令でも試してみましたがうまくいきませんでした。 どなたかご存知の方いらっしゃいましたら教えてください。 OS Win2000 ASP,BASP 言語 Html,VBScript,JavaScript
- ベストアンサー
- Microsoft ASP
- Excel VBAでブラウザのリンクをクリックするには
Excelのバージョンは2003です。 VBAで出発地から到着地からNavitimeのサイトに接続して距離を取得するようなプログラムを作成していますが… 下記のように記述しています。 Private Sub Workbook_Open() Dim ie As InternetExplorer Dim addr0 As String Dim addr1 As String Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True addr0 = "住所1" addr1 = "住所2" ie.navigate "http://www.navitime.co.jp/?keyword0=" & urlEncode(addr0) & _ "&keyword1=" & urlEncode(addr1) & _ "&ctl=0604" Do While ie.Busy = True Do While ie.readyState <> 4 DoEvents Loop Loop End Sub Public Function urlEncode(str As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "Jscript" Set js = sc.CodeObject urlEncode = js.encodeURIComponent(str) End Function リンクをクリックするにはどのようにすればいいのでしょうか。 アドバイス宜しくお願いします。
- 締切済み
- Visual Basic
- vbscriptでWordのヘッダーを変更
vbscriptでWordのヘッダーを変更したく、下記のコーディングをしましたが、ヘッダーの変更ができません。 (本文に"1111"が記載されてしまいます。) どこが違うか教えて頂けませんでしょうか? vbscriptでWordをコーディングするのは初めてです。 よろしくお願いします。 Set objWord = CreateObject("Word.Application") Set objDoc = objWord.Documents.Open ("C:\test\test.doc") objDoc.ActiveWindow.ActivePane.View.SeekView=wdSeekCurrentPageHeader objWord.Selection.ParagraphFormat.Alignment=wdAlignParagraphRight objWord.Selection.Text="1111" objDoc.ActiveWindow.ActivePane.View.SeekView=wdSeekMainDocument objWord.ActiveDocument.PrintOut objWord.ActiveDocument.Close (True) objWord.Quit
- ベストアンサー
- Visual Basic
- WSHによるExcelのセルコピー&ペーストの方法
【やりたいこと】 WSHを利用して 1.あるExcelファイル(Aとする)を開く 2.別のExcelファイル(Bとする)を開く 3.Aの特定のシートの特定のセル範囲をコピー 4.Bの特定のシートに、3でコピーしたセル範囲をペースト 5.B上書き保存&閉じる 6.A閉じる 【現状】 以下のようなコードを書いてみたのですが、 ファイルの開閉はできますがコピー&ペーストが 全くできていないようです。 何が問題なのかよくわからず質問させていただきました。 かなり素人なので無駄も多いですが、ぜひご教授願います。 よろしくお願い致します。 ------------------------------------- Set xl1 = Wscript.CreateObject("Excel.Application") xl1.Visible = false Set book1 = xl1.WorkBooks.Open(A) Set mysheet1 = book1.worksheets(特定のシート) Set xl2 = Wscript.CreateObject("Excel.Application") xl2.Visible = false Set book2 = xl2.WorkBooks.Open(B) Set mysheet2 = book2.worksheets(特定のシート) mysheet1.Activate xl1.Range("A1").CurrentRegion.Select xl1.Selection.Copy mysheet2.Activate xl2.Range("A1").Select xl2.Selection.Pastespecial 'ファイルクローズ book2.Close false xl2.Quit set mysheet2 = Nothing set book2 = Nothing Set xl2 = Nothing book1.Close false xl1.Quit set mysheet1 = Nothing set book1 = Nothing Set xl1 = Nothing --------------------------------
- ベストアンサー
- その他(プログラミング・開発)
お礼
その後、フト思いついたことを試した結果、解決しました。 Accessが起動する時、画面が開くのですが、Apacheの サービスで「デスクトップとの対話」がOFFになっていると、 画面表示が完了せず、何時までもプロセスが残るようです。 「デスクトップとの対話」をONにしたところ、インスタンスは 自動的に消滅するようになりました。