| 
	
 | 
 
           
             
               
               
                 
                   | 
                   Тема
                    | 
                     обединяване на файлове 
 | 
 
 |  
| Автор | 
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.
  
           
  
             |   |  
  |   
 
 
 |  
 |   
 |