Estoy intentando reemplazar la hoja de trabajo automáticamente. Actualmente tengo varias hojas de trabajo con el título "18 de enero", "18 de febrero", "18 de marzo", etc. Tengo un formulario de usuario que se inicia antes de que se ejecute la macro. Puedo ingresar un nuevo año (es decir, 2019), sin embargo, el código continúa mostrando "18" para mi año de formulario. Es como si la entrada en el formulario de usuario no funcionara. El script que estoy usando utiliza una declaración de caso para seleccionar los archivos deseados con un año anterior y reemplazarlo con el año actual.

Sub NewFiscalYear()

Dim ws As Worksheet
Dim PrevYear As Integer
Dim FormYear As Integer

FormYear = Format(Date, "yy")
PrevYear = FormYear - 1

'Disabling Display Alerts
Application.DisplayAlerts = False
Application.ScreenUpdating = False

    'Changing FY Date on Forms
     If FormMonth = "AUG" Then

        For Each ws In Worksheets
            Select Case ws.Name
                Case "JAN " & PrevYear, "FEB " & PrevYear, "MAR " & PrevYear, "APR " & PrevYear, _
                "MAY " & PrevYear, "JUN " & PrevYear, "JUL " & PrevYear, "AUG " & PrevYear, _
                "SEP " & PrevYear, "OCT " & PrevYear, "NOV " & PrevYear, "DEC " & PrevYear
                    ws.Name = "ws.name " & FormYear
            End Select
        Next
    End If

Estoy trabajando en un informe grande que recopila información de varios otros libros de trabajo. Mi formulario de usuario incluye una fecha para ingresar (FormYear) y un mes para elegir a través de un cuadro combinado (FormMonth). Una vez seleccionados, se ejecuta la macro. Tengo el informe funcionando muy bien, sin embargo, he tenido contratiempos con el nuevo año fiscal.

***** Mi objetivo es que los usuarios ejecuten el informe el primer mes del nuevo año fiscal, con suerte sin que se den cuenta de que nada ha cambiado (con la excepción de que parece una hoja de trabajo nueva). Las pestañas indican el mes actual que se seleccionó junto con el año fiscal que se seleccionó en el formulario de usuario antes de ejecutar la macro. Una vez que las pestañas estén identificadas con el año nuevo, revisaré y restableceré todos los formularios con datos en blanco. ¡Espero que esto haya dejado las cosas un poco más claras! *****

¡Cualquier consejo o truco será muy apreciado!

0
Derek Harden 16 oct. 2018 a las 18:02

2 respuestas

La mejor respuesta

Tu línea de cambio de nombre está mal:

ws.Name = "ws.name " & FormYear

Esto intentaría cambiar "JAN 18" a "ws.name 19" porque ha envuelto el objeto entre comillas.

Incluso si tiene las citas correctas:

    ws.Name = ws.name & " " & FormYear

Cambiaría "18 de enero" a "18 de enero de 19"


Tratar:

ws.Name = Replace(ws.Name, PrevYear, FormYear)

EDITAR

Además, creo que su PrevYear / FormYear puede ser incorrecta.

Yo iría con:

PrevYear = Format(Date, "yy") ' so this is the current year value
FormYear = PrevYear + 1       ' this becomes next year value
3
CLR 16 oct. 2018 a las 15:34

FormYear = Format(Date, "yy") devolverá 18 hasta que el reloj llegue el 1 de enero de 2019.

Si necesita obtener 19, ahora , necesita:

FormYear = CInt(Format(Date, "yy")) + 1

O

FormYear = CInt(Format(DateAdd("yyyy", 1, Date),"yy"))


Después de una mayor aclaración, esto debería hacer lo que busca:

Sub NewFiscalYear()

  Dim ws As Worksheet
  Dim PrevYear As Integer
  Dim FormYear As String

  FormYear = CInt(Format(Date, "yy"))
  PrevYear = CStr(FormYear - 1)

Tenga en cuenta la conversión explícita de cadenas a números enteros y viceversa. VBA hará esto por usted, pero de esta manera usted (y todos los demás) saben que es intencional

'remove these lines until everything works fine
  'Disabling Display Alerts
'  Application.DisplayAlerts = False
'  Application.ScreenUpdating = False

Declare una constante aquí para que sepa por qué este "valor mágico" está ahí. Usted sabe que es el comienzo del año fiscal, pero dentro de 5 años, cuando eso cambie, es posible que alguien más no sepa por qué esto ya no funciona y no se dé cuenta de que el comienzo del año fiscal cambió.

  Const FISCAL_YEAR_START_MONTH as String = "AUG"
  'Changing FY Date on Forms
  If FormMonth = FISCAL_YEAR_START_MONTH Then

    For Each ws In Worksheets
      Select Case ws.Name
        Case "JAN " & PrevYear, "FEB " & PrevYear, "MAR " & PrevYear, "APR " & PrevYear, _
             "MAY " & PrevYear, "JUN " & PrevYear, "JUL " & PrevYear, "AUG " & PrevYear, _
             "SEP " & PrevYear, "OCT " & PrevYear, "NOV " & PrevYear, "DEC " & PrevYear

Una vez que haya encontrado una hoja de trabajo cuyo patrón de nomenclatura coincida con lo que está buscando, extraiga los primeros 3 caracteres (el nombre del mes) y agregue el año nuevo al final.

          ws.Name = Left(ws.Name, 3) & " " & CStr(FormYear)
      End Select
    Next
  End If

'disabled them earlier, make sure we reenable them now
'doesn't hurt to enable them if they weren't disabled earlier
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub
2
FreeMan 16 oct. 2018 a las 15:57