投稿時間:2005/09/16(Fri) 22:13 投稿者名:NM
Eメール:
URL :
タイトル:Excelファイル操作時のエラー
お世話になります。
VBでエクセル操作中に出る下記のメッセージの原因を調査しております。 エクセル関係のエラーに関する注意書きを読んだ上で設計したつもりなのですが、 原因がよく解りません。 対策方法は、MicrosoftやいろんなURLを探した所、OLEの時間を設定する記述がありました。 まずは対策方法を講じる前にExcel操作時の手順として、何か間違っているでしょうか。
とても長い内容で恐縮ですが、実際の関数は以下のものです。
ご教授ください。よろしくお願い致します。
<エラーメッセージ> 「他のアプリケーションがサーバを使用しているため、この操作を完了できません。 操作を続けるには、「切り替え」ボタンを選択して、他のアプリケーションを 終了させてください。」
実際の処理: Public Sub XLS_FILE_WRITE(strName As String, D_no As Integer) 'Excel Work Dim WkbObj As Workbook Dim objADOConnection As ADODB.Connection Dim objADORecordset As ADODB.Recordset Dim strSheetName(10) As String Dim SheetCount As Integer Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer, r As Integer, h As Integer Dim strSelect As String
Select Case D_no Case 2: strSheetName(0) = UCase("Data") strSheetName(1) = UCase("Data_Str") SheetCount = 2 Case 3: strSheetName(0) = UCase("Data-DropSup") SheetCount = 1 Case 4: strSheetName(0) = UCase("Data-DropAdd") SheetCount = 1 Case 5: strSheetName(0) = UCase("InputData") strSheetName(1) = UCase("Data_Str") SheetCount = 2 Case Else: End Select On Error GoTo MYEND1 Set objADOConnection = New ADODB.Connection objADOConnection.Provider = "Microsoft.Jet.OLEDB.4.0" objADOConnection.Properties("Extended Properties") = "Excel 8.0" Err.Number = 0 objADOConnection.Open strName Set objADORecordset = New ADODB.Recordset If Err.Number = 0 Then For i = 0 To SheetCount - 1 objADORecordset.ActiveConnection = objADOConnection objADORecordset.CursorType = adOpenForwardOnly objADORecordset.LockType = adLockPessimistic strSelect = "select * from [" + strSheetName(i) + "$]" Err.Number = 0 objADORecordset.Open strSelect, , , , adCmdUnknown If Err.Number = 0 Then objADORecordset.MoveFirst r = 0 Do Until objADORecordset.EOF For j = 0 To objADORecordset.Fields.Count - 1 Select Case UCase(strSheetName(i)) Case UCase(strSheetName(i)) Select Case UCase(objADORecordset.Fields(j).Name) Case UCase("Val"): Select Case D_no Case 0: objADORecordset.Fields(j).Value = _ RecipeData(r).A06_Val Case 2: objADORecordset.Fields(j).Value = _ CHBData(r).A06_Val Case 3: objADORecordset.Fields(j).Value = _ LC_DropSup(r).A06_Val Case 4: objADORecordset.Fields(j).Value = _ LC_DropAdd(r).A06_Val Case 5: objADORecordset.Fields(j).Value = _ LCData(r).A06_Val Case Else: End Select Case UCase("Str"): Select Case D_no Case 0: objADORecordset.Fields(j).Value = _ RecipeData_str(r).A08_Str Case 2: objADORecordset.Fields(j).Value = _ CHBData_Str(r).A08_Str Case 5: objADORecordset.Fields(j).Value = _ LCData_Str(r).A08_Str Case Else: End Select Case Else End Select End Select Next objADORecordset.Update objADORecordset.MoveNext r = r + 1 Loop objADORecordset.Close End If Next Set objADORecordset = Nothing objADOConnection.Close Set objADOConnection = Nothing Debug.Print "WndData Save End:" + str(Timer) 'Excute Calculate Debug.Print "Cal Start:" + str(Timer) Set WkbObj = GetObject(strName) For i = 0 To WkbObj.Worksheets.Count - 1 WkbObj.Worksheets(WkbObj.Worksheets.Item(i + 1).Name).Calculate Next WkbObj.Application.Windows(1).Activate WkbObj.Save WkbObj.Application.Quit Set WkbObj = Nothing Debug.Print "Cal End:" + str(Timer) End If Exit Sub
MYEND1: On Error Resume Next objADORecordset.Close Set objADORecordset = Nothing objADOConnection.Close Set objADOConnection = Nothing MyMSGBox "Excel Write Error" & Err.Description, vbOKOnly, "ERROR !&q uot;
End Sub
|