投稿日 | : 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