Me pueden decir por que este error de esta macro

Tengan buen día, mi pregunta es si alguno de ustedes puede ayudarme con esta macro vba se trata de convertir una partida de ajedrez que esta en notación algebraico y la quier ocombertir en notación coordenadas, me arroja error en la línea: columna_inicio = InStr(columnas, Mid(partida, i + 1, 1)), partida de ajedres esta en la celda A1, esta es la partida,

1. E4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bc4 Nxe4 5. Bxf7+ Kxf7 6. Nxe4 d5 7. Neg5+ Kg8 8. D4 h6 9. Nh3 Bg4 10. Dxe5 Nxe5 11. Nf4 c6 12. H3 Nxf3+  13. Gxf3 Bf5 14. Be3 Bb4+ 15. C3 Ba5 16. Rg1 Qe8 17. Nxd5 Qf7 18. Nf4 Re8 19. Qb3 Bc7 20. Qxf7+ Kxf7 21. Nh5 g6 22. Ng3 Bxh3 23. O-O-O Rd8  24. Rxd8 Bxd8 25. Rh1 Bg2 26. Rxh6 Rxh6 27. Bxh6 Bxf3 28. Be3 1/2-1/2 0       

La macro

Sub ConvertirNotacionAlgebraicaACoordenadas()
    Dim columnas() As String
    Dim filas() As String
    Dim fila_inicio As Integer
    Dim columna_inicio As Integer
    Dim fila_fin As Integer
    Dim columna_fin As Integer
    Dim partida As String
    Dim rango As Range
    Dim celda As Range
    ' Definir las letras que representan las columnas del tablero
    columnas = Split("a,b,c,d,e,f,g,h", ",")
    ' Definir las filas del tablero
    filas = Split("8,7,6,5,4,3,2,1", ",")
    Set rango = Range("A1:A100") ' Especifica el rango de celdas que contienen las partidas
    For Each celda In rango ' Recorre todas las celdas del rango especificado
        partida = celda.Value ' Obtener la partida de la celda actual
        partida = Replace(partida, ".", "") ' Eliminar los números de jugada
        Do While InStr(partida, "  ") > 0 ' Eliminar espacios dobles
            partida = Replace(partida, "  ", " ")
        Loop
        For i = 1 To Len(partida) ' Recorrer cada caracter de la partida
            If Mid(partida, i, 1) = " " And Mid(partida, i + 1, 1) Like "[a-h]" And Mid(partida, i + 2, 1) Like "[1-8]" Then
                columna_inicio = InStr(columnas, Mid(partida, i + 1, 1)) ' Obtener la columna de inicio de la jugada
                fila_inicio = InStr(filas, Mid(partida, i + 2, 1)) ' Obtener la fila de inicio de la jugada
                columna_fin = InStr(columnas, Mid(partida, i + 4, 1)) ' Obtener la columna de destino de la jugada
                fila_fin = InStr(filas, Mid(partida, i + 5, 1)) ' Obtener la fila de destino de la jugada
                celda.Offset(0, 1).Value = celda.Offset(0, 1).Value & columnas(columna_inicio - 1) & filas(fila_inicio - 1) & columnas(columna_fin - 1) & filas(fila_fin - 1) & " "
            End If
        Next i
    Next celda
End Sub

1 respuesta

Respuesta

El error en la línea que mencionas se debe a que la función InStr espera como primer argumento una cadena de texto en la que se buscará un carácter o una subcadena, pero en tu código estás pasando un array de cadenas.

Para solucionar este error, puedes cambiar la declaración de las variables columnas y filas de arrays de cadenas a cadenas simples, separadas por comas. Aquí te muestro cómo debería ser la declaración y asignación de estas variables:

Dim columnas As String
Dim filas As String
' Definir las letras que representan las columnas del tablero
columnas = "a,b,c,d,e,f,g,h"
' Definir las filas del tablero
Filas = "8,7,6,5,4,3,2,1"

Luego, en las líneas donde utilizas la función InStr, puedes eliminar la referencia a los arrays y utilizar directamente las cadenas columnas y filas. Aquí tienes un ejemplo de cómo se modificaría la línea problemática:

columna_inicio = InStr(1, columnas, Mid(partida, i + 1, 1))

Realiza los mismos cambios en las otras líneas donde utilizas InStr para obtener las columnas y filas correspondientes.

Una vez que hayas realizado estos cambios, la macro debería ejecutarse correctamente y convertir la notación algebraica en notación de coordenadas. Recuerda que también es importante que el rango de celdas especificado en la línea Set rango = Range("A1:A100") contenga la partida de ajedrez que deseas convertir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas