Keresés

Részletes keresés

SQLkerdes Creative Commons License 2010.11.25 0 0 13414

De hisz a #13385-ben pont ezt javasoltam!

Azt hittem ezt is kipróbáltad és nem működött :-(

Előzmény: wawabagus (13411)
Törölt nick Creative Commons License 2010.11.25 0 0 13413

Örülök! :-))

 

Ugye már az a "i = i + 1" sincs a for ciklusban? Mert az nagyon nem jó oda.

Előzmény: wawabagus (13411)
SQLkerdes Creative Commons License 2010.11.25 0 0 13412

Szerintem ezt a problémát az okozza, hogy a UsedRange object-ed még akkor is egy 1x1-es tartomány (az A1 cella) ha üres a worksheet.

Ennek eredményeként:

 

 usor = ActiveSheet.UsedRange.Rows.Count utasítás eredménye usor=1

    Cells(usor + 1, 1).select  eredménye, hogy (usor+1=1+1=2) a második sor kerül kiválasztásra

 

A becsapós, hogy amikor a sheet nem üres, hanem "csak" egy sort foglal el, ugyanez az eredmény áll elő.

Előzmény: wawabagus (13399)
wawabagus Creative Commons License 2010.11.25 0 0 13411

ÉS IGEN ÉS IGEN ÉS IEGN :-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD...

 

Ez egy tök jó ötlet ezzel a lépésenkénti Msgbox-al :-DDDDDDDDD

Juhhéj

 

Az excel ezt nem szereti:

Range(workbooks(i).sheets(1).cells(1,1), workbooks(i).sheets(1).cells(1,1).end(xltoright).end(xldown)).copy

 

Míg ezt kedveli:

 Workbooks(i).sheets(1).usedrange.copy

 

SZUPER!!!!

 

Köszi köszi köszi!!!!!!!!!!!!!!!!!

:-)

Előzmény: Törölt nick (13410)
Törölt nick Creative Commons License 2010.11.25 0 0 13410

Be kellene határolni, hogy melyik lépésnél akad ki.

 

Tegyél be egy msgbox ""-ot az első utasítás után, majd, ha még jó, akkor így tovább.

 

For i = 3 to Db

...

Workbooks(i).Activate

Msgbox ""

...

Előzmény: wawabagus (13409)
wawabagus Creative Commons License 2010.11.25 0 0 13409

Beírtam és jót csinál mert a sheet1-el manipulál.

De nem megy egyáltalán végig a cikluson.

 

Kinyiffan az elsőnél...

 

Ez csak azért fura mert tök ugyanaz a kód ciklusba rakás nélkül jól működik...

 

 

Előzmény: Törölt nick (13407)
Törölt nick Creative Commons License 2010.11.25 0 0 13408

Ja, bocsi ezt elnéztem, valóban, javítsd ki Worksheets(1).Name-ra

Előzmény: Törölt nick (13407)
Törölt nick Creative Commons License 2010.11.25 0 0 13407

Worksheets(i) nincsen, csak worksheets(1) :-)

 

Nyilván nincs, ezért irattam ki elsőként az i értékét, hogy be lehessen helyettesíteni.

 

Szóval, végigment a ciklus vagy már az elején (az első kiírás után) elszállt?

Előzmény: wawabagus (13406)
wawabagus Creative Commons License 2010.11.25 0 0 13406

Worksheets(i) nincsen, csak worksheets(1) :-)

 

De ha lenne akkor ezt írja ki:

 

Tehát tök jó a kiválasztás. Nekem pont a Book2 kell.

Mivel nálam ugye worksheets(1) van ezért igazából Sheet1 lesz a név :-)...

 

Annyira idegesítő...

Tök nem értem...

Biztos valami banális hiba van a kódban.

 

Előzmény: Törölt nick (13405)
Törölt nick Creative Commons License 2010.11.25 0 0 13405

Javaslom, hogy az alábbi kis módosítással nézzük meg a for ciklus működését:

 

For i = 3 To Db

    MsgBox "i = " & i & Chr(10) & _
           "Workbooks(i).Name: " & Workbooks(i).Name & Chr(10) & _
           "Worksheets(i).Name: " & Worksheets(i).Name

   

    Workbooks(i).Activate

    .......

