|
Jakaさん、割り込み失礼します。
こじこじさん、こんにちは。
こじこじさんって、次のスレッドの方と同一人物ですか?
【1771】レコードの値をExcelのファイル名に
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=1771;id=access
だとしたら、向こうを閉じるとかしてくださいね。
ケッコー悲しーです。
万一、同一ネームで人違いでしたら、ご容赦ください。
ACCESS用に待機していたコードをこちら用に書き換えてみました。
Microsoft ActiveX DataObjects 2.5 Library
Microsoft Scripting Runtime
を参照しています。
Sub Main()
On Error GoTo HandleErr
Dim obj As Scripting.FileSystemObject
Dim acnXL As ADODB.Connection
Dim iFile As Scripting.File
Dim newName As String
Dim strpath As String
Set obj = New Scripting.FileSystemObject
Set acnXL = New ADODB.Connection
With acnXL
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;"
End With
strpath = "C:\work\台帳\"
For Each iFile In obj.GetFolder(strpath).Files
'検索条件にあうものだけを取得して下さい。
'現状では.全角でも半角でも000-999までを取得します。
If UCase(iFile.Name) Like "###.XLS" Then
newName = getNewName(acnXL, iFile.Path)
If newName <> "" Then
iFile.Name = newName
End If
End If
Next
If acnXL.State <> adStateClosed Then
acnXL.Close
End If
Set acnXL = Nothing
Set obj = Nothing
Exit Sub
HandleErr:
MsgBox Err.Description
Resume EndProc
EndProc:
On Error Resume Next
Set obj = Nothing
If acnXL Is Nothing = False Then
If acnXL.State <> adStateClosed Then
acnXL.Close
End If
Set acnXL = Nothing
End If
End Sub
Private Function getNewName( _
ByRef racn As ADODB.Connection, _
ByVal vstrConnString As String) As String
Dim ars As ADODB.Recordset
Dim SQLstring As String 'SQL文
Dim varNewName As Variant
On Error GoTo HandleErr
'シート接続
racn.ConnectionString = vstrConnString
racn.Open
SQLstring = "SELECT *" & vbNewLine _
& "FROM [農道台帳(調書)$N4:N4]" & vbNewLine
Set ars = New ADODB.Recordset
ars.Open SQLstring, racn, adOpenStatic
If ars.BOF = True And ars.EOF = True Then
getNewName = ""
Else
ars.MoveFirst
'ここで、取得した値(入力値)が正しいかどうかの処理を入れてください。
'今は取得値が半角or全角の処理をしていないので、
'混在状況ではエラーになります。
If IsNull(ars.Fields(0).Value) Then
getNewName = ""
Else
getNewName = VBA.Format(ars.Fields(0).Value, "000") & ".xls"
End If
End If
ars.Close
Set ars = Nothing
racn.Close
racn.ConnectionString = ""
Exit Function
HandleErr:
MsgBox Err.Description
Resume EndProc
EndProc:
On Error Resume Next
If ars Is Nothing = False Then
If ars.State <> adStateClosed Then
ars.Close
End If
Set ars = Nothing
End If
If racn.State <> adStateClosed Then
racn.Close
End If
End Function
|
|