Necesito alguien que controle Visual Basic Excel 2007

pezukero

Buenas,

Trabajo con bases de datos descargadas de SAP y el formato en el que te los bajas es una castaña. He creado una macro que me guarda los movimientos y al ejecutarla ya me estructura la base de datos en excel.

El siguiente paso es que dentro de esta base de datos, quiero que la macro me pinte las casillas con los códigos que yo le diga para que me los busque.

Es decir, generar un inputbox que tenga la función de buscar varios códigos a la vez (no sólo un código) y que le des a aceptar y te resalte coloreando las celdas donde se hallan esos códigos dentro de la base de datos.

el formato de los códigos de la base de datos a buscar es este: 100000-00-00.

Agradecido desde ya a quien me pueda echar un cable.

Mersi!

flopi01

Control + f y buscas los códigos que quieras, si es más de uno con una expresión regular bastaria

1 respuesta
NeV3rKilL

No necesitas VBA para ello. Formato condicional y usa una celda en vez de textbox.

Si quieres hacerlo con vba vas a tener que aprender a programar.

1 respuesta
pezukero

#2 Esa opción ya la sé, pero quiero crear una macro para que me lo haga con un sólo click.

#3 El formato condicional cuantos codigos te coge? 2 máximo? Supongamos que quiero buscar 100 códigos en una database de 4000 líneas. Quiero aprender a programar y que me lo haga con un sólo click. Hasta ahora he estado funcionando con formatos condicionales, filtros y control + F y veo que el ahorro en tiempo a posteriori con una macro es notable.

El próximo paso sería programar que elimine todas las lineas que no estén coloreadas, en el mismo macro, pero eso ya no sé si se puede hacer o qué xD

1 respuesta
NeV3rKilL

#4 Con VBA se puede hacer cualquier cosa. Hasta que te ponga la canción que escuchas en el spotify en una celda.

Busca en google guias y cosas con VBA "lo que sea" y te saldrá la doc oficial de microsoft y 1000 webs con tutoriales y cosas. Pero si nunca has programado y no sabes lo que es un while, yo empezaría por algún curso básico de programación a la vez que haces tus pinitos en vba.

Comandos útiles que pueden servirte para iniciarte...

Sheets("hoja1").Cells.ClearFormats ' Elimina formato de la hoja "hoja1"
Sheets("hoja1").Range("A1").Value = "texto" 'Escribe texto en la casilla A1 de la "hoja1".
Sheets("hoja1").Range("A1").Interior.ColorIndex = 37 'Pinta la casilla A1.

1 respuesta
pezukero

#5 He hecho esto, pero no me las pinta

Sub BUSCAR()
Dim FILAS, BUSCAR As Variant

BUSCAR = InputBox("INTRODUZCA EL CÓDIGO A BUSCAR", "BUSCAR")
If BUSCAR = "" Or Not IsNumeric(BUSCAR) Then
MsgBox "CÓDIGO NO VALIDO", 16, "BUSCAR"
Exit Sub
End If

BUSCAR = Val(BUSCAR)

For FILAS = 2 To 1000
Next

If Hoja1.Cells(FILAS, 1) = Val(BUSCAR) Then
Hoja1.Cells(FILAS, 1).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 2).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 3).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 4).Interior.Color = QBColor(14)
End If

MsgBox "CÓDIGO ENCONTRADO CORRECTAMENTE", 64, "BUSCAR"



End Sub

Del mismo modo me gustaría poder meter más de un código en la busqueda de una vez, y no tener que darle al macro por cada código que se busca.

Hay alguna opción? O de una vez lo busca volver a sacarte el menú del buscador sin darle tu click?

Y respecto a la celda que no me la pinta... alguna idea de por qué falla?

Agradecería que alguien me lo pase fixeado, la verdad que me urge tenerlo y tiempo me escasea para poder aprenderlo rápido.

M

El bucle no debería ser:

For FILAS = 2 To 1000

If Hoja1.Cells(FILAS, 1) = Val(BUSCAR) Then
Hoja1.Cells(FILAS, 1).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 2).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 3).Interior.Color = QBColor(14)
Hoja1.Cells(FILAS, 4).Interior.Color = QBColor(14)
End If

Next FILAS

?

2 respuestas
pezukero

#7 No sé.

La cosa es que me busca el código (me salta el mensaje de encontrado)

Pero si lo pinta, ni na de na.

pezukero

#7 He pillado este nuevo código:

Sub BuscarPalabras()
Dim celda As Range
Dim palabra As String

palabra = InputBox("Codigo a buscar")
palabra = "*" & palabra & "*"

For Each celda In Selection

    If celda.Value Like palabra Then
        celda.Interior.ColorIndex = 36
    End If
    
Next celda
End Sub
-----------------

Sub buscarOcurrenciasPalabras()
Dim palabra As Variant
Dim celda As Variant
Dim rangoPalabras As Range
Dim rangoTexto As Range
Dim contenidoCelda As String
Dim contenidopalabra As String
Dim posicion As Integer

On Error Resume Next

'Proporcionar el rango de la palabra a buscar
Set rangoPalabras = Application.InputBox(Prompt:="Seleccionar el rango de entrada de las palabras a buscar", _
        Title:="Rango palabras", Type:=8)

'Proporcionar el rango del texto
Set rangoTexto = Application.InputBox(Prompt:="Seleccionar el rango de entrada del texto donde se busca", _
        Title:="Rango texto", Type:=8)

'Buscar en cada celda del texto la palabra
For Each celda In rangoTexto
    
'Buscar cáda palabra en la celda activa For Each palabra In rangoPalabras contenidoCelda = LCase(celda.Value) 'convertir a minúscula las celdas del texto contenidopalabra = LCase(palabra.Value) 'convertir a minúscula la palabra a buscar posicion = InStr(1, celda.Value, contenidopalabra) If posicion > 0 Then celda.Characters(posicion, Len(palabra)).Font.Color = vbRed End If Next palabra Next celda End Sub

Está bastante bien esta macro.

Me pilla bien los códigos al seleccionar rangos de celdas.

Lo que me gustaría cambiar es que en vez de marcar las letras rojo, pinte las celdas enteras, y a poder ser pinte toda la linea que contempla esa celda.

Y ya por añadir, que esos códigos que me ha pintado me los traslade (toda la linea) a una nueva hoja de excel.

Eso ya sería top.

Usuarios habituales

  • pezukero
  • Maverick
  • NeV3rKilL
  • flopi01