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.