所以我有一个问题,那就是生成数量随机结果。
我正在尝试在新电子表格中将每个数量(以其数量计)换行。
它创建新的工作表,并引用旧的工作表... 代码复制并粘贴行... 它只是不会在正确的时间内循环执行。我尝试了不同的操作数(> = 0)并更改了变量值以使其工作。
它似乎并没有说明为什么会发生。有时,它会在正确数量的循环周期中执行此操作,而其他情况则不是。这在多个值上发生。任何帮助将不胜感激。
Sub copyPasta()
'
' copyPasta Macro
' This will take the qty, if greater than one in Column C and copy the row
'to a new sheet the amount of time the qty.
'
'
'Set Variable Types
Dim lineItemQty As Integer
Dim newLineItemQty As Integer
Dim LastRow As Integer
Dim strSheetName As String
Dim newSheetName As String
Dim i As Integer
Application.DisplayAlerts = False
'name a variable after the existing active sheet
strSheetName = ActiveSheet.Name
'add a sheet in addition to the current
Sheets.Add After:=ActiveSheet
'set a variable used in loops to the sheet being copied to
newSheetName = ActiveSheet.Name
'Return to first sheet
Sheets(strSheetName).Activate
' Set For Loop to max row
LastRow = Sheets(strSheetName).Range("C:C").Find("*", searchdirection:=xlPrevious).Row
'for loop to run through all rows
For i = 3 To LastRow Step 1
'initializing variable to Qty value in table
lineItemQty = Range("C" & i).Value
'initializing variable within in line of for looping
newLineItemQty = lineItemQty
'do while loop to keep copying/pasting while there are still qty's
Do While newLineItemQty > 0
'do while looped copy and paste
'copy the active row
Sheets(strSheetName).Activate
Rows(i).Select
Selection.Copy
'paste active row into new sheet
Sheets(newSheetName).Select
Rows("3:3").Select
Selection.Insert Shift:=xlDown
newLineItemQty = newLineItemQty - 1
Loop
Next i
Application.DisplayAlerts = True
End Sub
答案 0 :(得分:0)
您可以考虑使用以下替代方案(或从中提取)。几个值得注意的笔记是
.Select
和.Activate
。有关详情,请参见here ws
的{{1}}和worksheet
的{{1}}。然后,您需要在代码中主动声明要引用的工作表(而不是通过使用适当的工作表变量为所有对象添加前缀来使用ns
或newsheet
).Select
。这是默认设置-您只需在偏离默认设置时添加它!.Activate
,只需创建一个嵌套循环并用于Step 1
。请注意,我们从未真正在循环内使用变量n
,这意味着将执行完全相同的操作,我们只希望它执行1 to n
次。n