У меня есть prevSheet() в моих листах Excel. Всякий раз, когда я копирую и вставляю лист шаблона в новый лист, эта функция работает. Позже я создал Addworksheets() через VBA, которая копирует лист шаблона в новый лист, переименовывает и блокирует его. С тех пор эта prevSheet() не обновляется. Каждый раз, когда мне нужно выбрать ячейку и нажать клавишу ВВОД, чтобы обновить ее, хотя параметры расчета установлены на Automatic .

Может кто-нибудь есть помощь для этого, пожалуйста?

Это моя функция addworksheet():

Sub AddWorksheet() Application.Volatile

Dim i As Integer 
Dim ws1 As Worksheet

If ThisWorkbook.ProtectStructure = False Then


Dim dateString As String, TheDate As Date Dim valid As Boolean: valid
= True

Do   dateString = InputBox("Enter the first date of the month for which you want to prepare the sheet", "Enter The Date", Day(Now()) & "/" & Month(Now()) & "/" & Year(Now()))
     If dateString = "" Then

    MsgBox "You cancelled the action of creating new sheets.  If you want to create new sheets for the month, it is manndatory to enter the date to detect the month and number of days of the month"
    Exit Sub
       Else
    If IsDate(dateString) Then
        TheDate = DateValue(dateString)
        valid = True
    Else
        MsgBox "Invalid date"
        valid = False
    End If
         End If    
Loop Until valid = True

Dim mon As Integer 
Dim yea As Integer 
Dim days As Integer


mon = Month(TheDate) 
yea = Year(TheDate)

days = Day(Application.WorksheetFunction.EoMonth(TheDate, 0))

Dim date1 As Date date1 = DateValue("1-" + mon + 1 & "-" & yea)



For i = 1 To 31

'# if to check if sheets already exists If Not sheetExists(32 - i) Then Set ws1 = Worksheets.Add(After:=Worksheets("DEBTORS"))


If 32 - i <= days Then Worksheets("TEMPLATE").Cells.Copy ws1.Cells(1, 1) End If

ws1.NAME = 32 - i

If i = 31 Then Worksheets("1").Range("$f$44").Value = date1 End If

ws1.Protect 32 - i, True, True End If ' # end of if that checks if sheet already exisits


Next


Else MsgBox "Please Remove Protection on your workbook structure to add sheets" & Chr(10) & "Review Tab => Protect Workbook" End If


End Sub




Function sheetExists(sheetToFind As String) As Boolean
    sheetExists = False
    For Each Sheet In Worksheets
        If sheetToFind = Sheet.NAME Then
            sheetExists = True
            Exit Function
        End If
    Next Sheet End Function

Это моя функция prevsheet():

Function PrevSheet(RCELL As Range)


    'Application.Volatile

    Dim i As Integer
    Dim s As String
    i = RCELL.Cells(1).Parent.Index
    s = RCELL.Cells(1).Parent.NAME

    If s = "1" Then
    PrevSheet = 0

    Else

    PrevSheet = ThisWorkbook.Sheets(i - 1).Range(RCELL.Address)

    End If


End Function

1 ответ1

1

Я решил проблему. Добавив Appliction.volatile в мою пользовательскую функцию, которая теперь вынуждает его обновляться каждый раз, когда обновляется что-то или какая-то ячейка.

Закомментированная строка в моем коде функции prevSheet() решила проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .