Cómo comprobar si una matriz está vacía en una macro vba
Quiero comprobar si hay matrices vacías. Google me dio varias soluciones pero nada funcionó. Quizás no las estoy aplicando correctamente.
Function GetBoiler(ByVal sFile As String) As String
'Email Signature
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.ReadAll
ts.Close
End Function
Dim FileNamesList As Variant, i As Integer
' activate the desired startfolder for the filesearch
FileNamesList = CreateFileList("*.*", False) ' Returns File names
' performs the filesearch, includes any subfolders
' present the result
' If there are Signatures then populate SigString
Range("A:A").ClearContents
For i = 1 To UBound(FileNamesList)
Cells(i + 1, 1).Formula = FileNamesList(i)
Next i
SigString = FileNamesList(3)
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
Aquí, si FileNamesList
matriz está vacía, GetBoiler(SigString)
no debe ser llamado en absoluto. Cuando FileNamesList
matriz está vacía, SigString
también está vacío y esto llama GetBoiler()
función con la cadena vacía. Obtengo un error en la línea
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
ya que sFile
está vacío. Hay alguna forma de evitarlo?
57
3
Dado que se trata de una matriz de cadenas, ¿ha considerado la posibilidad de utilizar Join?
Este código no hace lo que usted espera:
Si pasas una cadena vacía (
""
) ovbNullString
aDir
, devolverá el nombre del primer fichero en la ruta del directorio actual (la ruta devuelta porCurDir$
). Así, siSigString
está vacía, su condiciónIf
se evaluará aTrue
porqueDir
devolverá una cadena no vacía (el nombre del primer fichero en el directorio actual), y se llamará aGetBoiler
. Y siSigString
está vacía, la llamada afso.GetFile
fallará.Deberías cambiar tu condición para comprobar que
SigString
no está vacía, o utilizar el métodoFileSystemObject.FileExists
en lugar deDir
para comprobar si el fichero existe.Dir
es difícil de usar precisamente porque hace cosas que no esperas que haga. Personalmente, yo usaríaScripting.FileSystemObject
en lugar deDir
porque no hay nada raro (FileExists
devuelveTrue
si el fichero existe, y, bueno,False
si no existe). Es más,FileExists
expresa la intención de su código mucho más claramente queDir
.Método 1: Primero comprueba que
SigString
no está vacío.**Método 2: Utilizar el método
FileSystemObject.FileExists
.I'll generalizar el problema y la Pregunta como se pretende. Pruebe assingment en la matriz, y atrapar el error eventual
Seguro que se pierde arrays con todos los índices negativos o todos > 1 ... ¿es probable? en weirdland, sí.