Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 03-10-12, 12:34
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλησπέρα Θανάση!

Δεν σε αντιληφθήκαμε και σε προσπεράσαμε

Είδα τον κώδικα σου και έχω να κάνω τις εξής παρατηρήσεις.

Χρησιμοποιείς συνεχώς Activate και Select. Δεν υπάρχει λόγος.
Δε χρειάζεται να κάνεις αναπαράσταση των κινήσεων που θα έκανες χειροκίνητα μέσα από τη VBA.
Σε πολλές περιπτώσεις δεν χρειάζεται καν να κάνεις Copy Paste προγραμματιστικά.

Για παράδειγμα: η γραμμή Range("A1:A100").Value = Range("B1:B100").Value αντιγράφει τις τιμές
από την περιοχή "B1:B100" στην περιοχή "Α1:Α100" χωρίς να χρειαστούν Select , Activate , Copy και Paste.

Δεν διαπίστωσα κάποια συντακτικά λάθη.
Η μόνη μου υποψία σε σχέση με το πρόβλημα βρίσκεται στη γραμμή Application.Run "PERSONAL.XLSB!Bold_Italic_Keywords.Bold_Italic_Ke ywords"

Ωστόσο αφού μελέτησα τη ροή του κώδικα σου σου προτείνω να μελετήσεις τις τεχνικές που εφαρμόζονται στον παρακάτω (ενδεικτικό) κώδικα:

Κώδικας:
Option Explicit

Sub ImportDataSpore()
    Dim rngTarget As Range, wbDelivery As Workbook, wbInvoice As Workbook, wb As Workbook
    Dim wbDeliveryPath As String, aLinks As Variant, i As Integer

    Set wbDelivery = Workbooks("Delivery.xlsx")
    wbDeliveryPath = wbDelivery.FullName
    Set wbInvoice = Workbooks("INVOICE Spore.xls")
    Set rngTarget = wbInvoice.Worksheets("PROVISIONS").Range("A10:E507")

    Application.ScreenUpdating = False

    rngTarget.Value = wbDelivery.Worksheets("ExcelDeliveryQry").Range("A3:E500").Value '***Import Data to Invoice

    wbDelivery.Close True '***Close Workbook 'Delivery.xlsx'

    On Error Resume Next
    Kill wbDeliveryPath '***Delete Workbook 'Delivery.xlsx'

    On Error GoTo 0
    Set rngTarget = rngTarget.Resize(rngTarget.Rows.Count + 1, rngTarget.Columns.Count)

    With rngTarget
        .Font.Name = "Calibri"
        .Font.Size = 11
        .VerticalAlignment = xlTop

        With .Columns(2)
            .ColumnWidth = 49.6 '***Autofit
            .HorizontalAlignment = xlLeft
            .WrapText = True
        End With

        With .Columns(7)
            .FormulaR1C1 = "=IF(RC[-2]<>"""",RC[-3]*RC[-2],"""")" '***Total (Qty * U/Price)
            .Value = .Columns(7).Value
        End With

        With .Parent.Range("G508")
            .Value = Application.Sum(.Columns(7))
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders.Weight = xlThin
            .Font.Bold = True
            .Font.Italic = True
        End With
        
        '***SGD Format
        .Parent.Range("E10:G508").NumberFormat = "_([$SGD] * #,##0.00_);_([$SGD] * (#,##0.00);_([$SGD] * ""-""??_);_(@_)"
        .Parent.Columns("E:G").EntireColumn.AutoFit

        With .Parent.Range("B508")
            .Value = "Total Net Amount"
            .Font.Bold = True
            .Font.Italic = True
        End With
    End With
    
    '***Remove Links (Not needed since all formulas are converted to values)
'    aLinks = wbInvoice.LinkSources(xlExcelLinks)
'    If Not IsEmpty(aLinks) Then
'        For i = 1 To UBound(aLinks)
'            wbInvoice.BreakLink aLinks(i), xlLinkTypeExcelLinks
'        Next
'    End If

    With wbInvoice.Worksheets("PROVISIONS")
        .Activate    ' Δεν ξέρω αν η επόμενη γραμμή προϋποθέτει την ενεργοποίηση του φύλλου
        '**** Bold Italic Keywords
        Application.Run "PERSONAL.XLSB!Bold_Italic_Keywords.Bold_Italic_Keywords"
        .Activate    ' Δεν ξέρω αν η προηγούμενη γραμμή απενεργοποιεί το φύλλο
        
        ' *****  Set Print Area
        .PageSetup.PrintArea = Range("A1:G" & Evaluate("=MAX((2:600<>"""")*ROW(2:600))")).Address
        .Copy
    End With
    
    ' ***** SaveAs...
    ActiveWorkbook.SaveAs Filename:="D:\Documents\AAA PDF Files" _
                                    & "\" & Range("B9").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
                                    
    ' ***** Quit Application
    For Each wb In Application.Workbooks
        wb.Saved = True
    Next
    Application.Quit
End Sub

Καλή συνέχεια!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 03-10-12 στις 13:55.
Απάντηση με παράθεση