使用当月 VBA 的日期填充行中的一系列单元格,然后在下个月的第一天保存数据并清除工作表
Posted
技术标签:
【中文标题】使用当月 VBA 的日期填充行中的一系列单元格,然后在下个月的第一天保存数据并清除工作表【英文标题】:Populating a range of cells in row with dates of the current month VBA, then save data and clear sheet at the first of the next month 【发布时间】:2013-11-06 19:59:07 【问题描述】:我正在寻找一种编写 VBA 脚本的方法,该脚本将自动填充 sheet17.range("f14:aj14") 与当前月份的日期。日期格式需要为 mm/d/yyyy,我需要能够使用“FoundCell”方法使用此范围查找“日期”。我找到了这段代码并适应了我的需要,但它从下一行的单元格开始填充右侧的下一列。我已经尝试更改“偏移”数字并且无法让它填充我的单元格范围,并且由于我是 VBA 的新手,我有一个宏可以将工作表复制到新工作表,保存新工作表,然后清除内容range(f15:AN73) 的原始版本,我不知道在每个月的第一天凌晨 12:00 自动发生的代码。这是我的日期人口代码:
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") 的日期,而不是从 1 个单元格开始的右侧的下一列,然后是自动将工作表保存到新工作表并清除内容的代码原始 sheet.range("f15:an73")。任何帮助将不胜感激!提前谢谢你。
米歇尔
【问题讨论】:
【参考方案1】:这是您问题的日期填写部分的答案。而且,您需要将其放在常规模块中,而不是工作表模块中。
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 不客气-但我不明白为什么这在常规模块中不起作用-您必须依靠工作表更改来“触发” worksheet_change 事件。即便如此,第一个宏应该在常规模块中按原样运行。祝你好运! 我对编写代码还很陌生,所以我不完全确定,但这可能与 range(f15:an73) 的内容取决于其他值的事实有关使用包含“Set FoundCell”命令在范围(f14:aj14)中查找“日期”的宏的工作表?也许?无论如何,您的解决方案效果很好!以上是关于使用当月 VBA 的日期填充行中的一系列单元格,然后在下个月的第一天保存数据并清除工作表的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 用 NaN 值填充列中的单元格,从行中的其他单元格中获取值