尝试使此子例程运行,以填充Excel VBA中每行上每一组日期的透视表数据

尝试使此子例程运行,以填充Excel VBA中每行上每一组日期的透视表数据,vba,excel,Vba,Excel,我对“我”有一个无休止的循环。我认为这与数据类型有关,因为这些都是日期,我不得不将开始日期和完成日期作为变量调暗,以避免类型不匹配错误。该代码是一个起点,用于在垂直列表中填充从周一开始的一周内的每个日期,该日期位于p1开始日期和p1结束日期之间。现在我只想让它列出那个日期,然后我将为其余的目标数据添加复制粘贴命令,并为每个人的姓名添加另一个循环。我定义了一堆额外的变量,以便以后可以使用它们,而不是所有的变量现在都在使用 这是一些正在进行工作的工作表 `enter code here`选项显式

我对“我”有一个无休止的循环。我认为这与数据类型有关,因为这些都是日期,我不得不将开始日期和完成日期作为变量调暗,以避免类型不匹配错误。该代码是一个起点,用于在垂直列表中填充从周一开始的一周内的每个日期,该日期位于p1开始日期和p1结束日期之间。现在我只想让它列出那个日期,然后我将为其余的目标数据添加复制粘贴命令,并为每个人的姓名添加另一个循环。我定义了一堆额外的变量,以便以后可以使用它们,而不是所有的变量现在都在使用

这是一些正在进行工作的工作表

`enter code here`选项显式
'项目信息的常量
Const Row_PD=2'项目信息表中包含项目日期的第一行
Const Col_PD=26'用于“项目信息”子项中的项目日期的第一列
Const PI=“项目信息”
Const Row_DA=3'时间轴中数组具有有效日期的第一行
'透视数据的常量
Const C_PD_Col_Start=1'项目信息表“透视数据”的第一列
Const C_PD_Row_Start=2'第一行数据在透视数据中
Const PD=“透视数据”
子范围_循环()
'
'范围\循环宏
'按不同日期填充每周的透视数据以及每个阶段范围内的项目和人员
'
Dim rStart作为变量,rFinish作为变量,pStart作为变量,pFinish作为变量,nProj作为整数,定时器作为范围
尺寸a为长,b为长,c为长,d为长,i为长,j为长,k为长,l为长,P1Row为整数,LPRow为整数,fRng为范围,DRng为字符串
尺寸P1起始为变型、P1结束为变型、P2起始为变型、P2结束为变型、P3起始为变型、P3结束为变型、P4起始为变型、P4结束为变型
工作表(PD)。激活
范围(“A2:L100000”)。清除
工作表(PI)。激活
a=项目数据的2'主行
b=项目数据的26'主列
i=轴数据的2'主行
c=27
P1Row=2
LPRow=单元格(Rows.Count,“Z”).End(xlUp).Row
rStart=单元格(4,1).值
直到a>LPRow为止
直到b=31为止
P1Start=单元(a,b).值
P1Finish=单元格(a,c).值
直到rStart>p1完成
如果rStartP1Finish,则
工作表(PD).单元格(i,1).值=rStart
其他的
k=1
如果结束
rStart=rStart+7
i=i+1
环
rStart=单元格(4,1).值
b=b+1
c=c+1
环
b=26
c=27
a=a+1
环
i=2`在此处输入代码`
'工作表(PI).单元格(a,b).激活
'MsgBox(rFinish)
端接头

我根据您的示例设置电子表格,这一行(使用两次):
rStart=Cells(4,1)。Value
引用一个空单元格。经过测试的代码并没有得到无止境的循环,但也没有得到任何输出

如果rStartP1Finish,则该行没有意义,因为在rStart>P1Finish之前,由于
Do,rStart大于P1Finish时将永远不会读取该行,因此它将永远不会为真,输出数据的行也永远不会被读取。逻辑是错误的


将If更改为:
If rStart
,您将获得输出,即使您没有将单元格(4,1)更改为单元格(3,1),尽管可能应该这样做。但是它是你想要的输出吗?

无限循环从哪里来?如果我读得正确,
Do Until rStart>P1Finish
将始终具有
I=2
。即使你做了
i=i+1
,当它循环时,你会立即将它重置为
i=2
。事实上,我之前已经把它设置好了。我注意到,在重新运行sub时,我将编辑代码并显示问题的出现位置。在启动任何循环之前,将其更新为一个已定义的变量,并且它肯定会永远在最低级别的循环中循环。好像rStart永远不会超过P1Finish。以7为增量,在少于100个循环后,应超过该值。
`enter code here`Option Explicit

'Constants for Project Information
Const Row_PD = 2  'First Row with Project Dates in Project Info Table
Const Col_PD = 26  'First Column for Project Dates to be used in Sub from "Project Information"
Const PI = "Project Information"

Const Row_DA = 3 'First Row that has a Valid Date for the Array in Timeline


'Constants for Pivot Data
Const C_PD_Col_Start = 1  'First Column for Project Info Table "Pivot Data"
Const C_PD_Row_Start = 2  'First Row with Data in Pivot Data
Const PD = "Pivot Data"


Sub Range_Loop()
'
' Range_Loop Macro
' Populate Pivot Data for each week and Project and Person in Range for Each Phase by the Various Dates
'
Dim rStart As Variant, rFinish As Variant, pStart As Variant, pFinish As Variant, nProj As Integer, TimeR As Range
Dim a As Long, b As Long, c As Long, d As Long, i As Long, j As Long, k As Long, l As Long, P1Row As Integer, LPRow As Integer, fRng As Range, DRng As String
Dim P1Start As Variant, P1Finish As Variant, P2Start As Variant, P2Finish As Variant, P3Start As Variant, P3Finish As Variant, P4Start As Variant, P4Finish As Variant

Worksheets(PD).Activate

Range("A2:L100000").Clear

Worksheets(PI).Activate

a = 2 'Home Row for Project Data
b = 26 'Home Column For Project Data
i = 2 'Home Row for Pivot Data
c = 27

P1Row = 2
LPRow = Cells(Rows.Count, "Z").End(xlUp).Row

rStart = Cells(4, 1).Value


Do Until a > LPRow
    Do Until b = 31

    P1Start = Cells(a, b).Value
    P1Finish = Cells(a, c).Value

         Do Until rStart > P1Finish

         If rStart < P1Start And rStart > P1Finish Then
         Worksheets(PD).Cells(i, 1).Value = rStart
         Else
         k = 1
         End If

         rStart = rStart + 7
         i = i + 1
         Loop
    rStart = Cells(4, 1).Value
    b = b + 1
    c = c + 1
    Loop
b = 26
c = 27
a = a + 1
Loop
i = 2`enter code here`

'Worksheets(PI).Cells(a, b).Activate
'MsgBox (rFinish)

End Sub