通过每周按一次按钮从另一个工作表导入日期时,如何在列中自动填充日期?

时间:2018-07-10 15:39:16

标签: excel vba excel-vba

我正在尝试在VBA中编写代码以将每周注释和该周开始的日期从一张工作表(ws1)复制到第二个要存储的日期(ws4),自动填充该周的剩余日期,最后在表格底部添加新行。

我可以使程序将注释和日期从ws1复制到ws4。他们会按需进入相应的列。
但是,如果我第二次按下它,它只会覆盖我的数据并在输入的日期下方添加一个日期。这就是为什么我认为如果一直添加日期,就能解决该问题。
我目前的问题是我无法获取自动填充日期的代码(我认为应该可以使用)。在代码中到达该行时,出现以下错误:
“运行时错误'1004':
应用程序定义或对象定义的错误“
我一直想尝试弄清楚到底发生了什么,尽管我进行了研究和调查,但似乎无法使它正常工作。我不知道我是不是试图说出一些不正确的内容,或者我正在做的事情是不可能的。

我考虑过使用'If / Then / Else'参数使事情正常进行,但我无法使其表现出色。我查看并尝试找出的页面链接为here
然后,我想到了该this帖子可能会提供更多的见解,因为它类似于我尝试根据另一个输入的日期输入月份(几乎是我的问题)。但是,此选项对我也不起作用。 最后,我了解了当前的解决方案(看起来很简单,易于实现)。 Here是原始解决方案的链接,更改后的更改反映在提供的代码中。

我对正在发生的事情以及从这里去哪里一无所知。在下面,您将看到我专门为该部分缩短的代码部分(这是一个较大的代码的一部分,该代码减去此位)。

Private Sub CommandButton2_Click()

Dim ws1 As Worksheet: Set ws1 = Sheets("Weekly Job Progress")
Dim ws4 As Worksheet: Set ws4 = Sheets("Comment Storage")
Dim lrow2 As Long: lrow2 = ws4.Cells(Rows.Count, 1).End(xlUp).Row + 1

With ws1 
    'Copy the date to & from.
    ws4.Cells(lrow2, 1) = .Range("E3")
    For m = 7 To 13
        n = m - 4
        'Copy the days of the week
        ws4.Cells(n, 2) = .Range("I" & m)
        'Copy the comments entered
        ws4.Cells(n, 3) = .Range("K" & m)
    Next 
End With

With ws4 
    rowf = .Cells(Rows.Count, 1).End(xlUp).Row
    'Supposed to automatically populate the dates on ws4 up to the last row... Doesn't work.
    .Range("B:B" & rowf).Value = (rowf - 1)
    'Supposed to add a new row at the bottom of my sheet but doesn't (no clue why because the same code works on ws3 [not shown].)
    .Range("A" & lrow2 + 1).EntireRow.Insert
End With

End Sub

如果我在发布此信息时做错了什么,请告诉我,因为这是我第一次发布到此网站,尽管在过去的几周中我将其用于研究和学习了很多。 br /> 谢谢。

编辑1:整理了代码并记下了代码,以希望可以更轻松地了解我要执行的操作以及问题所在。我还做了注释中提到的有关不使用与列相同字母的引用的更改。否则,我的代码将保持不变。

2 个答案:

答案 0 :(得分:0)

在您的第一个with块中,请尝试不要将范围对象彼此引用,而要仅引用值。像这样:ws4.Cells(m,3).value = .Range(“ K”&k).value

答案 1 :(得分:0)

下面是结束工作的代码。需要花费时间来清理和弄清楚它。但是,在一些外部帮助下,此方法可行。最终它是一个2部分的代码,可以使其发挥出色,但可以解决问题。

With ws1
    'Insert 7 Lines
    ws4.Range("A" & lrow2 + 2).EntireRow.Offset(1).Resize(6).Insert Shift:=xlDown
    'Copy the date to & from.
    ws4.Cells(lrow2 + 2, 1) = .Range("E3")
    For m = 7 To 13
        n = m - 4
        'Copy the day of the week.
        ws4.Cells(lrow2 + n - 1, 2) = .Range("I" & m)
        'Copy the comment entered.
        ws4.Cells(lrow2 + n - 1, 3) = .Range("K" & m)
    Next
End With

With ws4
    Dim rowf1 As Long: rowf1 = .Range("A" & .Rows.Count).End(xlUp).Row
    Dim rowf2 As Long: rowf2 = .Range("B" & .Rows.Count).End(xlUp).Row
    'Defines the Destination of cells to AutoFill & the range area to stop at.
    .Range("A" & rowf1).AutoFill Destination:=.Range("A" & rowf1 & ":A" & rowf2)
    'To insert a new row at the end of my imported data to give a new line with the same formatting to start on at the next import.
    .Range("B" & rowf2 + 1).EntireRow.Insert
End With