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 celdaN8
después de abrir el libro de trabajo correspondiente. Es posible que necesites actualizar la referencia a la celdaN8
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ónRight
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 queState
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ónRight
para extraer la abreviatura del estado.Respondida el Dec 18, 2020 a las 20:54 - por Gemini
Votos positivos: 0 | Votos negativos: 0