|  | | 
 
| 
           
             | 
                 
                   | Тема |  обединяване на файлове   |  |  | Автор | ax4o (непознат
) |  | Публикувано | 25.06.08 10:53 |  |  | 
           
 Здраейте, имам нужда от следната помощ
 в папка 042008 имам към 20 екселски файла, в всеки от които им апо 2 шиита с точни имена едната се казва А а другата Б, искам да обединя информацията в нов файл, които също да съдържа шеет А и шеет Б, като шеет А е директно копиране на всичките 20 файла каквото те съдържат в шеет А, и съответното за шеет Б - що за макрос трябва да ползвам?
 Благодаря предварително за помощта
 
 
 Редактирано от ax4o на 25.06.08 11:10. 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: ax4o] |  |  | Автор | Бypaн (ентусиаст) |  | Публикувано | 25.06.08 15:59 |  |  | 
           
 По-долу е процедурата. Само там където имаш
 
 firstWS = "A"
 secondWS = "B"
 
 замени A и B с имената на двата листа, които искаш да копираш
 
 ' Кодът започва тук
 
 Sub CopyFilesInDir()
 
 Set objShell = CreateObject("Shell.Application")
 
 Set objFolder = objShell.BrowseForFolder(0, "Select Folder", 0, 0)
 
 If (Not objFolder Is Nothing) Then
 On Error Resume Next
 If IsError(objFolder.Items.Item.Path) Then MyDir = _
 CStr(objFolder): GoTo Here
 On Error GoTo 0
 
 If Len(objFolder.Items.Item.Path) > 3 Then
 MyDir = objFolder.Items.Item.Path & _
 Application.PathSeparator
 Else
 MyDir = objFolder.Items.Item.Path
 End If
 Else: Application.ScreenUpdating = True: End
 End If
 Here:
 Set objFolder = Nothing: Set objShell = Nothing
 
 
 firstWS = "A"
 secondWS = "B"
 
 Set MyNewFile = Workbooks.Add
 
 
 
 Set MyWS = MyNewFile.Worksheets.Add
 MyWS.Name = secondWS
 
 Set MyWS = MyNewFile.Worksheets.Add
 MyWS.Name = firstWS
 
 
 MyFileName = Dir(MyDir, 7)
 
 
 
 Do While MyFileName <> ""
 MyFile = MyDir & MyFileName
 
 Set wb = Workbooks.Open(MyFile)
 
 a = True
 B = True
 
 
 
 
 On Error Resume Next
 
 wb.Worksheets(firstWS).Activate
 
 If Err <> 0 Then
 a = False
 MsgBox ("В този файл няма лист " & firstWS & ". Затварям файла без копиране.")
 wb.Close
 End If
 
 If a Then
 wb.Worksheets(secondWS).Activate
 If Err <> 0 Then
 B = False
 MsgBox ("В този файл няма лист " & secondWS & "Затварям файла без копиране.")
 wb.Close
 End If
 
 On Error GoTo 0
 
 If a And B Then
 Application.ScreenUpdating = False
 LastRow = wb.Worksheets(firstWS).Range("A65536").End(xlUp).Row
 LastRow1 = MyNewFile.Worksheets(firstWS).Range("A65536").End(xlUp).Row
 If LastRow1 > 1 Then LastRow1 = LastRow1 + 1
 
 MyRange = "1:" & LastRow
 
 wb.Worksheets(firstWS).Rows(MyRange).Copy
 
 MyNewFile.Worksheets(firstWS).Rows(LastRow1).PasteSpecial
 
 
 LastRow = wb.Worksheets(secondWS).Range("A65536").End(xlUp).Row
 LastRow1 = MyNewFile.Worksheets(secondWS).Range("A65536").End(xlUp).Row
 If LastRow1 > 1 Then LastRow1 = LastRow1 + 1
 
 MyRange = "1:" & LastRow
 
 
 
 wb.Worksheets(secondWS).Rows(MyRange).Copy
 
 MyNewFile.Worksheets(secondWS).Rows(LastRow1).PasteSpecial
 
 Application.ScreenUpdating = True
 
 wb.Close
 
 
 End If
 End If
 
 
 MyFileName = Dir()
 
 
 
 Loop
 
 Worksheets(secondWS).Activate
 Cells(1, 1).Activate
 
 Worksheets(firstWS).Activate
 Cells(1, 1).Activate
 
 Do
 fName = Application.GetSaveAsFilename
 Loop Until fName <> False
 
 If Right(fName, 4) <> ".xls" Then fName = fName & ".xls"
 MyNewFile.SaveAs Filename:=fName
 
 End Sub
 
 ' Кодът свършва тук
 
 
 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: ax4o] |  |  | Автор | f(x) () |  | Публикувано | 25.06.08 21:22 |  |  | 
           
 справи ли се ако не изпрати ми файловете кажи какво къде искаш да копираш и ще ти напиша макросче. Правил съм го но малко по различно , дори в единия шийт ще ти направя и списък на файлчета.
 Пиши тук и ще ти дам моя адрес
 
 
 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: Бypaн] |  |  | Автор | ax4o (непознат
) |  | Публикувано | 26.06.08 11:52 |  |  | 
           
 Благодаря за бързия отговор и работещо решение, сега само требе да махна първият ред от всеки лист и е готово.
 
 Човърках се, но намерих само два примера за изтриване на празните редове в този клуб, но нито един не ми върши работа тъй като трябва да правя проверка ако стойността в колона г(2-последният писан ред)=0 или няма стойност от лист Б  да не ги копира в новосъздаденият лист Б
 
 Още венъж Благодаря боби. Имаш интересен блог
 
 
 Редактирано от ax4o на 26.06.08 11:54. 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: ax4o] |  |  | Автор | Бypaн (ентусиаст) |  | Публикувано | 26.06.08 12:05 |  |  | 
           
 Ако правилно съм те разбрал, имаш антетка в първия ред на всеки лист, така ли?
 всъщност не съобразих, ама и ти не беше казал... :-) ако е това пипни кода, който ти пуснах.
 Редовете
 
 MyRange = "1:" & LastRow
 
 Трябва да станат
 
 MyRange = "2:" & LastRow
 
 Така няма да копира първия ред от всеки лист
 
 
 Другото за проверката не го разбрах нещо... Трябва ако колона G в последния ред е 0 или празно, да не копира нищо от този лист, така ли? А с лист а какво става в този случай?
 освен това, ако е ясно коя е последната колона ( примерно трябва да се копират само колони от A до G, може да се поправи, за да не копира целия ред) ще работи по-бързо, а и няма да те пита за clipboarda
 
 
 Редактирано от Бypaн на 26.06.08 12:11. 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: Бypaн] |  |  | Автор | ax4o (непознат) |  | Публикувано | 26.06.08 12:28 |  |  | 
           
 Ами и в А лист сами излишни празните стойности но там са 4 колони в които в която и от тях да има запис различен от 0 или нищо трябва да остават.  Но мога да променя ако в колона Е няма запис да се изтрива
 лист А се попълват колони от А до Й (джей), а в лист Б колони от А до Г.
 Сетих се за  MyRange = "2:" & LastRow - работи.
 
 
 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: ax4o] |  |  | Автор | Бypaн (ентусиаст) |  | Публикувано | 26.06.08 13:43 |  |  | 
           
 Сложи този код:
 
 MyNewFile.Activate
 
 i = 1
 Do
 
 If Worksheets(firstWS).Cells(i, 5).Value = "" Or _
 Worksheets(firstWS).Cells(i, 5).Value = 0 Then
 Worksheets(firstWS).Rows(i).Delete
 LastRow = Worksheets(firstWS).Range("A65536").End(xlUp).Row
 Else
 i = i + 1
 End If
 
 Loop Until i > LastRow
 
 
 
 i = 1
 Do
 
 If Worksheets(secondWS).Cells(i, 7).Value = "" Or _
 Worksheets(secondWS).Cells(i, 7).Value = 0 Then
 Worksheets(secondWS).Rows(i).Delete
 LastRow = Worksheets(secondWS).Range("A65536").End(xlUp).Row
 Else
 i = i + 1
 End If
 
 Loop Until i > LastRow
 
 
 След реда Loop  - имам предвид този Loop който е непосредствено след MyFileName = Dir()
 След като всичко е копирано прави проверка в лист а и лист Б на новия файл и итрива редовете в лист А, за които стойността в колона Е e нула или нищо, както и в лист B, там където в колона G e нула или нищо
 Надявам се че няма проблем с кода, но ако има нещо - кажи
 
 
 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове  [re: Бypaн] |  |  | Автор | ax4o (непознат) |  | Публикувано | 26.06.08 15:17 |  |  | 
           
 Благодаря работи перфектно!
 
 
 
 
 |  |  |  
             | 
                 
                   | Тема |  Re: обединяване на файлове
[re: Бypaн] |  |  | Автор | lRlKO (непознат
) |  | Публикувано | 20.08.08 16:53 |  |  | 
           
 И аз имам подобен случай за обединяване.Всяка таблица има два шийта, само че са наименувани различно, а на първата трябва да пише чл.3, на втората чл.3а.Трябва и да се вмъкнат три колони отпред и да се запише в тях съдържанието на F4,F6 и B6.
 
 
 
 
 |  |  |  |  
 
 |   | 
 |