Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 二环一码_Vba_Excel_Calendar - Fatal编程技术网

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显示它们的月日和星期日。这样就可以计算和查找原始的基础日期值。同样,看似空白的日期实际上也不是空白的;通过应用的自定义数字格式在单元格中根本不显示任何值


我找到了部分问题的答案,但我需要帮助来完成代码,因为它只适用于一行

我找到了