[英]Why isn't my data populated when i used VBA to create worksheets beforehand?
Previously, when I created the worksheets index 1,2,3 in excel,以前,当我在 excel 中创建工作表索引 1,2,3 时,
it can be sorted into like this in index 1 2 and 3 respectively它可以分别在索引 1 2 和 3 中这样排序
But now if i stop creating worksheets in excel but through VBA instead, the data cant be populated and it leaves index 1,2 and 3 empty.但是现在,如果我停止在 excel 中创建工作表而是通过 VBA,则无法填充数据,并且索引 1,2 和 3 为空。
This is the code that I used for populating the data but with the addition of add.sheets.这是我用于填充数据的代码,但添加了 add.sheets。 The add.sheets here are for creating index1,2,3 worksheets but they doesn't trigger the program to continue to populate the data even though these worksheets exists when I program them in VBA.
这里的 add.sheets 用于创建 index1,2,3 工作表,但它们不会触发程序继续填充数据,即使我在 VBA 中对它们进行编程时这些工作表存在。
Sub UpdateVal()
Static count As Long
Dim iRow As Long
Dim aRow As Long
Dim a As Long
Dim b As Long
Dim selectRange As Range
Dim lastline As Integer
Dim sheetname As String
Dim indexrowcount As Integer
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ActiveWorkbook
Set ws = wb.Worksheets("Result")
Set site_ai = Sheets.Add(after:=Sheets(Worksheets.count))
site_ai.Name = "Index1"
Set site_bi = Sheets.Add(after:=Sheets(Worksheets.count))
site_bi.Name = "Index2"
Set site_ci = Sheets.Add(after:=Sheets(Worksheets.count))
site_ci.Name = "Index3"**
'^additional codes sheets.Add added here for creating worksheets namely index1,2,3
j = 2
iRow = 1
lastline = ws.UsedRange.Rows.count
While iRow < lastline + 1
a = iRow + 1
b = iRow + 17 ' Max Group Size with Same name in F to H column
count = 1
If ws.Cells(iRow, "F").Value = "Martin1" Then
sheetname = "Index1"
ElseIf ws.Cells(iRow, "F").Value = "John1" Then
sheetname = "Index2"
Else
sheetname = "Index3"
End If
For aRow = a To b
If ws.Cells(iRow, "F") = ws.Cells(aRow, "F") And ws.Cells(iRow, "G") = ws.Cells(aRow, "G") And ws.Cells(iRow, "H") = ws.Cells(aRow, "H") Then
count = count + 1
Else
Set selectRange = Range("A" & iRow & ":J" & aRow - 1)
selectRange.Copy
indexrowcount = Sheets(sheetname).UsedRange.Rows.count
Sheets(sheetname).Range("A" & indexrowcount).PasteSpecial xlPasteAll
iRow = iRow + count
Exit For
End If
Next aRow
Wend
End Sub
what am I missing here and how should i solve it?我在这里错过了什么,我应该如何解决?
Your code is too confusing.你的代码太混乱了。 If your example data is accurate, I don't understand why you need to check all three columns.
如果您的示例数据准确,我不明白您为什么需要检查所有三列。 You can accomplish what you are trying to do, by just using
column F
.您只需使用
column F
即可完成您想要做的事情。 If your data is already sorted as shown, then I would loop through column F
testing for duplicates until no match.如果您的数据已按所示排序,那么我将循环测试
column F
是否有重复项,直到不匹配为止。 I would then add a worksheet and name it using the start cells' value.然后我会添加一个工作表并使用起始单元格的值命名它。 Then copy the rows from the start cell to the current
rwNbr - 1
and paste to the new worksheet.然后将起始单元格中的行复制到当前
rwNbr - 1
并粘贴到新工作表。 Reset the start cell for the next group and loop.重置下一组的起始单元格并循环。
Sub SaveRangewithConsecutiveDuplicateValuestoNewSheet()
'Define all variables
Dim wb As Workbook, ws As Worksheet, sCel As Range, rwNbr As Long
Set wb = ThisWorkbook 'Set workbook variable
Set ws = wb.Worksheets("Sheet1") 'set worksheet variable using workbook variable
Set sCel = ws.Cells(1, 6) 'Set the first start cell variable to test for duplicate values
Application.DisplayAlerts = False
For rwNbr = 2 To ws.Cells(ws.Rows.count, 6).End(xlUp).Offset(1).Row Step 1 'Loop
If ws.Cells(rwNbr, 6).Value <> sCel.Value Then 'loop until the value changes
wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.count)).Name = sCel.Value 'Add sheet and name based on the first cell of group
ws.Range(sCel, ws.Cells(rwNbr - 1, 6)).EntireRow.Copy Destination:=ActiveSheet.Range("A1") 'select group of consecutive duplicates
Set sCel = ws.Cells(rwNbr, 6) 'reset start cell to test for the next group of consecutive duplicates
End If
Next rwNbr
Application.DisplayAlerts = True
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.