Hirdetés

Új hozzászólás Aktív témák

  • bteebi

    veterán

    Sziasztok!

    Egy (nekem :) ) meglehetősen komplex problémám van. Innen-onnan összeszedtem egy kódot, aminek az lenne a feladata, hogy egy (vagy akár több) Excel file kiválasztása után a képleteket jelenítse meg a számolások helyett (működik), széthúzza a cellákat úgy, hogy minden látszódjon és megjelenítse a sor- és oszlopazonosítókat (ez is megy), és elmentse más néven a filet, mondjuk origi.xls helyett origi_mod.xls-ként. A file mentés része nem megy (nem úgy nevezi át, ahogy szeretném.). Ezután még az egész file-t elküldi a nyomtatóra. Ez is viszonylag jól működik, de nem tökéletes: ha xlDefault-nak adom meg a .Orientation-t, akkor hibaüzenettel (400-as hibakód) kilép, ha xlLandscape-nek, akkor lefut. Viszont nem feltétlenül Landscape kellene, mert lennének majd olyan file-ok, amiknél van Landscape/Portrait lap is. Mi lehet a gond?

    A kód:

    Sub ellenorzes()
    Dim ablak As FileDialog
    Dim fajlnev As String
    Set ablak = Application.FileDialog(msoFileDialogOpen)
    Dim FileChosen As Integer
    FileChosen = ablak.Show
    ablak.Title = "Válaszd ki a file-t"
    ablak.InitialFileName = "C:\"
    ablak.InitialView = msoFileDialogViewList
    ablak.Filters.Clear
    ablak.Filters.Add "Excel 2003 worksheet", "*.xls"
    ablak.Filters.Add "Excel 2010 worksheet", "*.xlsx"
    ablak.Filters.Add "Excel makró", "*.xlsm"
    ablak.FilterIndex = 1
    If FileChosen = -1 Then
    fajlnev = ablak.SelectedItems(1)
    Workbooks.Open (fajlnev)
    Else: Exit Sub
    End If
    Dim lap%
    For lap% = 1 To Worksheets.Count
    Sheets(lap%).Activate
    ActiveWindow.DisplayFormulas = True
    ActiveSheet.Columns("A:Z").EntireColumn.AutoFit
    With ActiveSheet.PageSetup
    .PrintHeadings = True
    .PaperSize = xlPaperA4
    .Orientation = xlLandscape
    End With
    Next
    ActiveWorkbook.SaveAs FileName:=ActiveWorkbook.Name & "_mod"
    If MsgBox("Kinyomtatja az összes munkalapot?", vbInformation + vbYesNo, "Munkalapok kinyomtatása") = vbYes Then
    ActiveWorkbook.PrintOut
    Else: Exit Sub
    End If
    End Sub

    További problémák, észrevételek:

    1. Első futáskor nem alkalmazza a szűrőket (.xls, .xlsx, kiindulási mappa). Másodjára már igen, még akkor is, ha csak elindítom a makrót, de nem választok ki file-t, tehát kilépek.
    2. A file megnyitása párbeszédpanelnél hogy lehetne a Sajátgépet, vagy azt a mappát kiválasztani, amelyikben az adott file van (amiből a makró fut)?
    3. Save as-nél probléma: a "_mod"-dal kiegészítve nem pont úgy írja át, ahogy szeretném: a filenév végéhez írja a "_mod"-ot, a kiterjesztés után. Ezt meg lehetne kerülni a kiterjesztést jelölő pont előtti/utáni részre való szűréssel. Ezt viszont egyrészt én nem tudnom megírni, ráadásul ha a filenévben is van pont, akkor a "legjobboldalibb" pont előtti/utáni részre kellene szűrni.
    4. Nekem úgy lenne logikus, ha az "If FileChosen = 1" lenne, de úgy nem csinál semmit, csak a -1-re. A kód, ami alapján csináltam, így volt:
    If FileChosen <> -1 Then
    Else
    fajlnev = ablak.SelectedItems(1)
    Workbooks.Open (fajlnev)

    5. Ha meg van nyitva a módosítani kívánt file (pl. az előző makrófutás után nyitva maradt), és azt nem írom felül, akkor hibaüzenetet ad. (A kódot az ActiveWorkbook.SaveAs sor nélkül futtattam, mivel az nem működött.)
    6. Hogy lehetne a "400" hibaüzenet okát kiíratni? Ilyet találtam, hogy
    On Error GoTo Errorcatch
    and at the end of the code put
    exit sub
    Errorcatch:
    MsgBox Err.Description

    De ezt sehogy se tudtam működésre bírni. Eleve ha Exit Sub-ot írtam a kód legvégére, akkor Compile Error van (End Sub-ot kér).
    7. Hogy lehetne azt megoldani, hogy a file mentésénél is legyen egy párbeszédpanel, aminek a default mappája vagy egy általam megadott hely lenne (pl. C:\mod\), vagy pedig a) a makrót tartalmazó file útja, esetleg b) a módosítani kívánt file útja.
    8. Hogy lehetne mindezt megcsinálni több file-lal egyszerre? Több file-t is ki lehet jelölni, de a makró csak egy file-on fut le.

    Bocsánat, kicsit hosszúra sikeredett :B. Egyelőre itt tartok. Természetesen tovább próbálkozom majd a hibák kijavításával. Minden javaslatot, javítást nagyon köszönök! :R

Új hozzászólás Aktív témák