Excel mentése másként macróval
2020-11-03T17:26:01+01:00
2020-11-09T15:04:06+01:00
2022-08-11T22:45:30+02:00
M.János
A következő problémába ütköztem. Szeretném elmenteni az excel egyik lapját csv. formátumba, ami egy cellában található. 
Nos a következő paranccsal ez sikerült az aktív oldalt lementeni, de nem tudok neki egyedi nevet adni cellából:

ActiveWorkbook.SaveAs Filename:= _
"C:\Users\.....\Desktop\Teszt.csv", FileFormat:=xlCSV, _
CreateBackup:=False, Local:=True

Próbáltam egyedi név alapján menteni cellából, de ebben az esetben a teljes dokumentumot menti ki, és az új néven marad nyitva az excel amit nem szeretnék. Tehát a bevásárló lista nevű excelből csak a napi lista lapot menteném ki a benne található "H3"-as cella néven csv-ben.

Dim SaveName As String
       SaveName = ActiveSheet.Range("h3").Text
       ActiveWorkbook.SaveAs Filename:="C:\Users\mesterjanos\Desktop" & _
           SaveName & "."

 Lehet alapvetően rosszul közelítettem meg, de tanácsaitokat előre is köszönöm!
Mutasd a teljes hozzászólást!
Szia!
Másold át a munkalapot egy új fájlba és azt mentsd el a kívánt helyre.
Pl.

