Keresés

Részletes keresés

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)
wawabagus Creative Commons License 2010.11.24 0 0 13384

Nem válaszoltam...nincsenek rejtett sheetek.

 

Előzmény: SQLkerdes (13382)
wawabagus Creative Commons License 2010.11.24 0 0 13383

Igen ez Personal mindig bekavar.

De persze nyitva van...ő az első workbook...

/már ahogy én értelmezem/.

 

Pont ezért a ciklus a 3 to DB, mert

1 = personal

2 = template

3 stb meg a megnyitott fájlok

 

Persze tisztában vagyok azzal, hogy nem mindenkinek lesz perszonalja és ezzel még kombinálnom kell.

De még nagyon elején voltam a makrómnak...meglőtt mielőtt elkezdtem volna szépítgetni :-)

 

:-)

 

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

Na, ezzel már megyünk valamire!

 

Vannak rejtett worksheetjeid bármelyik érintett workbookban?

Nem lehet, hogy a Personal-od (ami ugyi alapból rejtett) worksheet-jét próbálod manipulálni a for ciklus valamely részében?

Előzmény: wawabagus (13380)
SQLkerdes Creative Commons License 2010.11.24 0 0 13381

Na ne má!

Tessék csak megírni, itt a névtelenség (nicknévség) homályában semmi sem ciki!

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

Select method of Worksheet class failed.

Ezt írta ki.

 

A ciki hiba meg az volt, hogy a megnyitott munkafüzetekben, csak az első sorban volt adat tehát a select A2 stb-nek semmi lrtelme nem volt :-D.

 

De kijavítottam és továbbra is baja van...

 

:-(

SQLkerdes Creative Commons License 2010.11.24 0 0 13379

Lássuk mit mond a hibacsapda, utána okosabbak leszünk.

Legalább azt lesz esélyünk megtudni, hogy melyik object-tel van a gond, az is valami :-)

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

Asszem rájöttem a hibára és annyira ciki, hogy le sem merem írni :-DDDD

Leellenőrzöm :-D

Előzmény: SQLkerdes (13375)
Törölt nick Creative Commons License 2010.11.24 0 0 13377

Hülyeséget írtam?, for each-ben szoktak így értéket adni

Előzmény: Törölt nick (13374)
wawabagus Creative Commons License 2010.11.24 0 0 13376

Igen igen...igazad van a "A2"-t illetően, de ezt már korábban észrevettem és kijavítottam, de továbbra sem jó...

 

Az automatikus becsukás is jó ötlet, de mi van, ha menteni akarja majd, vagy pont az hogy nem akarja menteni...?

Bár biztos ez is kiküszöbölhető :-)...

 

Igen tudom, hogy mindig mondjátok, hogy hagyjam el a selecteket.

Mindig próbálom is utólag átnézni, hogy lehet-e valamit rövidíteni...szoktam selecteket törölni, de volt sokszor, hogy anélkül nem működött :-(...nem értem miért...mintha nem mindig lehetne elhagyható.

 

De elvileg selectel, vagy nélküle működnie kellene...

 

Tök igazad van, hogy törekedni kell a rövid tömör makrókra...:-).

De úgy vagyok vele, hogy ha megspórol nekem, vagy a kollégáimnak tobb óra munkát, akkor már csak hab a tortán hogy 2mp helyett 5-öt fut :-)...

 

De törekszem azért hogy tömör legyek, de még nincs meg a tudásom hozzá.

Tákolom őket össze mindenhonnan :-)...

 

 

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

A gond az i=i+1 résszel van (logikailag), de szerintem az nem kéne KO-zza a kódot, csak fura dolgokat csináltat vele (pld az i=2 értékre nem hajtja végre a ciklusban foglaltakat).

 

írd meg mit jelzett ki a hibacsapda

Előzmény: wawabagus (13372)
Törölt nick Creative Commons License 2010.11.24 0 0 13374

az i=i+1 típusú értékadást elég gyakran használják for cikluson belül. Számláló értékadásnak hívják. Ebben az esetben a 4-el pont tud mit kezdeni a "Next" is (For i=3 to DB)

 

az az usor = usor tényleg gyanús, lehet ott lesz a hiba? Így a változóba egy logikai érték kerül - amit persze hogy a Cells() nem tud hova rakni - és ebből lesz a 400-as error (ShowModal) hiba?

Előzmény: SQLkerdes (13370)

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