Visual Basic para Aplicaciones - Visual basic para aplicaciones excel 2013

Life is soft - evento anual de software empresarial
   
Vista:
Imágen de perfil de Hugo

Visual basic para aplicaciones excel 2013

Publicado por Hugo (8 intervenciones) el 17/12/2014 03:03:36
Tengo un codigo para comprobara la apertura de planilla y no me funciona la funcion isfileopen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton21_Click()
Dim objexcel As Application
Dim rutaarchivo As String
Dim texto As String
Dim final As Integer
Set objexcel = CreateObject("Excel.application")
    With objexcel
        rutaarchivo = ThisWorkbook.Path & ("ReciboIMP.xlsx")
        If isfileopen(rutaarchivo) Then
            MsgBox "el libro debe esta cerrado para proceder."
            Exit Sub
                Else
                    With .Workbooks.Open(rutaarchivo)
                    .Worksheets("hoja1").Range("recibo").ClearContents
                    End With
            End If
    End With
End Sub

Por fabor si me pueden ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de LaO

Visual basic para aplicaciones excel 2013

Publicado por LaO (2 intervenciones) el 17/12/2014 16:21:18
Hola Hugo,

Me temo que la macro contiene algunas imprecisiones que es importante aclarar:

1- IsFileOpen no aplica en el contexto como una función nativa en VBA

2- Al trabajar con la instrucción CreateObject("Excel.application") se crea una nueva instancia de Excel en forma independiente en la cual deberá habilitarse la instrucción objexcel.Visible = True para colocar en modo visible la aplicación y el archivo que se pretende abrir.

3- El path vinculado está errado, el correcto es como se indica: ThisWorkbook.Path & "\" & ("ReciboIMP.xlsx")
ya que hace falta "\"

4- Al utilizar la instrucción ThisWorkbook.Path se asume que el archivo objetivo (ReciboIMP.xlsx) se encuentra en el mismo directorio del libro activo desde donde se ejecuta la macro. El problema se genera al crear una nueva instancia de Excel en cuyo caso el alcance de la ruta indicada se pierde. No considero necesario generar una nueva instancia de Excel ya que todos los objetos para trabajar con la aplicación se encuentran disponibles en el libro activo.

Así las cosas, te sugiero modificar la macro de la siguiente manera, apoyándote en una función adicional que te he creado para verificar si el archivo esta abierto:

----------------------------------------------------------------------------------------------------------------------->

Sub TuMacro()

Dim strPath As String, strArchivo As String


'vars
strArchivo = "ReciboIMP.xlsx"
strPath = ThisWorkbook.Path & "\" & strArchivo

'procedure
If CheckWorkBook(strArchivo) = True Then

'message control
MsgBox "el libro debe esta cerrado para proceder."

Exit Sub

Else

'opening the book
Workbooks.Open (strPath)
ActiveWorkbook.Worksheets("hoja1").Range("recibo").ClearContents

End If

End Sub

----------------------------------------------------------------------------------------------------------------------->

Function CheckWorkBook(wbName As String) As Boolean
Dim i As Integer
Dim b As Boolean

'vars
b = False

'procedure
For i = 1 To Excel.Workbooks.Count

If Excel.Workbooks(i).Name = wbName Then
b = True
Exit For
End If

Next i

'final result
CheckWorkBook = b

End Function

----------------------------------------------------------------------------------------------------------------------->

Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar