Ayuda con la carga de datos usando macros en Microsoft Excel
Hola.Me sucede algo muy curioso con excel. Tengo un libro de gestión de alumnos de un colegio.En la hoja1, que le llamé "carga", emulé un formulario de carga de datos.Los datos cargados allí, luego con una macro se copian y se pegan en otra hoja (hoja2)que funciona como base de datos la que se ordena automáticamente en orden alfabético con una macro. Hasta aquí todo bien.Los datos se cargan en la base sin ningún problema.En la hoja3 emulé otro formulario, pero esta vez de búsqueda, usando sendas fórmulas de búsqueda.El problema que tengo es que en forma aleatoria al poner en la celda correspondiente al apellido, no realiza la búsqueda(o sea da error). ES como si no encontrara el apellido.El problema se resuelve yendo a la base, tipeando nuevamente el apellido manualmente y recién allí realiza la búsqueda correctamente. ¿Tienes idea a qué se puede deber esto?. Me sucede muy a menudo. ¿Puedo corregirlo dealguna manera?
Gracias
Idea, lo que se dice idea... pocas. Mejor sería que viera y revisara las rutinas, ahí seguramente está la explicación. Revisa si estás trabajando con modo cálculo automático. Revisa si haces mención en la rutina a la hoja activa o tiene nombre. Es mejor que diga: Sheets("Hoja2")... que ActiveSheet ya que podrías estar parado en otra hoja. Con qué fórmula estás haciendo la búsqueda. Si se contempla que la tabla esté ordenada o no. Si aún así no se resuelve podes enviarme el libro a mi correo.
Hola Elsa Matilde. Gracias por contestar y prdón por la demora.La rutina de "alta" de datos, o sea los datos se copian de una hoja que emula un formulario a otras hojas que funcionan como bases de datos para diferentes fines es la siguiente. Quisiera que me digas si hay algún error. Gracias Sub Alta_Datos_1() Application.ScreenUpdating = False Sheets("Alta").Select If Cells(2, 2).Value = "" Then Range("B2").Select Else If Cells(44, 2).Value = "" Then MsgBox ("DEBE INTRODUCIR EL CURSO Y LA DIVISIÓN") Range("B2").Select Else Sheets("Alta").Select If Cells(2, 2) <> "" Then Range("F53:F140").Select SElection.Copy Sheets("Base Secretaría").Select Fila = Cells(1, 90).Value Cells(Fila, 1).Select SElection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1:AS1000,CI1:CI1000").Select SElection.Copy Sheets("Base Administración").Select Range("A1").Select ActiveSheet.Paste Range("A1:AT1000").Select SElection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _ :=xlSortNormal Range("A1").Select Sheets("Base Secretaría").Select Range("A1").Select Sheets("Alta").Select Range("F48:F51").Select SElection.Copy Sheets("Base Calificaciones Proceso").Select Fila = Cells(1, 221).Value Cells(Fila, 1).Select SElection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1").Select Sheets("Alta").Select Range("F48:F51").Select SElection.Copy Sheets("Base").Select Fila = Cells(1, 207).Value Cells(Fila, 1).Select SElection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1").Select Sheets("Alta").Select Range("B2:B7,B9:B45,B46:B52,B58:B90").Select SElection.ClearContents Range("B2").Select Application.CutCopyMode = False End If End If End If End Sub
Esto no parece corresponder a la consulta anterior, ¿verdad? Bueno, te devuelvo la rutina con comentarios donde veo instrucciones que 'quizás' no es lo que se quiere hacer. No están mal, solo coloqué los comentarios para ayudarte a pensar y que analices lo que estás haciendo. Sub Alta_Datos_1() Application.ScreenUpdating = False Sheets("Alta").Select 'si B2= "" se selecciona, pero no se hace nada If Cells(2, 2).Value = "" Then Range("B2").Select Else 'si B2 <> "" y B44 = "" se selecciona B2 y no se hace nada If Cells(44, 2).Value = "" Then MsgBox ("DEBE INTRODUCIR EL CURSO Y LA DIVISIÓN") Range("B2").Select Else 'si B2 <> "" y B44 <> "" .. nuevamente se pregunta Sheets("Alta").Select 'ya sabemos hasta aquí que B2 <> "" (no hace falta volver a preguntar), se selecciona F53... If Cells(2, 2) <> "" Then Range("F53:F140").Select Selection.Copy Sheets("Base Secretaría").Select 'se guarda como fila el CONTENIDO de la celda col 90 y fila 1 fila = Cells(1, 90).Value 'ese CONTENIDO es el nro de fila? Cells(fila, 1).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1:AS1000,CI1:CI1000").Select 'acá estamos copiando qué? Selection.Copy Sheets("Base Administración").Select Range("A1").Select ActiveSheet.Paste 'es mejor esta instrucción: Selection.Copy Destination:=Sheets("Base Administración").Range("A1") Sheets("Base Administración").Select Range("A1:AT1000").Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _ :=xlSortNormal Range("A1").Select 'porqué seleccionar una hoja para irte a seleccionar otra? Sheets("Base Secretaría").Select Range("A1").Select Sheets("Alta").Select Range("F48:F51").Select Selection.Copy Sheets("Base Calificaciones Proceso").Select 'nuevamente estamos colocando como fila el CONTENIDO fila = Cells(1, 221).Value Cells(fila, 1).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1").Select Sheets("Alta").Select Range("F48:F51").Select Selection.Copy Sheets("Base").Select fila = Cells(1, 207).Value Cells(fila, 1).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Range("A1").Select Sheets("Alta").Select Range("B2:B7,B9:B45,B46:B52,B58:B90").Select Selection.ClearContents Range("B2").Select Application.CutCopyMode = False End If End If End If End Sub