militarist Δημοσ. 23 Ιουνίου 2016 Δημοσ. 23 Ιουνίου 2016 (επεξεργασμένο) Μπορεί να είναι χαζό αθτό που θα ρωτήσω... ¨Με το παρακάτω VBA λέω ότι ψάξε το έγραφο που περιέχει SAI TRACKER πχ στο όνομα και βάλτο το document (Vetting General) στο πεδίο (richTextInput_4). Αλλά το κάνω αυτό πολλές φορές (15 διαφορετικά ονόματα). Η ερώτηση μου είναι πώς εσςις θα το κάνατε ώστε ο κώδικας να είναι μικρότερος? Public file As String Public filePath As String Public strfile As String Sub procedure() filePath = "C:\Users\Desktop\attachments\" strfile = Dir(filePath) Do While strfile <> "" Debug.Print strfile If InStr(UCase(strfile), "SAI TRACKER") > 0 Then Call AttachFile("Vetting General", "richTextInput_4", filePath & strfile) ElseIf InStr(UCase(strfile), "ADDITIONAL DOCUMENTATION") > 0 Then Call AttachFile("Vetting General", "richTextInput_5", filePath & strfile) ElseIf InStr(UCase(strfile), "PPS APPLICATION") > 0 Then Call AttachFile("Vetting General", "richTextInput_6", filePath & strfile) ElseIf InStr(UCase(strfile), "C2S2 CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_7", filePath & strfile) ElseIf InStr(UCase(strfile), "DPL CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_8", filePath & strfile) ElseIf InStr(UCase(strfile), "COMP-I CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_9", filePath & strfile) ElseIf InStr(UCase(strfile), "TRACE CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_10", filePath & strfile) ElseIf InStr(UCase(strfile), "RDC CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_11", filePath & strfile) ElseIf InStr(UCase(strfile), "T&R CHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_12", filePath & strfile) ElseIf InStr(UCase(strfile), "EXTERNAL COMMUNICATION") > 0 Then Call AttachFile("Vetting General", "richTextInput_13", filePath & strfile) ElseIf InStr(UCase(strfile), "INTERNAL COMMUNICATION") > 0 Then Call AttachFile("Vetting General", "richTextInput_14", filePath & strfile) ElseIf InStr(UCase(strfile), "VETTING CheHECK") > 0 Then Call AttachFile("Vetting General", "richTextInput_15", filePath & strfile) ElseIf InStr(UCase(strfile), "SAI UPDATE") > 0 Then Call AttachFile("Vetting General", "richTextInput_16", filePath & strfile) ElseIf InStr(UCase(strfile), "APPROVAL - BRAND/CHANNEL") > 0 Then Call AttachFile("Vetting General", "richTextInput_17", filePath & strfile) ElseIf InStr(UCase(strfile1), "Agreement") > 0 Then Call AttachFile("Vetting General", "richTextInput_19", filePath & strfile) End If strfile = Dir Loop Επεξ/σία 23 Ιουνίου 2016 από militarist
ktf Δημοσ. 23 Ιουνίου 2016 Δημοσ. 23 Ιουνίου 2016 Δεν γνωρίζω από VBA συγκεκριμένα αλλά ψάξε να δεις πως γίνεται στην γλώσσα σου ένα switch statement για να γλιτώσεις τα πολλά if/elseif
defacer Δημοσ. 23 Ιουνίου 2016 Δημοσ. 23 Ιουνίου 2016 Ουσιαστικά δεν έχει διαφορά το switch με τα else, και δεν πρόκειται να βοηθήσει εδώ. Αυτό που πρέπει να κάνεις είναι κάποιου είδους dictionary/map (δεν έχω ιδέα από VBA) που αντιστοιχίζει string σε string. Θα αντιστοιχίσεις "SAI TRACKER" => "richTextInput_4" "ADDITIONAL DOCUMENTATION" => "richTextInput_5" κλπ, τα οποία είναι τα μόνα τμήματα που αλλάζουν στον κώδικά σου. Στη συνέχεια με ένα απλό foreach των 2-3 γραμμών ή ό,τι ανάλογο έχει η VBA πάνω στο dictionary θα μπορέσεις να αντικαταστήσεις όλο αυτό που πόσταρες. Γενικά η ιδέα σ' αυτές τις περιπτώσεις είναι πάντα η ίδια: βλέπεις ποιά είναι τα μέρη του κώδικα που μεταβάλλονται, τα βάζεις σε κάποιο κατάλληλο structure, και το υπόλοιπο που μένει σταθερό μπαίνει σε loop πάνω στο structure.
militarist Δημοσ. 23 Ιουνίου 2016 Μέλος Δημοσ. 23 Ιουνίου 2016 Σασς ευχαριστ'ω όλους για τις απαντίσεις .
visualizer Δημοσ. 23 Ιουνίου 2016 Δημοσ. 23 Ιουνίου 2016 Φτιάχνεις μια κλάση που θα έχει δύο μεταβλητές , 2 μεθόδους που θα σετάρουν αυτές τις μεταβλητές και 2 μεθόδους που θα επιστρέφουν τις μεταβλητές . πχ Dim myclass as new DataClass myclass.setValueA("SAI TRACKER") myclass.setValueB("richTextInput_4") κάνεις το ίδιο για όλες τις τιμές .. Μετά Δημιουργείς ένα collection και βάζεις όλα τα αντικείμενα και μετα μια for each και καλώντας τις μεθόδους που επιστρέφουν αυτές τις τιμές κάνεις την δουλειά σου . 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα