Valor de rango variable no de carga

Este código se utiliza para extraer datos de múltiples libros de trabajo almacenados en un archivo a un solo libro de trabajo utilizando el partido índice.

Una vez que he tirado de todos los datos en mi tabla, estoy tratando de limpiar la columna "N" usando la función "Right" para aislar una abreviatura estatal de los datos extraídos que parece esto - "36010 - Allen, OH" (es decir, "OH").

Para hacer esto he preparado State iguales Range("N8").Offset(i - 1, 0).Value donde viven los datos recién sacados y quiero aplicar la función "Justo" a los datos de esta columna para conseguir la abreviación del estado "OH".

El problema es que mi variable State no parece recoger los nuevos datos obtenidos por el partido índice - es decir, "36010 - Allen, OH". En lugar de eso se muestra como "". Buscando ayuda o preguntas similares sobre cómo resolver esto. Estoy seguro de que es algo super obvio.

Dim wb As Workbook
Dim PBPs As Workbook
Dim Hplan As String
Dim Folder_Path As String
Dim r As Range
Dim i As Integer
Dim State As String


 With Application
    .ScreenUpdating = False 'prevent screen flickering
    .Calculation = xlCalculationManual 'Preventing calculation
    .DisplayAlerts = False 'Turn OFF alerts
    .EnableEvents = False 'events all events
End With

Set wb = ThisWorkbook
Folder_Path = Range("E2").Value


    For i = 1 To Range("RunRange").Count
        
        Hplan = Range("Start").Offset(i - 1, 0)
        State = Range("N8").Offset(i - 1, 0).Value
        
        On Error GoTo 0
        Workbooks.Open Filename:=Folder_Path & "PBP_Data_Report_" & Hplan & ".xlsx"
        
        Set PBPs = ActiveWorkbook
        
        On Error Resume Next
        wb.Worksheets(1).Range("Start").Offset(i - 1, 8).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 0).Value, PBPs.Worksheets(1).Range("A:A"), 0))
        wb.Worksheets(1).Range("Start").Offset(i - 1, 9).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 1).Value, PBPs.Worksheets(1).Range("A:A"), 0))
        wb.Worksheets(1).Range("Start").Offset(i - 1, 10).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 2).Value, PBPs.Worksheets(1).Range("A:A"), 0))
        wb.Worksheets(1).Range("Start").Offset(i - 1, 11).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 3).Value, PBPs.Worksheets(1).Range("A:A"), 0))
        wb.Worksheets(1).Range("Start").Offset(i - 1, 12).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 4).Value, PBPs.Worksheets(1).Range("A:A"), 0))
        
        wb.Worksheets(1).Range("Start").Offset(i - 1, 10) = Right(State, 2)
        
        PBPs.Close
           
    Next i

End Sub

Pregunta hecha hace 3 años, 4 meses, 29 días - Por scriptsorcererf493


2 Respuestas:

  • El problema que estás experimentando con la variable State puede ser causado por la forma en que estás asignando el valor de la celda N8 después de abrir el libro de trabajo correspondiente. Es posible que necesites actualizar la referencia a la celda N8 después de abrir el libro de trabajo en cada iteración del bucle.

    Te recomendaría realizar los siguientes cambios en tu código:

    • Después de abrir el libro de trabajo en cada iteración del bucle, necesitas actualizar la referencia a la celda `N8` para obtener el valor correcto. Puedes hacerlo reasignando la variable `State` después de abrir el libro de trabajo:
    vba
    State = wb.Worksheets(1).Range("N8").Offset(i - 1, 0).Value
    
    • Asegúrate de que la hoja de cálculo desde la que estás extrayendo los datos en la celda `N8` esté activa antes de intentar obtener su valor. Puedes agregar una línea para activar la hoja de cálculo antes de extraer el valor:
    vba
    wb.Worksheets(1).Activate
    

    Con estos ajustes, la variable State debería recoger los nuevos datos obtenidos por el índice coincidente y la función Right debería funcionar como se espera para aislar la abreviatura del estado. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 18, 2020 a las 20:50 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema con tu código es que la variable State está siendo asignada antes de que se extraigan los datos del índice de coincidencia. Esto significa que State se está asignando a un valor vacío ("") antes de que se actualice con los datos extraídos.

    Para resolver este problema, debes asignar la variable State después de extraer los datos del índice de coincidencia. Aquí tienes el código actualizado:

    
    Dim wb As Workbook
    Dim PBPs As Workbook
    Dim Hplan As String
    Dim Folder_Path As String
    Dim r As Range
    Dim i As Integer
    Dim State As String
    
    
     With Application
        .ScreenUpdating = False 'prevent screen flickering
        .Calculation = xlCalculationManual 'Preventing calculation
        .DisplayAlerts = False 'Turn OFF alerts
        .EnableEvents = False 'events all events
    End With
    
    Set wb = ThisWorkbook
    Folder_Path = Range("E2").Value
    
    
        For i = 1 To Range("RunRange").Count
    
            Hplan = Range("Start").Offset(i - 1, 0)
    
            On Error GoTo 0
            Workbooks.Open Filename:=Folder_Path & "PBP_Data_Report_" & Hplan & ".xlsx"
    
            Set PBPs = ActiveWorkbook
    
            On Error Resume Next
            wb.Worksheets(1).Range("Start").Offset(i - 1, 8).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 0).Value, PBPs.Worksheets(1).Range("A:A"), 0))
            wb.Worksheets(1).Range("Start").Offset(i - 1, 9).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 1).Value, PBPs.Worksheets(1).Range("A:A"), 0))
            wb.Worksheets(1).Range("Start").Offset(i - 1, 10).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 2).Value, PBPs.Worksheets(1).Range("A:A"), 0))
            wb.Worksheets(1).Range("Start").Offset(i - 1, 11).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 3).Value, PBPs.Worksheets(1).Range("A:A"), 0))
            wb.Worksheets(1).Range("Start").Offset(i - 1, 12).Value = WorksheetFunction.Index(PBPs.Worksheets(1).Range("B:B"), WorksheetFunction.Match(wb.Worksheets(1).Range("Lookup").Offset(0, 4).Value, PBPs.Worksheets(1).Range("A:A"), 0))
    
            ' Asignar la variable State después de extraer los datos
            State = Range("N8").Offset(i - 1, 0).Value
    
            wb.Worksheets(1).Range("Start").Offset(i - 1, 10) = Right(State, 2)
    
            PBPs.Close
    
        Next i
    
    End Sub
    

    Con este cambio, la variable State se asignará correctamente con los datos extraídos del índice de coincidencia y podrás utilizarla para aplicar la función Right para extraer la abreviatura del estado.

    Respondida el Dec 18, 2020 a las 20:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0