У меня есть 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