Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
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
With Application.FileSearch .LookIn = útvonal .FileType = msoFileTypeExcelWorkbooks .Execute For i = 1 To .FoundFiles.Count Workbooks.Open .FoundFiles(i) Next
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.
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?
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.
É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+*)
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
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á.
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).
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?