2017-01-16 82 views
0

我有一个文件夹中的约50 Excel工作表,在我的MacBook - (/用户/用户名为myusername /桌面/整理/文件夹“)打开,重命名和在多个运行同一个Excel宏Excel文件

我想执行

Sub SmartCopy() 
Dim s1 As Worksheet, s2 As Worksheet 
Dim N As Long, i As Long, j As Long 
Set s1 = Sheets("s1") 
Set s2 = Sheets("s2") 
N = s1.Cells(Rows.Count, "Y").End(xlUp).Row 
j = 1 
For i = 1 To N 
    If s1.Cells(i, "Y").Value = "No" Then 
    Else 
     s1.Cells(i, "Y").EntireRow.Copy s2.Cells(j, 1) 
     j = j + 1 
    End If 
Next i 

末次

我很努力,使纸张打开,就像文件路径将不被认可,也各片被命名为这样的:

他们所有下面的宏

个业务上市-002-W-site.csv

一个标签:

企业上市-002-W-site.csv

所以我还需要:1)重命名表每次2)让宏只打开工作簿中的唯一工作表。

我想将所有工作簿中的所有数据复制到一个主文件夹中。我确实尝试添加我的宏并适应这一个,但根本无法让它运行。

link to another post

回答

0

您需要定义工作簿(文件),而不仅仅是片(标签)。

Dim filePath as String 
Dim sheetStart as String 
Dim count as Integer 
Dim sheetEnd as string 
Dim thisSheet as Worksheet 
Dim wb1 as Workbook 
Dim ws1 as Worksheet 


filePath = "/Users/myusername/Desktop/Tidy/folder/" 
sheetStart = "business-listing-" 
sheetEnd = "-w-site" 
Set thisSheet as ThisWorkbook.Worksheets("Sheet1") 


For count = 1 to 44 'the range of sheets you have 
    Set wb1 = Workbooks.Open(filePath & sheetStart & format(count, "000") & sheetEnd & ".csv") 
    Set ws1 = wb1.Worksheets(sheetStart & format(count, "000") & sheetEnd) 

    'move the ranges you want from ws1 to thisSheet 

    wb1.close 
next count 

每次代码循环时,它都会改变正在打开的文件名和正在查找的表单。

我假设你知道或者可以找到如何基于你提供的原始代码从ws1复制范围到thisSheet的下一个可用行。

与改进的代码编辑基于评论

+0

我仍然不能得到这个工作。简而言之,我需要循环大量不知名称的工作簿,我也不知道每个工作簿中唯一标签的名称。然后,我需要通过查找J列并在该列中找到任何'no'条目并仅选择这些行,然后将它们全部放在一个主表格上来对数据进行排序。 –

+0

是否按任何逻辑顺序命名?即business-listing-002-site-w,business-listing-003-site-w,..004 ...等等? – MisterO

+0

他们其实是的,但我认为会有办法打开文件夹中的任何文件。当然,我会采取任何解决方案!实际的文件从“business-listing-000-w-site”到“business-listing-041-w-site”,感谢您的帮助。 –