Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Αντιγραφή & Επικόλληση (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1056-antigrafi-epikollisi.html)

Flashgordon61 31-03-11 21:44

Αντιγραφή & Επικόλληση
 
Καλησπέρα σε όλους

Έχω ένα αρχείο Excel απο το οποίο αντιγράφω δεδομένα και τα επικολλώ σε ένα άλλο αρχείο που είναι αποθηκευμένο σε ένα άλλο δίσκο (S).
Αυτοματοποίησα την διαδικασία γράφοντας τον παρακάτω κώδικα:
Κώδικας:

Sub Insert()
Rows("8:8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
ChDir "S:\test"
    Workbooks.Open Filename:= _
        "S:\test\test1.xls"
    Windows("test1.xls").Activate
Dim FirstBlankCell As Range
Set FirstBlankCell = Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
FirstBlankCell.Activate
ActiveSheet.Paste
FirstBlankCell.Select
ThisWorkbook.Activate
ActiveWorkbook.Save
Windows("test1.xls").Activate
ActiveWorkbook.Save
Application.Quit
End Sub

Ο κώδικας λειτουργεί καλά εκτός από 2 περιπτώσεις.
1) Όταν το αρχείο ("test1.xls") είναι ανοικτό μου βγάζει
Run-time error '1004':
Paste method of Worksheet class failed
2) Όταν δεν έχω πρόσβαση στον δίσκο (S) (Δίσκος Δικτύου) μου βγάζει
Run-time error '76':
Path not found
Το ζητούμενο είναι η σύνταξη του κώδικα έτσι ώστε στην πρώτη περίπτωση να έχουμε
ένα MsgBox που να λέει (Κλείστε το αρχείο "test1.xls")
και στη δεύτερη να λέει (είστε εκτός δικτύου)

Ευχαριστώ εκ των προτέρων

Γιώργος

gr8styl 31-03-11 23:58

Φίλε Γιώργο,
δες τα παραδείγματα σε αυτό το άρθρο (How to Use "On Error" to Handle Errors in a Macro) στη Knowledge Base της Microsoft.
Νομίζω ότι το 2o παράδειγμα που περιέχεται στο άρθρο είναι πανομοιότυπο με αυτό που ζητάς.

Θανάσης.

Flashgordon61 01-04-11 18:40

Θανάση ευχαριστώ
Προσάρμοσα τον κώδικα στα μέτρα μου και όλα καλά.
Και πάλι ευχαριστώ.

Γιώργος

gr8styl 01-04-11 19:12

Φίλε Γιώργο,
πολύ χαίρομαι για την ελάχιστη βοήθεια που έδωσα, αλλά χαίρομαι πολύ περισσότερο γιατί διέκρινα στα λόγια σου την ικανοποίηση του "Τα κατάφερα μόνος μου"

Μπράβο σου!!!

Ευχαριστώ με την σειρά μου για την ανταπόκρισή σου.
Τα λέμε
Θανάσης

Tasos 01-04-11 21:59

Καλησπέρα κι από μένα!
Γιώργο, επίτρεψε μου να σου πω και εγώ ένα μπράβο για την προσπάθεια σου!
Εκτός από το Error trapping, θα πρέπει στον προγραμματισμό με VBA να αναφερόμαστε απευθείας στα αντικείμενα
της Excel χωρίς Select, Selection, ActiveCell, Activate γιατί εκτός τη κατά πολύ μειωμένη ταχύτητα εκτέλεσης που προσφέρουν,
προκαλούν την συνεχή ανανέωση της οθόνης και το κυριότερο: προκαλούν λάθη!

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

Κώδικας:

Option Explicit

Sub Insert()
    Dim strFile As String, wb As Workbook, wks As Worksheet, rng As Range
    strFile = "C:\test 1\test1.xls"
    With Application
        .ScreenUpdating = False
        .ShowWindowsInTaskbar = False

        If Dir(strFile, vbDirectory) <> vbNullString Then
            Set rng = Rows("8:8")
            Set wb = Workbooks.Open(Filename:=strFile, IgnoreReadOnlyRecommended:=True)
            Set wks = wb.Worksheets("Sheet3")
            rng.Copy
            wks.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteAll
            wb.Save
            wb.Close False
            .ScreenUpdating = True
            .ShowWindowsInTaskbar = True

            'ThisWorkbook.Save
          '.Quit
        End If
    End With
End Sub

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

Τάσος

Flashgordon61 04-04-11 22:23

Καλησπέρα
Φίλε Θανάση σ’ ευχαριστώ για την φιλοφρόνηση.
Φίλε Τάσο σ’ ευχαριστώ πάρα πολύ για τις υποδείξεις .
Είναι για μένα μάθημα.
Από την πρώτη στιγμή που έγινα μέλος του Forum κατάλαβα ότι ο Διαχειριστής και κάποια άλλα μέλη λειτουργούν σαν δάσκαλοι.
Κάποιος μου είπε ότι αν δώσεις σε κάποιον ένα ψάρι θα ικανοποιήσει την πείνα του για 1 μέρα , αν τον μάθεις να ψαρεύει δεν θα πεινάσει ποτέ.
Έτσι λοιπόν μας μαθαίνεται να ψαρεύουμε.

Και πάλι σας ευχαριστώ.

Γιώργος :thanks:


Η ώρα είναι 01:07.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2