【发布时间】:2020-01-15 17:44:22
【问题描述】:
我现在意识到我原来的组织方法不够用,所以我想将所有信息添加到一个名为 ("RAW") 的新工作表中
我正在尝试创建一个基于表格行数的循环。在这里,我从一个“theFILE.xlsm”循环,它一次打开一个工作簿。当工作簿打开时我想复制
这是我想做的:
- 打开工作簿 (sFile),
- 统计 Table2 的 databodyrange.count,
- 将计数分配给名为 BodyCount 的变量,
- 复制并粘贴所需的行,
- 循环获取 BodyCount 的次数
将打开的每个工作簿都有一个 Table2,但没有一个表完成,所以我不能像第一个 Do While 循环那样依赖单元格是否为 ""。
如何创建循环以根据表中的行数一次复制 1 行。
这是什么
Sub every_one() ''compile everything into 1 list
''''DIMENSIONS
Application.ScreenUpdating = False
Dim SourceRow As Long
Dim sFile As String
Dim wb As Workbook
Dim FileName1 As String
Dim FileName2 As String
Dim wksSource As Worksheet
Const scWkbSourceName As String = "theFILE.xlsm"
Set wkbSource = Workbooks(scWkbSourceName)
Set wksSource = wkbSource.Sheets("Sheet1")
Const wsOriginalBook As String = "theFILE.xlsm"
Const sPath As String = "U:\theFILES\"
SourceRow = 5
DestinationColumn = 2
FirstDestinationRow = 1
SecondDestinationRow = 41
''ENSURE SELECT SOURCE SHEET
Sheets("Sheet1").Select
Do While Cells(SourceRow, "C").Value <> ""
FileName1 = wksSource.Range("A" & SourceRow).Value
FileName2 = wksSource.Range("L" & SourceRow).Value
sFile = sPath & FileName1 & "\" & FileName2 & ".xlsm"
''OPEN FILE
Set wb = Workbooks.Open(sFile)
''insert CODE TO LOOP
''DECLARE TABLE
Dim tbl As ListObject
Dim BodyCount As Long
Dim StartingTablePosition As Long
Set tbl = ActiveSheet.ListObjects("Table2")
'start FOR, LOOP
BodyCount = ActiveSheet.ListObjects("Table2").DataBodyRange.Rows.Count
Dim WorkingRow As Long
WorkingRow = 20
For i = WorkingRow to WorkingRow + BodyCount Step 1
'COPY "SourceRow" from "theFILE.xlsm"
Windows("theFILE.xlsm").Activate
Rows(SourceRow).Copy
'PASTE to Compile Sheet, next available column & TRANSPOSE row into column
Sheets("RAW").Cells.Item(FirstDestinationRow, DestinationColumn).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'COPY ROW from "sFile" Table2
wb.Activate
Rows(WorkingRow).Copy
Application.CutCopyMode = False
'PASTE to Compile sheet, TRANSPOSE row into column
Windows("theFILE 1.1.xlsm").Activate
ActiveSheet.Cells.Item(SecondDestinationRow, DestinationColumn).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
DestinationColumn = DestinationColumn + 1
Next i
''End custom code for desired loop operation
''CLOSE WORKBOOK W/O BEFORE SAVE
wb.Activate
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
ActiveWorkbook.Close savechanges:=False
Windows("theFILE.xlsm").Activate
Sheets("Sheet1").Select
''GO TO NEXT .xlsm FILE
SourceRow = SourceRow + 1
Loop
End Sub
我是 For...Next 循环的新手。任何和所有提示、技巧或提示将不胜感激。
【问题讨论】:
-
要复制表格中的所有行吗?一次做一个的原因是什么?
-
最后我想创建一个数据透视表。表 2 中的每一行都是唯一的。例如,工作簿可能是一个客户,每一行都是售出的一部分。
-
好的,但是你可以很容易地复制整个表格,为什么还要一次复制一个
-
我想我可以复制整个表,但我确实需要 theFILE.xlsm 中的整行以及每个 Table2 条目。
-
在转置数据时,为什么不发布数据组织方式和最终结果的示例图片。
标签: excel vba for-loop do-loops