所以我已经工作了几个小时,研究如何让现有的代码按我想要的方式运行。这段代码本身将在一个目录中的工作簿中循环,并将数据从第一个工作表上的特定单元格复制到一个新的工作簿中。我想让它做到这一点,但也通过每个工作簿中的每个工作表,以获得所需的数据。我会发布我尝试过的所有版本的数据,但我肯定这也会让我被禁止。所以我将发布我最近的:
子GatherData()
Dim wkbkorigin作为工作簿Dim originsheet作为工作表Dim destsheet作为工作表Dim ResultRow作为长Dim Fname作为字符串Dim RngDest作为范围Dim ws作为工作表
Set destsheet = ThisWorkbook.Worksheets("Sheet1")
Set RngDest = destsheet.Cells(Rows.Count, 1).End(xlUp) _
.Offset(1, 0).EntireRow
Fname = Dir(ThisWorkbook.Path & "/*.xlsm")
'loop through each file in folder (excluding this one)
Do While Fname <> "" And Fname <> ThisWorkbook.Name
Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname)
'Set originsheet = wkbkorigin.Worksheets("1st")
For Each ws In wkbkorigin
With ws
RngDest.Cells(1).Value = .Range("D3").Value
RngDest.Cells(2).Value = .Range("E9").Value
'.Cells(3).Value = originsheet.Range("D22").Value
'.Cells(4).Value = originsheet.Range("E11").Value
'.Cells(5).Value = originsheet.Range("F27").Value
End With
Next
wkbkorigin.Close SaveChanges:=False 'close current file
Set RngDest = RngDest.Offset(1, 0)
Fname = Dir() 'get next file
Loop
末端接头
如有任何帮助,不胜感激。
谢谢。
您需要的构造是:
Do While Fname <> "" And Fname <> ThisWorkbook.Name
Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname)
For Each ws in wkbkorigin.Worksheets '### YOU NEED TO ITERATE OVER SHEETS IN THE WORKBOOK THAT YOU JUST OPENED ON THE PRECEDING LINE
With ws
' Do something with the ws Worksheet, like take the values from D3 and E9 and put them in your RngDest range:
RngDest.Cells(1,1).Value = .Range("D3").Value
RngDest.Cells(1,2).Value = .Range("E9").Value
End With
Set RngDest = RngDest.Offset(1, 0) '## Offset this range for each sheet so that each sheet goes in a new row
Next
wkbkorigin.Close SaveChanges:=False 'close current file
Fname = Dir() 'get next file
Loop
另外,这是一个切线,但我将在这里删除它,只是为了说明一些可能的混淆点--看看VBA中迭代/循环的几种方式:
Sub testing()
Dim i As Long
i = 0
'## do Loop can have a condition as part of the Loop
Do
Call printVal(i)
Loop While i < 10
'## Or as part of the Do
Do While i < 20
Call printVal(i)
Loop
'## You can use Do Until (or Do While) as above
Do Until i >= 30
Call printVal(i)
Loop
'## Likewise, Loop Until (or Loop While)
Do
Call printVal(i)
Loop Until i >= 40
'## You don't even need to include a CONDITION if you Exit Do from within the loop!
Do
Call printVal(i)
If i >= 50 Then Exit Do
Loop
'## Or you can use While/Wend
While i < 60
Call printVal(i)
Wend
'## For/Next may also be appropriate:
For i = 60 To 70
Call printVal(i)
Next
End Sub
Sub printVal(ByRef i As Long)
i = i + 1
Debug.Print i
End Sub
所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作
2,3和6-12被跳过。下面是我的代码: 我认为这个问题与行“wb1.sheets(1).Range(”a“&Range(”a1“).end(xlDown).row+1)”有关,但我不知道如何解决这个问题。有什么建议吗?谢谢!
所以在COL D中,我必须只粘贴COL A和COL C相等的值,如果这些值不相等,则跳过或粘贴COL D中的任何东西 我写过类似这样的代码,但不幸的是它粘贴了一切!!
我对宏是新手,需要帮助。我在一个文件夹中有几个工作簿,每个工作簿有四个工作表。现在我想要一个mocro它复制数据从每个工作簿(工作表明智)和过去在我的主工作簿(工作表明智)意味着数据1应该被粘贴一个在另一个下面在我的主工作簿在工作表1和工作表2分别。*工作簿名称可以是文件夹中的任何东西。有人能帮我完成整个代码吗?我有宏从一张表到我分配的表的数据,但它复制粘贴数据从打开的表,而不是按表名明智的。有人
试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误
我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。