Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Date_Excel_Autofill - Fatal编程技术网

用VBA当前月份的日期填充行中的一系列单元格,然后保存数据并在下个月的第一个月清除工作表

用VBA当前月份的日期填充行中的一系列单元格,然后保存数据并在下个月的第一个月清除工作表,vba,date,excel,autofill,Vba,Date,Excel,Autofill,我正在寻找一种编写VBA脚本的方法,该脚本将自动填充sheet17.range(“f14:aj14”),其中包含当前月份的日期。日期格式需要是mm/d/yyyy,并且我需要能够使用“FoundCell”方法来查找使用此范围的“日期”。我找到了这段代码并根据我的需要进行了修改,但它填充了右边的下一列,从下一行的单元格开始。我曾尝试更改“偏移量”数字,但无法使其填充我的单元格区域。由于我是VBA的新手,我有一个宏,可以将工作表复制到新工作表,保存新工作表,然后清除原始工作表的范围(f15:AN73)

我正在寻找一种编写VBA脚本的方法,该脚本将自动填充sheet17.range(“f14:aj14”),其中包含当前月份的日期。日期格式需要是mm/d/yyyy,并且我需要能够使用“FoundCell”方法来查找使用此范围的“日期”。我找到了这段代码并根据我的需要进行了修改,但它填充了右边的下一列,从下一行的单元格开始。我曾尝试更改“偏移量”数字,但无法使其填充我的单元格区域。由于我是VBA的新手,我有一个宏,可以将工作表复制到新工作表,保存新工作表,然后清除原始工作表的范围(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”)的日期,而不是从下一个单元格开始的右下一列,然后是自动将工作表保存到新工作表并清除原始工作表.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”?大概不管怎样,你的解决方案非常有效!