Vba 二环一码
我可以使用一些帮助来更正下面的代码,因为激活时显示的是第一个图像,而我想显示第二个图像 另外,如果您有其他代码来做同样的工作,请这样做。提前感谢您的帮助Vba 二环一码,vba,excel,calendar,Vba,Excel,Calendar,我可以使用一些帮助来更正下面的代码,因为激活时显示的是第一个图像,而我想显示第二个图像 另外,如果您有其他代码来做同样的工作,请这样做。提前感谢您的帮助 请使用您键入的样式/标题部分中的{和}下次插入格式化代码,如下所示: 编辑您的答案: Private Sub Worksheet_Activate() Dim rng As Range, cell As Range Dim a As Range, az As Long 'set az = number of rows you want fil
请使用您键入的样式/标题部分中的{和}下次插入格式化代码,如下所示: 编辑您的答案:
Private Sub Worksheet_Activate()
Dim rng As Range, cell As Range
Dim a As Range, az As Long 'set az = number of rows you want filled with fri/sat
Application.EnableEvents = False
Set rng = Range("A2:AE2")
az = 4
For Each cell In rng
If cell.Value = "fri" Then
For i = 1 To az
cell.Offset(i).Value = "fri"
Next i
ElseIf cell.Value = "sat" Then
For i = 1 To az
cell.Offset(i).Value = "sat"
Next i
End If
Next cell
Application.EnableEvents = True
End Sub
请使用您键入的样式/标题部分中的{和}下次插入格式化代码,如下所示: 编辑您的答案:
Private Sub Worksheet_Activate()
Dim rng As Range, cell As Range
Dim a As Range, az As Long 'set az = number of rows you want filled with fri/sat
Application.EnableEvents = False
Set rng = Range("A2:AE2")
az = 4
For Each cell In rng
If cell.Value = "fri" Then
For i = 1 To az
cell.Offset(i).Value = "fri"
Next i
ElseIf cell.Value = "sat" Then
For i = 1 To az
cell.Offset(i).Value = "sat"
Next i
End If
Next cell
Application.EnableEvents = True
End Sub
你得到结果是因为你对az中的每个单元格都这样做,但你不想这样做,你只需要填写找到的Fri或Sat的列
Private Sub Worksheet_Activate()
Dim rng As Range, cell As Range
Application.EnableEvents = False
Set rng = Range("B2:BE2")
For Each cell In rng
If cell.value = "Fri" Then
For i as Integer = 3 To 6 Step 1
Cells(i,cell.column).Value = "Fri"
Next
End If
If cells.value = "Sat" Then
For i as Integer = 3 To 6 Step 1
Cells(i,cell.column).Value = "Sat"
Next
End If
Next cell
Application.EnableEvents = True
End Sub
它应该是这样的,我想你得到了结果,因为你对az中的每个单元格都这样做,但你不想这样做,你只需要填写找到的Fri或Sat的列
Private Sub Worksheet_Activate()
Dim rng As Range, cell As Range
Application.EnableEvents = False
Set rng = Range("B2:BE2")
For Each cell In rng
If cell.value = "Fri" Then
For i as Integer = 3 To 6 Step 1
Cells(i,cell.column).Value = "Fri"
Next
End If
If cells.value = "Sat" Then
For i as Integer = 3 To 6 Step 1
Cells(i,cell.column).Value = "Sat"
Next
End If
Next cell
Application.EnableEvents = True
End Sub
我想应该是这样的
另外,如果您有其他代码来做同样的工作,请这样做
以下内容将要求您在每次创建新工作表时基于当前月份构建新的日历工作表
Option Explicit
Private Sub Workbook_NewSheet(ByVal Sh As Object)
If MsgBox("Create new calendar?", vbYesNo, "AutoBuild") <> vbYes Then Exit Sub
'the following DELETES ANY WORKSHEET WITH THE SAME MONTH/YEAR NAME
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(Format(Date, "mmm yyyy")).Delete
Application.DisplayAlerts = True
On Error GoTo 0
'create a new calendar worksheet based on the current month
With Sh
Dim c As Long
.Name = Format(Date, "mmm yyyy")
With .Cells(1, 1).Resize(6, Day(DateSerial(Year(Date), Month(Date) + 1, 0)))
.Formula = "=DATE(" & Year(Date) & ", " & Month(Date) & ", COLUMN())"
.Value = .Value
.Rows(1).NumberFormat = "d"
.Rows(2).Resize(.Rows.Count - 1, .Columns.Count).NumberFormat = "ddd"
.EntireColumn.ColumnWidth = 5 'AutoFit
.HorizontalAlignment = xlCenter
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=AND(ROW()>2, WEEKDAY(A2, 15)>2)"
.Add Type:=xlExpression, Formula1:="=WEEKDAY(A2, 15)<3"
.Add Type:=xlExpression, Formula1:="=AND(ROW()=2, WEEKDAY(A2, 15)>2)"
End With
.FormatConditions(1).NumberFormat = ";;;"
.FormatConditions(2).Interior.Color = 5287936
.FormatConditions(3).Interior.Color = 14281213
End With
End With
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
.Zoom = 80
End With
End With
End Sub
选项显式
专用子工作簿\新闻纸(ByVal Sh作为对象)
如果MsgBox(“创建新日历?”,vbYesNo,“自动生成”)vbYes,则退出子菜单
'以下命令将删除具有相同月/年名称的任何工作表
出错时继续下一步
Application.DisplayAlerts=False
工作表(格式(日期,“mmm yyyy”)。删除
Application.DisplayAlerts=True
错误转到0
'基于当前月份创建新的日历工作表
与Sh
尺寸c与长度相同
.Name=格式(日期,“mmm yyyy”)
使用.Cells(1,1).Resize(6,Day(日期序列(年(日期)、月(日期)+1,0)))
.Formula=“=日期(&年(日期)&“,”月(日期)&“,列())”
.Value=.Value
.行(1).NumberFormat=“d”
.Rows(2)。调整大小(.Rows.Count-1、.Columns.Count)。NumberFormat=“ddd”
.EntireClumn.ColumnWidth=5'自动拟合
.HorizontalAlignment=xlCenter
使用.Resize(.Rows.Count-1、.Columns.Count).Offset(1,0)
带.格式化条件
.删除
.添加类型:=xlExpression,公式1:=“=和(行()>2,工作日(A2,15)>2)”
.添加类型:=xlExpression,公式1:=“=WEEKDAY(A2,15)2)”
以
.FormatConditions(1).NumberFormat=“;;”
.FormatConditions(2).Interior.Color=5287936
.FormatConditions(3).Interior.Color=14281213
以
以
使用ActiveWindow
.SplitColumn=0
.SplitRow=1
.FreezePanes=真
.Zoom=80
以
以
端接头
您可能希望进行调整,但这可能是一个很好的开始框架。我采用了使用实际日期的方法,并通过单元格s显示它们的月日和星期日。这样就可以计算和查找原始的基础日期值。同样,看似空白的日期实际上也不是空白的;通过应用的自定义数字格式在单元格中根本不显示任何值
另外,如果您有其他代码来做同样的工作,请这样做
以下内容将要求您在每次创建新工作表时基于当前月份构建新的日历工作表
Option Explicit
Private Sub Workbook_NewSheet(ByVal Sh As Object)
If MsgBox("Create new calendar?", vbYesNo, "AutoBuild") <> vbYes Then Exit Sub
'the following DELETES ANY WORKSHEET WITH THE SAME MONTH/YEAR NAME
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(Format(Date, "mmm yyyy")).Delete
Application.DisplayAlerts = True
On Error GoTo 0
'create a new calendar worksheet based on the current month
With Sh
Dim c As Long
.Name = Format(Date, "mmm yyyy")
With .Cells(1, 1).Resize(6, Day(DateSerial(Year(Date), Month(Date) + 1, 0)))
.Formula = "=DATE(" & Year(Date) & ", " & Month(Date) & ", COLUMN())"
.Value = .Value
.Rows(1).NumberFormat = "d"
.Rows(2).Resize(.Rows.Count - 1, .Columns.Count).NumberFormat = "ddd"
.EntireColumn.ColumnWidth = 5 'AutoFit
.HorizontalAlignment = xlCenter
With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=AND(ROW()>2, WEEKDAY(A2, 15)>2)"
.Add Type:=xlExpression, Formula1:="=WEEKDAY(A2, 15)<3"
.Add Type:=xlExpression, Formula1:="=AND(ROW()=2, WEEKDAY(A2, 15)>2)"
End With
.FormatConditions(1).NumberFormat = ";;;"
.FormatConditions(2).Interior.Color = 5287936
.FormatConditions(3).Interior.Color = 14281213
End With
End With
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
.Zoom = 80
End With
End With
End Sub
选项显式
专用子工作簿\新闻纸(ByVal Sh作为对象)
如果MsgBox(“创建新日历?”,vbYesNo,“自动生成”)vbYes,则退出子菜单
'以下命令将删除具有相同月/年名称的任何工作表
出错时继续下一步
Application.DisplayAlerts=False
工作表(格式(日期,“mmm yyyy”)。删除
Application.DisplayAlerts=True
错误转到0
'基于当前月份创建新的日历工作表
与Sh
尺寸c与长度相同
.Name=格式(日期,“mmm yyyy”)
使用.Cells(1,1).Resize(6,Day(日期序列(年(日期)、月(日期)+1,0)))
.Formula=“=日期(&年(日期)&“,”月(日期)&“,列())”
.Value=.Value
.行(1).NumberFormat=“d”
.Rows(2)。调整大小(.Rows.Count-1、.Columns.Count)。NumberFormat=“ddd”
.EntireClumn.ColumnWidth=5'自动拟合
.HorizontalAlignment=xlCenter
使用.Resize(.Rows.Count-1、.Columns.Count).Offset(1,0)
带.格式化条件
.删除
.添加类型:=xlExpression,公式1:=“=和(行()>2,工作日(A2,15)>2)”
.添加类型:=xlExpression,公式1:=“=WEEKDAY(A2,15)2)”
以
.FormatConditions(1).NumberFormat=“;;”
.FormatConditions(2).Interior.Color=5287936
.FormatConditions(3).Interior.Color=14281213
以
以
使用ActiveWindow
.SplitColumn=0
.SplitRow=1
.FreezePanes=真
.Zoom=80
以
以
端接头
您可能希望进行调整,但这可能是一个很好的开始框架。我采用了使用实际日期的方法,并通过单元格s显示它们的月日和星期日。这样就可以计算和查找原始的基础日期值。同样,看似空白的日期实际上也不是空白的;通过应用的自定义数字格式在单元格中根本不显示任何值
我找到了部分问题的答案,但我需要帮助来完成代码,因为它只适用于一行 我找到了