Option
Explicit
Dim
vRet
As
Variant
Dim
mFso
As
Object
Const
m_FEHLERLAENGE
As
String
=
"Fehler: Es wird eine Gesamtlänge von 14 Zeichen erwartet."
Const
m_CHR45_FEHLT
As
String
=
"Fehler: Es wird ein "
"-"
" an Position 6 erwartet."
Const
m_CHR77_FEHLT
As
String
=
"Fehler: Es wird ein "
"M"
" an Position 11 erwartet."
Const
m_CH32_FEHLT
As
String
=
"Fehler: Es wird ein LEERZEICHEN an Position 10 erwartet."
Const
m_ISNUMERIC
As
String
=
"Fehler: Es werden Zahlen an Positionen wie in diesem Beispiel erwarten."
& vbNewLine & vbNewLine &
"12102-027 M118"
Const
m_sPfad
As
String
= "G:\DATEN\Herstellberichte\"
Const
m_FileExtension
As
String
=
".XLSM"
Dim
lCalc
As
Long
Dim
lEvent
As
Long
Dim
lStatusbar
As
Long
Dim
lScreen
As
Long
Sub
main()
On
Error
GoTo
FinishErr
vRet = InputBox(
"Nach welchem File soll gesucht werden?"
,
"Dateinamenabfrage"
)
vRet = checkEingabe(vRet)
If
Len(vRet) <> 14
Then
MsgBox vRet & vbNewLine & vbNewLine &
"Aktion wird abgebrochen."
, vbCritical + vbInformation + vbOKOnly,
"Autor informiert:"
Exit
Sub
End
If
Call
TurnOffFunctionality
Set
mFso = CreateObject(
"Scripting.FileSystemObject"
)
Call
OrdnerDurchsuchen(mFso.GetFolder(m_sPfad))
FinishErr:
If
Err.Number <> 0
Then
MsgBox Err.Number & vbCrLf & Err.Description
End
If
Call
TurnOnFunctionality
Set
mFso =
Nothing
End
Sub
Sub
OrdnerDurchsuchen(
ByRef
oFolder
As
Object
)
Dim
oSubFldr
As
Object
Dim
oFile
As
Object
For
Each
oSubFldr
In
oFolder.SubFolders
Call
OrdnerDurchsuchen(oSubFldr)
Next
For
Each
oFile
In
oFolder.Files
If
UCase(Right(oFile.Name, 5)) = m_FileExtension
Then
If
UCase(oFile.Name) = UCase(vRet & m_FileExtension)
Then
Dim
wkb
As
Excel.Workbook
Set
wkb = Application.Workbooks.Add(oFile.Path)
End
If
End
If
Next
Set
oSubFldr =
Nothing
Set
oFile =
Nothing
Set
wkb =
Nothing
End
Sub
Public
Sub
TurnOffFunctionality()
With
Application
lCalc = .Calculation: .Calculation = xlCalculationManual
lStatusbar = .DisplayStatusBar: .DisplayStatusBar =
False
lEvent = .EnableEvents: .EnableEvents =
False
lScreen = .ScreenUpdating: .ScreenUpdating =
False
End
With
End
Sub
Public
Sub
TurnOnFunctionality()
With
Application
.Calculation = lCalc
.DisplayStatusBar = lStatusbar
.EnableEvents = lEvent
.ScreenUpdating = lScreen
End
With
End
Sub
Function
checkEingabe(
ByRef
vRet
As
Variant
)
As
Variant
Dim
s
As
String
s = vRet
If
Not
Len(s) = 14
Then
s = m_FEHLERLAENGE
ElseIf
Not
Mid(s, 6, 1) = Chr(45)
Then
s = m_CHR45_FEHLT
ElseIf
Not
Mid(s, 10, 1) = Chr(32)
Then
s = m_CH32_FEHLT
ElseIf
Not
Mid(s, 11, 1) = Chr(77)
Then
s = m_CHR77_FEHLT
ElseIf
Not
IsNumeric((Split(Split(s, Chr(32))(0), Chr(45))(0))) _
And
Not
IsNumeric((Split(Split(s, Chr(32))(0), Chr(45))(1))) _
And
Not
IsNumeric((Split(Split(s, Chr(32))(1), Chr(77))(1)))
Then
s = m_ISNUMERIC
End
If
checkEingabe = s
End
Function