用VBA当前月份的日期填充行中的一系列单元格,然后保存数据并在下个月的第一个月清除工作表
我正在寻找一种编写VBA脚本的方法,该脚本将自动填充sheet17.range(“f14:aj14”),其中包含当前月份的日期。日期格式需要是mm/d/yyyy,并且我需要能够使用“FoundCell”方法来查找使用此范围的“日期”。我找到了这段代码并根据我的需要进行了修改,但它填充了右边的下一列,从下一行的单元格开始。我曾尝试更改“偏移量”数字,但无法使其填充我的单元格区域。由于我是VBA的新手,我有一个宏,可以将工作表复制到新工作表,保存新工作表,然后清除原始工作表的范围(f15:AN73)的内容,我不知道在每个月的第一天上午12:00自动执行该操作的代码。以下是我的日期人口代码:用VBA当前月份的日期填充行中的一系列单元格,然后保存数据并在下个月的第一个月清除工作表,vba,date,excel,autofill,Vba,Date,Excel,Autofill,我正在寻找一种编写VBA脚本的方法,该脚本将自动填充sheet17.range(“f14:aj14”),其中包含当前月份的日期。日期格式需要是mm/d/yyyy,并且我需要能够使用“FoundCell”方法来查找使用此范围的“日期”。我找到了这段代码并根据我的需要进行了修改,但它填充了右边的下一列,从下一行的单元格开始。我曾尝试更改“偏移量”数字,但无法使其填充我的单元格区域。由于我是VBA的新手,我有一个宏,可以将工作表复制到新工作表,保存新工作表,然后清除原始工作表的范围(f15:AN73)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Sht As Worksheet
Dim intDaysInMonth As Integer
Dim i As Integer
Set Sht = Worksheets("MAR") 'change to suit
Target = Sht.Range("f14:aj14")
intDaysInMonth = Day(DateSerial(Year(Now()), Month(Now()) + 1, 0))
Target.Resize(intDaysInMonth, 1).ClearContents
For i = 1 To intDaysInMonth
Target.Offset(i - 0, 1) = DateSerial(Year(Now()), Month(Now()), i)
Next i
Set Sht = Nothing
End Sub
我只需要填充sheet17.range(“f14:aj14”)的日期,而不是从下一个单元格开始的右下一列,然后是自动将工作表保存到新工作表并清除原始工作表.range(“f15:an73”)内容的代码。任何帮助都将不胜感激!先谢谢你
米歇尔以下是你问题中日期填充部分的答案。而且,您需要将其放在常规模块中,而不是工作表模块中
Sub myDates()
Dim Sht As Worksheet
Dim intDaysInMonth As Integer
Dim i As Integer
Dim Target As Range
Set Sht = Worksheets("MAR") 'change to suit
intDaysInMonth = Day(DateSerial(Year(Now()), Month(Now()) + 1, 0))
Set Target = Sht.Range("f14").Resize(, intDaysInMonth) 'set target to days count
Target(1).Resize(, 31).ClearContents 'clear all previous
For i = 1 To intDaysInMonth
Target(i).Value = DateSerial(Year(Now()), Month(Now()), i)
Next i
Set Sht = Nothing
End Sub
但是为了使它更有用,您应该从另一个子系统调用它,将工作表名称作为参数,这样您就可以访问正确的月份工作表。那么它看起来是这样的:
Sub myDates(ShtName As String)
Dim Sht As Worksheet
Dim intDaysInMonth As Integer
Dim i As Integer
Dim Target As Range
Set Sht = Worksheets(ShtName) 'change to suit
intDaysInMonth = Day(DateSerial(Year(Now()), Month(Now()) + 1, 0))
Set Target = Sht.Range("f14").Resize(, intDaysInMonth) 'set target to days count
Target(1).Resize(, 31).ClearContents 'clear all previous
For i = 1 To intDaysInMonth
Target(i).Value = DateSerial(Year(Now()), Month(Now()), i)
Next i
Set Sht = Nothing
End Sub
我无法使代码在常规模块中工作。然而,当我把它放在一个工作表模块中时,我首先得到一个“编译错误”,说“Dim Target As Range”是一个重复的声明。所以我去掉了它,它工作得很好!非常感谢你@user2960503不客气-但我不明白为什么这在常规模块中不起作用-您必须依靠工作表更改来“触发”工作表更改事件。即使如此,第一个宏也应该像在常规模块中一样运行。祝你好运我对编写代码相当陌生,所以我不完全确定,但这可能与以下事实有关:range(f15:an73)的内容取决于其他工作表中的值,这些工作表使用宏(包括“Set FoundCell”命令来查找range(f14:aj14)中的“Date”?大概不管怎样,你的解决方案非常有效!