en una macro que estoy desarrollando descargo un fichero excel a través de una aplicación java y tras haber pulsado el botón abrir en la pantalla de dialogo de descarga de archivo llego a una instrucción en la cual tiene
que seleccionar un rango de celdas de este nuevo archivo abierto .
Ocurre que la seleccion la hace sobre el archivo excel que ya estaba
abierto antes, no sobre el nuevo. Para resolverlo intente utilziar la
funcion application.wait y no me funciono (parece que esta funcion
para la ejecución de excel y no llega a cargar mi archivo). Tampoco me
funcionó con la funcion Sleep
La opcion de activar el nuevo libro sería la ideal, pero ocurre que el
nombre del fichero que estoy descargando va variando, tan solo se
repite la primera parte del nombre "40Production......" Esto creo que
me imposibilita poder activar el workbook pasandole por parámetro el
nombre completo del archivo..el cual desconozco.
Saben si existe una instrución como esta para los archivos excel?
Do While Ie.Busy: DoEvents: Loop
Do While Ie.readyState <> 4: DoEvents: Loop
Mi ultimo intento ha sido utilizar la funcion FindWindowLike (creada
por un usuario) y que la he declarado previamente.
Esta funcion me devuelve el handle de la ventana con mi archivo excel;
Sub Check_Excel_Open()
Dim lHandle As Long
Dim Timeout As Date
Timeout = Now + TimeValue("00:00:05")
Do
lHandle = FindWindowLike("ProductionReport")
DoEvents
Sleep 200
Loop Until lHandle Or Now > Timeout
End sub
++++++++++++++++++
Function FindWindowLike(strPartOfCaption As String) As Long
Dim hWnd As Long
Dim strCurrentWindowText As String
Dim r As Integer
hWnd = GetForegroundWindow
Do Until hWnd = 0
strCurrentWindowText = Space$(255)
r = GetWindowText(hWnd, strCurrentWindowText, 255)
Muy buenas,
en una macro que estoy desarrollando descargo un fichero excel a través de una aplicación java y tras haber pulsado el botón abrir en la pantalla de dialogo de descarga de archivo llego a una instrucción en la cual tiene
que seleccionar un rango de celdas de este nuevo archivo abierto .
Ocurre que la seleccion la hace sobre el archivo excel que ya estaba
abierto antes, no sobre el nuevo. Para resolverlo intente utilziar la
funcion application.wait y no me funciono (parece que esta funcion
para la ejecución de excel y no llega a cargar mi archivo). Tampoco me
funcionó con la funcion Sleep
La opcion de activar el nuevo libro sería la ideal, pero ocurre que el
nombre del fichero que estoy descargando va variando, tan solo se
repite la primera parte del nombre "40Production......" Esto creo que
me imposibilita poder activar el workbook pasandole por parámetro el
nombre completo del archivo..el cual desconozco.
Saben si existe una instrución como esta para los archivos excel?
Do While Ie.Busy: DoEvents: Loop
Do While Ie.readyState <> 4: DoEvents: Loop
Mi ultimo intento ha sido utilizar la funcion FindWindowLike (creada
por un usuario) y que la he declarado previamente.
Esta funcion me devuelve el handle de la ventana con mi archivo excel;
Sub Check_Excel_Open()
Dim lHandle As Long
Dim Timeout As Date
Timeout = Now + TimeValue("00:00:05")
Do
lHandle = FindWindowLike("ProductionReport")
DoEvents
Sleep 200
Loop Until lHandle Or Now > Timeout
End sub
++++++++++++++++++
Function FindWindowLike(strPartOfCaption As String) As Long
Dim hWnd As Long
Dim strCurrentWindowText As String
Dim r As Integer
hWnd = GetForegroundWindow
Do Until hWnd = 0
strCurrentWindowText = Space$(255)
r = GetWindowText(hWnd, strCurrentWindowText, 255)
strCurrentWindowText = Left$(strCurrentWindowText, r)
'hWnd = GetWindow(hWnd, GW_CHILD)
If InStr(1, LCase(strCurrentWindowText), LCase(strPartOfCaption)) <> 0
Then GoTo Found
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
Exit Function
Found:
FindWindowLike = hWnd
End Function
++++++++++++++++++++++++++
Cuando ejecuto el codigo de la funcion principal no me esta dando el
resultado esperado, me selecciona las celdas del archivo excel previo
y no de esta ventana nueva (que se supone que ya esta activa..puesto
que ha superado la funcion Check_excel_open()
Sub Copy_production_data(Line As Integer)
Dim Product As String
Dim Eff_Output As Integer
Call Check_Excel_Open
Select Case Line
Case 1 'B1100
Array_Effective_output(iprod) = Range("AN17")
Array_Production_time(iprod) = Prod_time
Array_Product(iprod) = Range("U26")
.....................
Alquien me podria echar una mano??
Espero que me haya explicado bien.
Un saludo grande
Pepe