Buenos días:
Les comento. Estoy montando una macro en excel (2003), que obtiene una serie de datos de SQL SERVER. Tras obetenerlos, los copia y hace pegado especial de valores y formatos en un nuevo libro.
Estoy teniendo un problema cuando ejecuto la macro sin depurarla, ya que me pega en el nuevo libro:
"DatosExternos_2: Importando datos..."
Es decir, llega al paso de copiado/pegado antes de finalizar la obtención de datos.
El código es el siguiente:
Código vb:
Ver original'2 - OPERACIONES BBDD
strConn = "ODBC;DSN=XXXXXXX;Description=XXXXXX;UID=XXXXXXXX;PWD=XXXXXXXX"
sqlString = "SELECT " & _
"substring(FechaSIE,5,2) [MES], " & _
"UnidadAdmision [ADMISION], " & _
"PRODUCTO, " & _
"sum(Numero) [ENVIOS] " & _
"FROM tSIE_PRODUCTOS_CONCILIACION " & _
"WHERE " & _
"year(FechaSIE) = '" & Anio & "' " & _
"and month(FechaSIE) = '" & MesAnterior & "' " & _
"GROUP BY FechaSIE, UnidadAdmision, Producto order by FechaSIE, UnidadAdmision, Producto "
Range("F2").Select
If Range("F2") = "" Then
With ActiveSheet.QueryTables.Add(Connection:=strConn, Destination:=Range("A1"), Sql:=sqlString)
.Refresh
End With
Else
ActiveSheet.Select
ActiveSheet.Cells.ClearContents
With ActiveSheet.QueryTables.Add(Connection:=strConn, Destination:=Range("A1"), Sql:=sqlString)
.Refresh
End With
End If
'***************************************************************************************
'3 - CÁLCULO DE ENVÍOS TOTALES
'con este parametro (xlDown) buscará la última celda con valor hacia abajo
celda = Range("D1").End(xlDown).Address
Range("F1").Select
Selection.Font.Bold = True
Range("F1").Value = "TOTAL ENVÍOS"
Range("F2").Select
Application.CutCopyMode = False
ActiveCell.Formula = "=SUM($D$2: " & celda & ")"
'***************************************************************************************
'4 - COPIA DE DOCUMENTO
ruta = ThisWorkbook.Path & "\"
NombreFichero = Anio & MesAnterior & "_" & NombreMes & "_Conc_XX_XXX.xls"
Destino = ruta & NombreFichero
'validamos si existe el libro
Set fso = CreateObject("Scripting.FileSystemObject")
With fso
If .FileExists(Destino) Then
With .GetFile(Destino)
'se abre el libro y borra el contenido
Workbooks.Open Filename:=Destino
Workbooks(2).Activate
Workbooks(2).Sheets(1).Activate
ActiveSheet.Cells.ClearContents
End With
Else
'crea el libro
Set wrkNuevo = Workbooks.Add
'crea un libro nuevo con una hoja
Application.SheetsInNewWorkbook = 1
ActiveWorkbook.SaveAs Filename:=Destino, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End If
End With
'copiamos y pegamos el contenido del libro 1
Workbooks(1).Sheets(1).Activate
Cells.Select
Selection.Copy
Workbooks(2).Sheets(1).Activate
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
'cambiamos el nombre de la pestaña al libro nuevo
Application.DisplayAlerts = False
ActiveSheet.Name = MesAnterior & " - " & NombreMes
'salvamos el libro
ActiveWorkbook.Save
A ver si alguien me puede orientar cómo hacer que se 'espere' el copiado a que finalice la consulta.
Muchas gracias.
Saludos.