Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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_Date - Fatal编程技术网

Vba 如何插入多个日期列以满足特定日期的要求?

Vba 如何插入多个日期列以满足特定日期的要求?,vba,excel,date,Vba,Excel,Date,我对代码和Excel VBA非常陌生,希望你们能帮我解决我的问题。非常感谢任何提示、反馈和评论 在工作簿中,我希望确保工作表(Sheet1)的单元格(I1)具有在不同工作表(即菜单)中写入的特定日期。我希望I1是起始点,随后的日期将通过穿过行(I1、J1、K1等)发生。在这种情况下,如果我需要的具体日期是16年8月15日,并且我的一张工作表(工作表1)的单元格I1写为16年8月20日,我想知道如何以这样的方式构造代码: 如果表1中的I1当前为15/8/16,则不执行任何操作。但是,如果表1中的I

我对代码和Excel VBA非常陌生,希望你们能帮我解决我的问题。非常感谢任何提示、反馈和评论

在工作簿中,我希望确保工作表(Sheet1)的单元格(I1)具有在不同工作表(即菜单)中写入的特定日期。我希望I1是起始点,随后的日期将通过穿过行(I1、J1、K1等)发生。在这种情况下,如果我需要的具体日期是16年8月15日,并且我的一张工作表(工作表1)的单元格I1写为16年8月20日,我想知道如何以这样的方式构造代码:

如果表1中的I1当前为15/8/16,则不执行任何操作。但是,如果表1中的I1的日期晚于16年8月15日,则I1现在将从16年8月15日开始,随后的日期将被添加,直到它达到最初在I1处的默认日期(现在20年8月16日位于单元格N1)

我目前的代码如下:-

If ActiveSheet.Range("I1") <> MainSht.Range("D6") Then
ActiveSheet.Range("I1") = MainSht.Range("D6")
End If

Do
If Cells(1,z+1)>Cells(1,z+1) Then
Cells(1,z+1) = Cells(1,z)+1
End If
z = z+1
Loop Until Cells(1,z+1) = MainSht.Range("D7")
如果ActiveSheet.Range(“I1”)主屏幕范围(“D6”),则
活动页范围(“I1”)=主窗口范围(“D6”)
如果结束
做
如果单元格(1,z+1)>单元格(1,z+1),则
单元(1,z+1)=单元(1,z)+1
如果结束
z=z+1
循环直到单元格(1,z+1)=主屏幕范围(“D7”)
*Mainsht(D6)是我的开始日期,(D7)是我的结束日期

我的代码当前没有插入列部分,因为我在同时应用插入列和日期增量代码时遇到问题。在我的当前代码中,我的日期范围从未扩展,因为它仍然在相同的较早日期范围内(与以前相同的最后一列,因此日期列的最后一个单元格保持不变)。我如何构造这样一种方式,即添加中间缺少的日期,并通过在重复过程中插入列来添加


如果有人能在这方面帮助我,请提前感谢。也感谢您的理解。

请检查下面的代码以添加列

Dim start_date, end_date As Date

start_date = ThisWorkbook.Sheets("Sheet1").Range("L1").Value
end_date = ThisWorkbook.Sheets("main").Range("D7").Value

If start_date < end_date Then

    Do Until start_date = end_date
    ThisWorkbook.Sheets("Sheet1").Activate
    Range("L:L").Insert (xlRight)
    start_date = start_date + 1
    Range("L1").Value = start_date
    Loop

End If
Dim开始日期,结束日期为日期
开始日期=此工作簿.工作表(“Sheet1”).范围(“L1”).值
结束日期=此工作簿.Sheets(“main”).Range(“D7”).Value
如果开始日期<结束日期,则
直到开始日期=结束日期
此工作簿。工作表(“工作表1”)。激活
范围(“L:L”)。插入(右)
开始日期=开始日期+1
范围(“L1”)。值=开始日期
环
如果结束
您可以尝试以下方法:

Option Explicit

Sub main()
    Dim diff As Long

    With Worksheets("Work").Range("I1") '<--| reference working sheet range "I1" (change "Work" to your actual working worksheet)
        diff = .Value - Worksheets("Menu").Range("D6") ' <--| evaluate the difference between referenced range value and worksheet "Menu" cell "D6" (change "Menu" to your actual "main" sheet)
        If diff > 0 Then
            With .Resize(, diff) '<-- reference referenced range resized to the necessary columns number
                .EntireColumn.Insert xlRight '<-- insert columns
                With .Offset(, -diff).Resize(1) '<--| reference referenced range first row
                    .FormulaR1C1 = "=RC[1]-1" ' <--|  insert formulas that substracts one from the value of next cell on the right
                    .Value = .Value '<-- get rid of formulas
                    .NumberFormat = .Offset(, diff).Resize(, 1).NumberFormat '<--| format cells as the passed range
                    .EntireColumn.AutoFit '<--| adjust columns width
                End With
            End With
        End If
    End With
End Sub
选项显式
副标题()
暗差与长

在工作表(“工作”).Range(“I1”)中,您首先说“添加后续日期”,然后说“插入列”:您需要简单地在单元格中写入日期还是添加列?如果单元格I1没有写入特定日期(即20/8/16),我想在I1之前添加更多列,以适应需要写入的5个日期(15/8/16-19/8/16)在I1到M1之间。现在我的N1变成了20/8/16。我只是不知道如何和代码混在一起。它不必是插入列,也可以只是将I1更改为特定日期,并添加到结束日期(D7)为止。有道理吗?简而言之,日期列的范围增加了5列。非常感谢您的输入!我真的很感激养成并保持避免激活/激活/选择/选择的习惯,接受完全合格的范围参考宗教!!我没有意识到我也可以这样做。我从这里学到了一些新东西。谢谢!:)不客气。请记住,“带结束”结构既适用于范围参考安全性,也适用于代码速度