Codigo VB para macro Excel

Hola a todos. Antes que nada muchas gracias por la oportunidad de consultar.
Estoy realizando una macro de excel para poder automatizar setleos, settlement rules.
Mi duda viene a que no se que codigo usar para que la macro reconozca la primer casilla de texto vacia


Se que el codigo en excel seria:
ActiveSheet.Range(“a1”).End(xlDown).Offset(1, 0).Select
O sea que la macro seleccionaria la primera celda vacia de excel empezando por A1 hacia abajo.
Seria hacer algo asi pero en SAP.
Agradezco cualquier ayuda, muchas gracias!

hola saikyos,
Lo mas facil es que primero vayas al grabador de scripts de sap y hagas una pequeña rutina de lo que necesitas. luego editas ese codigo con cualquier editor de texto y lo pegas en la macro,.
Por ultimo modificas los campos segun necesites. Te pongo un pequeño ejemplo de como te deberia ir quedando aprox. el codigo en la macro

_SapSession.FindById(“wnd[1]/usr/tblSAPLMGMMTC_VIEW/txtMSICHTAUSW-DYTXT[0,” & CStr(nRowIndex) & “]”).Text) = “tu variable”

Como lo ves?

1 me gusta

Hola renatondo. Muchas gracias por tu respuesta. Así es, grabando paso a paso en SAP y luego pasándolo a texto este es mi código:

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "/ncj02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxt*PRPS-POSID").text = "USIC.016783.60.31.01"
session.findById("wnd[0]/usr/ctxt*PRPS-POSID").setFocus
session.findById("wnd[0]/usr/ctxt*PRPS-POSID").caretPosition = 20
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsTABCJLE/tabpLEGR/ssubLISTE:SAPLCJWB:0902/tblSAPLCJWBTAB_902").getAbsoluteRow(0).selected = true
session.findById("wnd[0]/usr/tabsTABCJLE/tabpLEGR/ssubLISTE:SAPLCJWB:0902/tblSAPLCJWBTAB_902/txtPRPS-STUFE[1,0]").setFocus
session.findById("wnd[0]/usr/tabsTABCJLE/tabpLEGR/ssubLISTE:SAPLCJWB:0902/tblSAPLCJWBTAB_902/txtPRPS-STUFE[1,0]").caretPosition = 0
session.findById("wnd[0]/usr/tabsTABCJLE/tabpLEGR/ssubLISTE:SAPLCJWB:0902/subBUTTONS:SAPLCJWB:3993/btnBUTTON_ABRV").press
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").text = "1081657"
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").setFocus
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").caretPosition = 7
session.findById("wnd[0]").sendVKey 0

Mi problema esta en esta parte:

session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").text = "1081657"
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").setFocus
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]").caretPosition = 7

Yo puedo editar el código y establecer mi variable por lo que el numero “1081657” seria variable. El problema es la posición donde se pone este texto, lo que necesito es que ese texto sea colocado en el primer cuadro que esta vacío y sin datos, ya que con otro proyecto el lugar donde iría el texto puede variar y ya estar ocupado. Espero explicarme bien.

Hola amigo.

Hace tiempo tuve que hacer una grabación para actualizar las normas de liquidación y lo que hice para resolver esta situación es un poco distinto a tu enfoque.

Por ejemplo tu estas buscando la primer linea vacía. lo que yo hice en la grabación es que hay un boton que te lleva la ultima linea vacía, en esa linea llenaba la norma y luego daba enter, al momento de dar enter lo que hace el grid es que esa ultima linea la sube para que todas las lineas con datos estén seguidas.

Espero que te sea de ayuda.

Saludos

Hola saikyos,
Si te he entendico bien prueba a hacer algo asi:
"primero creas otra variable para verificar el valor de ese campo
Compruebo =session.findById(“wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]”).text
"a continuacion si es un campo vacio lo llenas con tu variable y si no no haces nada
If Compruebo = “” then
session.findById(“wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,7]”).text=“1081657”
end if

Muchas gracis a ambos!!, funciona muy bien, de esto me surge otra consulta si no es mucha molesta.

session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES").verticalScrollbar.Position = 650
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,0]").Text = Range("B2")
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES").verticalScrollbar.Position = 651
session.findById("wnd[0]/usr/tblSAPLKOBSTC_RULES/ctxtDKOBR-EMPGE[1,0]").Text = Range("B3"

lo que estoy haciendo es tomando la posicion 650 y pegando el contenido de lo que hay en la celda B2, luego la posicion 651 y pego lo que hay en B3 y así sucesivamente. Mi consulta es si hay alguna manera de que se pueda copiar todo un rango de mi planilla excel y pegar todo lo que hay en ese rango en la posicion 650 por ejemplo, esto provocaria que el primer elemento copiado quede pegado en la posicion 650 y los demas a la 651,652 y así sucecivamente… tal como lo haria un humano si copia un rango y lo pega sobre una posicion llenandose las posiciones siguientes.
De nuevo muchas gracias por su ayuda!!!

Y si en lugar de pegar un rango vas pegando dato por dato con un contador, por ejemplo de filas. Podria ser algo parecido a esto:

NumeroDeDatos = WorksheetFunction.CountA(Worksheets(1).Range(“B:B”))
For i=1 to NumeroDeDatos
SAPsession.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”).setCurrentCell FilaActual, “”
SAPsession.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”).selectedRows = FilaActual
(estas sentencias seras diferentes en tu codigo, pero la idea es posicionarte en una fila y partir de ahi ir bajando tantos registros como hayas contado en la hoja de excel)

“Vas pegando datos”
“saltas al siguiente registro en sap”
FilaActual=FilaActual+1
“sigues con el bucle”
next

Muchisimas gracias.
Voy a ver si puedo probarlo y aviso.
Saludos!

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.