Dim SaveName As String SaveName = ActiveSheet.Range("h3").Text Activesheet.Copy ActiveWorkbook.SaveAs Filename:="C:\Users\mesterjanos\Desktop" & _ SaveName, FileFormat:=xlCSV, _ CreateBackup:=False, Local:=True ActiveWorkbook.Close Savechanges:=True
Üdv.
Mutasd a teljes hozzászólást!

  • Szia!
    Szerintem nem teljes a parancssorod.
    Próbáltad így:

    Dim SaveName As String SaveName = ActiveSheet.Range("h3").Text ActiveWorkbook.SaveAs Filename:="C:\Users\mesterjanos\Desktop\" & _ SaveName, FileFormat:=xlCSV, _ CreateBackup:=False, Local:=True
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia! 
    Köszönöm szépen. sokkal jobb lett. Valóban csak azt oldalt menti. Viszont a H3 néven elnevezett excel marad nyitva. Erre van esetleg ötleted, hogy tudnék az eredetiben excelben maradni? Tehát dolgoznék ott tovább, csak a csv képződjön meg?
    Mutasd a teljes hozzászólást!
  • Szia!
    Másold át a munkalapot egy új fájlba és azt mentsd el a kívánt helyre.
    Pl.

    Dim SaveName As String SaveName = ActiveSheet.Range("h3").Text Activesheet.Copy ActiveWorkbook.SaveAs Filename:="C:\Users\mesterjanos\Desktop" & _ SaveName, FileFormat:=xlCSV, _ CreateBackup:=False, Local:=True ActiveWorkbook.Close Savechanges:=True
    Üdv.
    Mutasd a teljes hozzászólást!
  • Nagyon szépen köszönöm! :)
    Mutasd a teljes hozzászólást!
  • Szia!

    Ha még kérhetem segítséged, akkor egy dolog nem stimmel csak. Ebben az esetben valóban a kívánt eredményt kaptam, leszámítva, hogy a tagolás vesszővel történik pontosvessző helyett, úgy hogy a dátum formátum sem megfelelő. Ezért gondoltam, ez területi beállítás lehet, de a Windowsban jó a beállítás. Egyébként, ha manuálisan mentem le mentés máskénttel, akkor jó, csak a makró nem akarja az igazat.
    Mutasd a teljes hozzászólást!
  • Szia!
    A területi beállításokban az van, amit a képen látsz?
    Esetleg próbáld meg a Fileformat paraméternél a xlCSVWindows
    értéket használni.
    Ha ez nem segítene, akkor.....
    Még egy próba lehetőség. A másolás-mentés-bezárás folyamatot makrórögzítés mellett csináld meg. Ezután futtasd a makrót, kíváncsi lennék az eredményre.

    Üdv.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Hát roppant érdekes. A Makró rögzítése varázslóval elmentettem másként csak azt az oldalt. Erre szuper lett, pontosvesszővel tagol. Na gyorsan megnézem a makrót miben más. Hiányzik a Local:=True parancs. Na gyorsan kiszedem akkor az eredetiből is. Erre ugyan úgy vesszővel tagol. 

    Ha gondolod fel tudom másolni a dokumentumot, hátha többet látsz.
    Mutasd a teljes hozzászólást!
  • Szia!
    Nem lenne haszontalan szerintem.
    Mi történik, ha a rögzített makrót futtatod ismételten.
    Akkor is jó a tagolójel?
    Üdv.
    Mutasd a teljes hozzászólást!
  • Nézd el, hogy nem profi munka, de a kollégáim munkáit szeretném vele segíteni.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia!
    Sajnos már korábban is beleütköztem ebbe a problémába, hogy a VBA csak a vesszős változatot hajlandó megcsinálni CSV formátumban.
    Ezt az alábbi módon lehet megkerülni:
    Az ActiveSheet.Copy után tedd be a makróba:

    For Each sor In ActiveSheet.UsedRange.Rows sor.Cells(1).Value = Join(Application.Transpose(Application.Transpose(Range(sor.Cells(1), sor.Cells(sor.Cells.Count)).Value)), ";"): Range(sor.Cells(2), sor.Cells(sor.Cells.Count)).Delete shift:=xlToLeft Next
    Ezután jön az ActiveWorkbook.SaveAs sor.
    Tehát mentés előtt összefűzzük az első cellába az értékeket pontosvesszővel, a maradék cellákat pedig töröljük.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Te egy isten vagy! Nagyon jó!. Most már szuper. :) Jövök egy sörrel :)
    Mutasd a teljes hozzászólást!
  • Arra van ötleted, hogy a dátumot miért vágja meg?
    Tehát most a CSV-ben ez van: 2020.11.09  13:40:00
    A helyes pedig ez lenne: 2020.11.09. 13:40:00

    A nap után valamiért leszedi a pontot.
    Mutasd a teljes hozzászólást!
  • Szia!
    Valamiért az oprendszer nem szereti a nap utáni pontot :(
    Az áthidalást a következőképpen lehet megoldani:

    For Each sor In ActiveSheet.UsedRange.Rows sor.Cells(1).Value = Join(Application.Transpose(Application.Transpose(Range(sor.Cells(1), sor.Cells(sor.Cells.Count)).Value)), ";"): Range(sor.Cells(2), sor.Cells(sor.Cells.Count)).Delete shift:=xlToLeft Next
    Helyett:

    Dim sor As Range, cl As Range, szov As String For Each sor In ActiveSheet.UsedRange.Rows szov = "" For Each cl In sor.Cells szov = szov & ";" & cl.Text Next szov = Mid(szov, 2) sor.Cells(1).Value = szov: Range(sor.Cells(2), sor.Cells(sor.Cells.Count)).Delete shift:=xlToLeft Next
    Ilyen módon a dátumot tartalmazó cellák tartalma a cellában látható formában fog bekerülni a kiírandó szövegbe.
    Remélhetőleg nincsenek olyan képletek a cellákban, amelyek az előző sorokra hivatkoznak, ha lennének, akkor ezeket a képleteket át kell alakítani értékké, vagy a második oszloptól a törlést a végére kell hagyni. Ha az előző sor első cellájára hivatkozó képlet lenne, azt mindenképpen értékké kell alakítani a kiírás előtt. 
    Mivel azonban ez úgyis egy - az eredetitől már függetlenített - új munkafüzet/munkalapja, ez gondolom nem okozhat problémát.
    A képlet értékké alakítása pl.
    Range("A1:X5").Value=Range("A1:X5").Value
    Csak egybefüggő tartományt lehet ilyen módon értékké alakítani.
    Üdv.
    Mutasd a teljes hozzászólást!
abcd