Excel 我想修改代码,以便在打开工作簿时立即运行宏
宏的作用是锁定包含所有日期的列,但包含今天日期的列除外。我在每一张纸上都对它进行了编码,并且在所有的纸上都是完全相似的。宏在任何单元格中的数据更改时运行。但我希望在打开工作簿时运行宏 我试图在“此工作簿”中编写代码,但我不知道如何编写。我也试着在“模块”中这样做,但没有成功Excel 我想修改代码,以便在打开工作簿时立即运行宏,excel,vba,Excel,Vba,宏的作用是锁定包含所有日期的列,但包含今天日期的列除外。我在每一张纸上都对它进行了编码,并且在所有的纸上都是完全相似的。宏在任何单元格中的数据更改时运行。但我希望在打开工作簿时运行宏 我试图在“此工作簿”中编写代码,但我不知道如何编写。我也试着在“模块”中这样做,但没有成功 Private Sub Worksheet_Change(ByVal Target As Excel.Range) 'vps Dim x As Long x = 7 ThisWorkbook.ActiveS
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'vps
Dim x As Long
x = 7
ThisWorkbook.ActiveSheet.Unprotect Password:="123456"
ThisWorkbook.ActiveSheet.Cells.Locked = False
Do Until IsEmpty(Cells(5, x))
If Cells(5, x) <> Date Then
Columns(x).Locked = True
End If
x = x + 1
Loop
ThisWorkbook.ActiveSheet.Protect Password:="123456"
End Sub
Private子工作表\u更改(ByVal目标为Excel.Range)
“副总裁
暗x等长
x=7
ThisWorkbook.ActiveSheet.Unprotect密码:=“123456”
ThisWorkbook.ActiveSheet.Cells.Locked=False
直到空为止(单元格(5,x))
如果单元格(5,x)为日期,则
列(x).Locked=True
如果结束
x=x+1
环
ThisWorkbook.ActiveSheet.Protect密码:=“123456”
端接头
我希望宏在工作簿打开时运行,而不仅仅是在单元格中的数据更改时运行。锁定工作簿上的单元格打开
特征
- 要在工作簿打开时运行以下(或任何)宏,您必须 要使用其工作簿,请单击“打开”事件。在VBA中双击此工作簿。在里面 第一个下拉菜单选择工作簿,第二个下拉菜单选择打开
- 对于工作簿中包含此宏的每个工作表,取消保护 它会打开并解锁所有单元格。然后检查指定的行范围中的日期 并锁定未找到今天日期的整列单元格。 最后保护工作表
- 此外,室内颜色将在以下单元格中有所不同: 找到了今天的日期
Sub ProtectPrevious()
Const cRow As Long = 5 ' Date Row Number
Const cFirstC As Variant = 7 ' First Column Letter/Number e.g. 7 or "G"
Const cToday As Long = 6 ' Today Cell ColorIndex e.g. 6 is Yellow
Const cDays As Long = 15 ' Other Days ColorIndex e.g. 15 is some Gray
Dim ws As Worksheet ' Current Worksheet
Dim LastC As Long ' Last Column Number
Dim j As Integer ' Column Counter
For Each ws In ThisWorkbook.Worksheets
With ws
' Prepare for processing.
.Unprotect Password:="123456"
.Cells.Locked = False
' When there is no data in Date Row, continue with next worksheet.
If .Rows(cRow).Find("*", .Cells(cRow, _
.Columns.Count), -4123, , 1) Is Nothing Then Exit For
' Calculate Last Column Number
LastC = .Rows(cRow).Find("*", , -4123, , 1, 2).Column
' Remove formatting from other day(s) in Date Row.
With .Range(.Cells(cRow, cFirstC), .Cells(cRow, LastC))
.Interior.ColorIndex = cDays
End With
' Loop through columns: from First Column to Last Column.
For j = cFirstC To LastC
If .Cells(cRow, j) <> Date Then
.Columns(j).Locked = True
Else
' Apply formatting to 'today' in Date Row.
With .Cells(cRow, j)
.Interior.ColorIndex = cToday
End With
End If
Next
.Protect Password:="123456"
End With
Next
End Sub
您是否尝试将其放入此工作簿中的工作簿\u Open()事件中?此代码有效。但当我打开excel文件时,似乎所有的工作表都是先处理好的,屏幕在稳定之前就好像出了什么问题(第一个工作表打开然后关闭,第二个工作表打开然后关闭等等)。在我保存它并再次打开文件之后,就没有这样的问题了。我能知道发生这种情况的原因吗。@Ashul garg:它可能与屏幕更新有关,您可以通过在For Each循环之前添加Application.screenUpdated=False,并在For Each循环之后使用Application.screenUpdated=True来抑制屏幕更新。
Private Sub Workbook_Open()
ProtectPrevious
End Sub