Előzmény: wawabagus (13404)
wawabagus Creative Commons License 2010.11.25 0 0 13404

Ezzel próbálkoztam tegnap.

De semmi eredmény :-(((((((((

Előzmény: Törölt nick (13403)
Törölt nick Creative Commons License 2010.11.25 0 0 13403

Először is az alábbi módosítást javaslom:

 

i = i+1

Next

 

helyett

 

Next i

Előzmény: wawabagus (13402)
wawabagus Creative Commons License 2010.11.25 0 0 13402

Szia!

Köszönöm az ötletet, de közben rájöttem, hogy azért nem tudta az Excel hova másoljon, mert cellákat töröltem és nem sorokat.

/Persze nem értem miért volt ez baj neki, de mindegy/

 

Az őrület környékez. Kikészülök ettől a #&@&# makrótól. Főleh, hogy szerintem olyan közel vagyok amegoldához és mégis távolt :-D.

 

Minden ami zöld a csodásan működik, mert kipróbáltam.

Ami problémás az a maradék...

DE MIÉRT??????????????????????????????

Megőrülök!!!!!!!!

 

Sub megnyitás()
respond = MsgBox("Do you have other excel file open?", vbYesNo, "Question:")
On Error GoTo Errorcatch
    If respond = vbYes Then
        MsgBox "Please close all excel files except the template!"
        Exit Sub
    Else

útvonal = "S:AdHoc AnalysisMACROKárolyi Krisztateszt"

With Application.FileSearch
    .LookIn = útvonal
    .FileType = msoFileTypeExcelWorkbooks
    .Execute
For i = 1 To .FoundFiles.Count
     Workbooks.Open .FoundFiles(i)
Next

End With
End If

Db = Workbooks.Count


For i = 3 To Db


    Workbooks(i).Activate
    Range(Workbooks(i).Worksheets(1).Cells(1, 1), Workbooks(i).Worksheets(1).Cells(1, 1).End(xlToRight).End(xlDown)).Copy
    Workbooks("Trackcode merge template.xls").Activate
    Sheets("Combine").Select
    usor = ActiveSheet.UsedRange.Rows.Count
    Cells(usor + 1, 1).Select
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste


i = i + 1
Next
Exit Sub
Errorcatch:
MsgBox Err.Description
End Sub

 

 

Előzmény: Törölt nick (13401)
Törölt nick Creative Commons License 2010.11.25 0 0 13401

Szia! Próbáld meg az alábbit:

usor = Range("A" & Rows.Count).End(xlUp).Row 'sorok száma az A oszlop értékei alapján

Előzmény: wawabagus (13399)
wawabagus Creative Commons License 2010.11.25 0 0 13400

Mi több, lefuttatom a lenti kódot.

Megcsinálja.

 

A temlétből törlöm a bemásolt sorokat, mentem és becsukok mindent.

 

Újra nyitom a templétet, az excel mintha emlékzne, hogy ott volt korábban pár sor, amit töröltem és folytattja a "kitörölt", tehát fizikailag már nem ott lévő sorok alatt.

 

Ki a hülye? Én vagy az excel?

 

wawabagus Creative Commons License 2010.11.25 0 0 13399

Sziasztok!

Tesztelem továbbra is ezt a #&@&# makrót.

Immediat ablakban csináltam, úgy hogy részenként tesztelem...

Leegyszerűsítettem és kinyitottam a temlétet meg a Book2 fájlt, hogy megnézzem a copy működik-e.

 

Vicces mert úgy tűnik hiányzott egy cell select parancs és most már kopizza, viszont egy dolgot baromira nem értek...

Ahányszor futtatom a makrót mindig lejjebb és lejjebb másol, amit totál nem értek...hiszem ha én kitörlöm az előző bemásolt sorokat, akkor a használt sorok száma marad 1...

 

Nem tudom értitek-e...

 

A lenti részt teszteltem. És működik is. Elvileg hurrá. Viszont, ha újra próbálkozom ennek a kódnak a futtatásával, úgy hogy amit korábban bemásolt 2 sor törlöm, akkor ő mintha úgy látná, hogy ott továbbra is van valami...és a már kitörölt sorok alá másolja be az újat?

De miért?

 

 

Range(Workbooks("Book2").Worksheets("Sheet1").Cells(1, 1), Workbooks("Book2").Worksheets("Sheet1").Cells(1, 1).End(xlToRight).End(xlDown)).Copy
    
Workbooks("Trackcode merge template.xls").Activate
    
    Sheets("Combine").Select
    usor = ActiveSheet.UsedRange.Rows.Count
    Cells(usor + 1, 1).select    
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    ActiveSheet.Paste

a=usor + 1
?a

 

wawabagus Creative Commons License 2010.11.25 0 0 13398

Jaj...nem fejeztem be az előző hozzászólást :-):

Szóval ez rendben van, mert

1 = Personal

2 = template

3 = Book2

 

ez tök jó

 

 

De aztán a végén meg ezt írja ki:

 

Előzmény: SQLkerdes (13390)
wawabagus Creative Commons License 2010.11.25 0 0 13397

Szia!

Megcsináltam, amit mondtál és jó munkfüzet nevet ír ki:

 

 

Előzmény: SQLkerdes (13390)
MixM Creative Commons License 2010.11.25 0 0 13396

Sziasztok!

 

 Segítségre lenne szükségem!

 Excel-ben adott egy sorban néhány cella, melynek tartalam "P". Azt kellene leellenőrizni, hogy "P" és "P"-t tartalamzó cellák közti cellák száma nem több 6-nál. Amennyiben több jelölje ki a két "P" közti cellákat pirosal.

 

Köszi!

SQLkerdes Creative Commons License 2010.11.25 0 0 13395

Dim SourceWS As Worksheet

Set ws = Workbooks("book1").Worksheets(1)

SourceWS.Range("A1").CurrentRegion.Copy

 

helyett

 

Dim SourceWS As Worksheet

Set SourceWS = Workbooks("book1").Worksheets(1)

SourceWS.Range("A1").CurrentRegion.Copy

 

Előzmény: SQLkerdes (13394)
SQLkerdes Creative Commons License 2010.11.25 0 0 13394

Értem amit mondasz, de nézd meg a kódot ami a hibát generálta:

 

Range(workbooks(i).sheets(1).cells(1,1), workbooks(i).sheets(1).cells(1,1).end(xltoright).end(xldown)).copy

 

Itt nincsen nulladik sor v. oszlop az tuti.

Én arra gyanakszom, hogy vagy a workbook-kal vagy a worksheet(1)-el van valami gond.

 

Még egy elméleti hibalehetőség (nem gondolom, h ez a gond, de jobb helyretenni) az hogy wawabagus kódjában Sheets(1) szerepel, nem pedig Worksheets(1).  Elméletben ez okozhat olyan hibát, hogy ha az első sheet pld egy Chart akkor azt próbálja kijelölni és kopizni.  Én nem szeretek Sheet-re hivatkozni, mert sose tudja az ember, hogy olyan sheet-e, mint amivel igazán dolgozni szeretne...

 

 

Kicsit mellékszál:

A sok xldown és xltoright helyett lehetne használni a következő technikát is:

 

Dim SourceWS As Worksheet

Set ws = Workbooks("book1").Worksheets(1)

SourceWS.Range("A1").CurrentRegion.Copy

 

Merthogy a CurrentRegion object direkt erre van (excel felületen a Ctrl+*)

 

 

Előzmény: Törölt nick (13391)
Törölt nick Creative Commons License 2010.11.25 0 0 13393

Bocsi, a kódot dupláztam. Ugyanaz a kettő, csak az elsőből töröltem a felesleges üres sorokat.

Előzmény: Törölt nick (13392)
Törölt nick Creative Commons License 2010.11.25 0 0 13392

Valami ilyesmi lehetne a rövidített verzió:

 

Sub megnyitás()
    Dim respond As Long, útvonal As String
    Dim wbSource As Workbook, rngTarget As Worksheet
   
    respond = MsgBox("Do you have other excel file open?", vbYesNo, "Question:")
    If respond = vbYes Then
        MsgBox "Please close all excel files except the temple!"
        Exit Sub
    Else
        útvonal = "S:AdHoc AnalysisMACROKrisztateszt"
        With Application.FileSearch
            .LookIn = útvonal
            .FileType = msoFileTypeExcelWorkbooks
            .Execute
            For i = 1 To .FoundFiles.Count
                Set wbSource = Workbooks.Open(.FoundFiles(i))
                Set rngTarget = Workbooks("Trackcode merge template.xls").Sheets("Combine").Range("A" & Rows.Count).End(xlUp).Offset(1)
                wbSource.Sheets(1).UsedRange.Offset(1).Copy
                rngTarget.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                wbSource.Close SaveChanges:=False
            Next
        End With
    End If
End Sub

 

Sőt, szerintem ebből a "respond" begyűjtése és kiértékelése is kihagyható.

Sub megnyitás()
    Dim respond As Long, útvonal As String
    Dim wbSource As Workbook, rngTarget As Worksheet
    
    respond = MsgBox("Do you have other excel file open?", vbYesNo, "Question:")
    If respond = vbYes Then
        MsgBox "Please close all excel files except the temple!"
        Exit Sub
    Else

        útvonal = "S:AdHoc AnalysisMACROKrisztateszt"
        
        With Application.FileSearch
            .LookIn = útvonal
            .FileType = msoFileTypeExcelWorkbooks
            .Execute
            For i = 1 To .FoundFiles.Count
                Set wbSource = Workbooks.Open(.FoundFiles(i))
                Set rngTarget = Workbooks("Trackcode merge template.xls").Sheets("Combine").Range("A" & Rows.Count).End(xlUp).Offset(1)
                wbSource.Sheets(1).UsedRange.Offset(1).Copy
                rngTarget.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                wbSource.Close SaveChanges:=False
            Next
        End With
    End If


End Sub
Előzmény: wawabagus (13366)
Törölt nick Creative Commons License 2010.11.25 0 0 13391

Nem worksheet-tel van baj, hanem olyan range hivatkozás van, ami nem létezik.

Pl nulladik sor- v. oszlopindex.

Előzmény: SQLkerdes (13390)
SQLkerdes Creative Commons License 2010.11.24 0 0 13390

Akkor a "for i=3 to db" ciklus for utáni első sorába még tedd be ezt, hogy lássuk melyik workbookkal van baj:

 

MsgBox workbooks(i).fullname

 

 

Előzmény: wawabagus (13366)
wawabagus Creative Commons License 2010.11.24 0 0 13389

Az elsőt :-)...

 

Most futok, mert itt hagynak :-(...

 

Köszi :-)!!!!!!!!!!

Előzmény: SQLkerdes (13387)
wawabagus Creative Commons License 2010.11.24 0 0 13388

Le kell lépjek most sajnos, mert várnak rám...

 

Köszönöm az eddigi segítséget nektek...!!!

 

Holnap folytatom a hajtépést :-D...

 

Szép estét mindenkinek!!!

 

SQLkerdes Creative Commons License 2010.11.24 0 0 13387

Melyik módszert választottad?

 

Előzmény: wawabagus (13386)
wawabagus Creative Commons License 2010.11.24 0 0 13386

Method 'Range' of object '_Worksheet" failed.

 

:-(.

Előzmény: SQLkerdes (13385)
SQLkerdes Creative Commons License 2010.11.24 0 0 13385

Nyírjuk ki a kódnak ezt a részét:

 

Workbooks(i).Sheets(1).Range(A2).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy

 

Ehelyett használd a következőt:

 

Range(workbooks(i).sheets(1).cells(1,1), workbooks(i).sheets(1).cells(1,1).end(xltoright).end(xldown)).copy

 

 

 

Vagy

 

Workbooks(i).sheets(1).usedrange.copy

 

A második lehet, hogy nagyobb területet másol ki mint az első, ha vannak pld üres sorok a táblázatodon belül.

Előzmény: wawabagus (13380)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!