Usando un bucle para extraer datos para sobresalir


1

primer temporizador aquí y soy nuevo en Excel 2013, así que si me equivoco en algún lugar, ¡hágamelo saber!

Estoy tratando de recopilar estadísticas de los Detroit Red Wings de 1932-2014. Recientemente aprendí que puedo extraer datos de un sitio web a través de Datos-> Obtener datos externos-> De la web

Hasta ahora he estado abriendo una nueva hoja, sacando los datos a Excel y cambiando el nombre de la hoja para que coincida con el año

A continuación se muestra mi intento de bucle pero no funciona.

Lo que sucedería idealmente es que ejecuto una macro y crea una nueva hoja y luego completa los datos para esa hoja, para cada año desde la temporada 1932-33 hasta la temporada 2013-2014 y renombra las hojas para que coincidan con los años.

(EJ: ejecuto la macro y crea una hoja titulada "1932-33" extrae los datos del sitio web y los coloca en la hoja. Luego crea una hoja titulada "1933-34" extrae los datos del sitio web y coloca en la hoja)

Notas importantes aquí es la dirección web del sitio con la temporada 1932-33

http://www.whatifsports.com/nhl-l/profile_team.asp?hfid=11&season=1932-33

Descubrí que para cambiar el año simplemente ajusta el "1932-33" al final de la URL al año que desee.

Cualquier ayuda es apreciada!

Sub firstLoopAttempt()
'
' firstLoopAttempt Macro
'

'
Dim i As Integer

For i = 1942 To 2014

    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.whatifsports.com/nhl-l/profile_team.asp?hfid=11&season=1942-43" _
        , Destination:=Range("$A$1"))
        .CommandType = 0
        .Name = "profile_team.asp?hfid=11&season=1942-43"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
    Next i
    ActiveCell.FormulaR1C1 = ""
    Range("C1").Select
    ActiveCell.FormulaR1C1 = ""
    Range("C3").Select
    ActiveCell.FormulaR1C1 = ""
    Range("B5").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A8").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A4").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A3").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A25").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A29").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A30").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A31").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A32").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A33").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A34").Select
    ActiveCell.FormulaR1C1 = ""
    Cells.Replace What:="View Player Profile on Hockey-Reference.com", _
        Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:= _
        False, SearchFormat:=False, ReplaceFormat:=False
    Columns("A:A").Select
    Range("A4").Activate
    Selection.ColumnWidth = 21.91
    Columns("B:B").Select
    Range("B4").Activate
    Selection.ColumnWidth = 4.09
    Columns("C:C").Select
    Range("C4").Activate
    Selection.ColumnWidth = 3.09
End Sub

Respuestas:


0

Pones un bucle for a su alrededor, pero nunca usas "i" para nada. Probablemente por eso no está funcionando. ;)

Pruebe algo como esto (advertencia de que esto no ha sido probado y no tiene implementada una verificación de error de conversión):

Dim startYear As Integer
Dim endYear As Integer
Dim strStartYear as String

For startYear = 1942 To 2014

    ' Convert the current start year number to a string, then take the last two characters and assign to strStartYear
    ' So 1942 becomes "42".
    strStartYear = Right(CStr(startYear),2)
    ' Convert the string back into an (integer) number, and add 1 to create the End year.
    endYear = CInt(strStartYear)+1

    ' Use these variables in your other commands to specify the start/end year
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.whatifsports.com/nhl-l/profile_team.asp?hfid=11&season=" & startYear & "-" & endYear _
        , Destination:=Range("$A$1"))
        .CommandType = 0
        .Name = "profile_team.asp?hfid=11&season=" & startYear & "-" & endYear
        'other stuff omitted  for brevity
    End With
Next startYear

¡Gracias por el consejo! Estoy tratando de ejecutar la macro pero obtengo el Error de tiempo de ejecución '5' Procedimiento o argumento no válido Miré esa línea 5 del código y es la línea '.CommandType = 0'
user3481670

Esa es una pregunta diferente. :) Inicie una nueva pregunta y publique el código que ha intentado (esta vez), y también publique el código de error exacto que está obteniendo.
Ƭᴇcʜιᴇ007

Ese mensaje de error no dice que está en la línea cinco. Está diciendo que algún fragmento de código tiene un error de tiempo de ejecución que es el error n. ° 5. ¿Dónde se resalta el código cuando aparece el mensaje de error?
wbeard52
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.