Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Πρόβλημα με μεγάλο κώδικα...!!!!
Χαιρετώ την μεγάλη παρέα του φόρουμ, Το πρόβλημα που αναρτώ σήμερα πιστεύω πως σε κάποια φάση θα απασχόλησε ή ίσως ακόμη και να απασχολεί αρκετούς φίλους του φόρουμ που ασχολούνται ή έστω σε κάποια φάση μπορεί να ασχοληθούν με την δημιουργία μεγάλων βάσεων όπως και στην δικιά μου περίπτωση. Λοιπόν, Στην βάση που ασχολούμαι τα τελευταία 2 τουλάχιστον χρόνια και αφορά ένα κεφάλαιο ιατρικής και υγείας ατόμων, δυστυχώς πρέπει να επεξεργάζομαι πάρα πολλά δεδομένα καθώς επίσης και αρκετούς πίνακες απο τον Π.Ο.Υ (Παγκόσμιο Οργανισμό Υγείας). Έτσι λοιπόν δυστυχώς έχω αρκετό κώδικα Vba στην βάση μου και μάλιστα σε αρκετές περιπτώσεις είναι και πολύ μακροσκελείς...! Εξαιτίας όμως ελλειπων γνωσεων ίσως (και μάλλον κάπως έτσι θα έχουν τα πράγματα) ο μεγάλος κώδικας μπορεί να ωφείλεται εξαιτίας ακριβώς των ελλειπών γνώσεων μου σε Vba ενώ εάν αυτό θα το διαχειριζόταν ίσως κάποιος άλλος πιο έμπειρος απο εμένα ......ίσως και ο κώδικας να ήταν μάλλον και ο μισός..!! Θα εκτιμήσω εάν κάποιος έμπειρος φίλος κοιτάξει το πιο κάτω παράδειγμα ενός απο αυτούς τους μεγάλους κώδικες που ανάφερα πιο πρίν, και να μου παραθέσει την γνώμη ή έστω την ιδέα του εάν και κατά πόσο θα μπορούσα να τον γράψω αλιώς έτσι ώστε να είναι αφενός μεν και πιο μικρός αλλά ίσως και πιο λειτουργικός..!! Private Sub cboUnit_AfterUpdate() 'Calcium If Me.ctr1 = 1 Then Me.T1 = Me.Calcium Me.T1.Requery Else If Me.ctr1 = 2 Then Me.T1 = Me.Calcium * 1000 Me.T1.Requery Else If Me.ctr1 = 3 Then Me.T1 = Me.Calcium / 1000 Me.T1.Requery Else If Me.ctr1 = 10 Then Me.T1 = Me.Calcium / 1000 Me.T1.Requery Else If Me.ctr1 = 20 Then Me.T1 = Me.Calcium Me.T1.Requery Else If Me.ctr1 = 30 Then Me.T1 = Me.Calcium / 1000000 Me.T1.Requery Else If Me.ctr1 = 100 Then Me.T1 = Me.Calcium * 1000 Me.T1.Requery Else If Me.ctr1 = 200 Then Me.T1 = Me.Calcium * 1000000 Me.T1.Requery Else If Me.ctr1 = 300 Then Me.T1 = Me.Calcium Me.T1.Requery End If End If End If End If End If End If End If End If End If '................................................. .... 'Chromium If Me.ctr2 = 1 Then Me.T2 = Me.Chromium Me.T2.Requery Else If Me.ctr2 = 2 Then Me.T2 = Me.Chromium * 1000 Me.T2.Requery Else If Me.ctr2 = 3 Then Me.T2 = Me.Chromium / 1000 Me.T2.Requery Else If Me.ctr2 = 10 Then Me.T2 = Me.Chromium / 1000 Me.T2.Requery Else If Me.ctr2 = 20 Then Me.T2 = Me.Chromium Me.T2.Requery Else If Me.ctr2 = 30 Then Me.T2 = Me.Chromium / 1000000 Me.T2.Requery Else If Me.ctr2 = 100 Then Me.T2 = Me.Chromium * 1000 Me.T2.Requery Else If Me.ctr2 = 200 Then Me.T2 = Me.Chromium * 1000000 Me.T2.Requery Else If Me.ctr2 = 300 Then Me.T2 = Me.Chromium Me.T2.Requery End If End If End If End If End If End If End If End If End If '................................................. ..... 'Copper If Me.ctr3 = 1 Then Me.T3 = Me.Copper Me.T3.Requery Else If Me.ctr3 = 2 Then Me.T3 = Me.Copper * 1000 Me.T3.Requery Else If Me.ctr3 = 3 Then Me.T3 = Me.Copper / 1000 Me.T3.Requery Else If Me.ctr3 = 10 Then Me.T3 = Me.Copper / 1000 Me.T3.Requery Else If Me.ctr3 = 20 Then Me.T3 = Me.Copper Me.T3.Requery Else If Me.ctr3 = 30 Then Me.T3 = Me.Copper / 1000000 Me.T3.Requery Else If Me.ctr3 = 100 Then Me.T3 = Me.Copper * 1000 Me.T3.Requery Else If Me.ctr3 = 200 Then Me.T3 = Me.Copper * 1000000 Me.T3.Requery Else If Me.ctr3 = 300 Then Me.T3 = Me.Copper Me.T3.Requery End If End If End If End If End If End If End If End If End If '................................................. ...... 'Fluoride If Me.ctr4 = 1 Then Me.T4 = Me.Fluoride Me.T4.Requery Else If Me.ctr4 = 2 Then Me.T4 = Me.Fluoride * 1000 Me.T4.Requery Else If Me.ctr4 = 3 Then Me.T4 = Me.Fluoride / 1000 Me.T4.Requery Else If Me.ctr4 = 10 Then Me.T4 = Me.Fluoride / 1000 Me.T4.Requery Else If Me.ctr4 = 20 Then Me.T4 = Me.Fluoride Me.T4.Requery Else If Me.ctr4 = 30 Then Me.T4 = Me.Fluoride / 1000000 Me.T4.Requery Else If Me.ctr4 = 100 Then Me.T4 = Me.Fluoride * 1000 Me.T4.Requery Else If Me.ctr4 = 200 Then Me.T4 = Me.Fluoride * 1000000 Me.T4.Requery Else If Me.ctr4 = 300 Then Me.T4 = Me.Fluoride Me.T4.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Iodine If Me.ctr5 = 1 Then Me.T4 = Me.Iodine Me.T4.Requery Else If Me.ctr5 = 2 Then Me.T5 = Me.Iodine * 1000 Me.T5.Requery Else If Me.ctr5 = 3 Then Me.T5 = Me.Iodine / 1000 Me.T5.Requery Else If Me.ctr5 = 10 Then Me.T5 = Me.Iodine / 1000 Me.T5.Requery Else If Me.ctr5 = 20 Then Me.T5 = Me.Iodine Me.T5.Requery Else If Me.ctr5 = 30 Then Me.T5 = Me.Iodine / 1000000 Me.T5.Requery Else If Me.ctr5 = 100 Then Me.T5 = Me.Iodine * 1000 Me.T5.Requery Else If Me.ctr5 = 200 Then Me.T5 = Me.Iodine * 1000000 Me.T5.Requery Else If Me.ctr5 = 300 Then Me.T5 = Me.Iodine Me.T5.Requery End If End If End If End If End If End If End If End If End If '................................................. ......... 'Iron If Me.ctr6 = 1 Then Me.T6 = Me.Iron Me.T6.Requery Else If Me.ctr6 = 2 Then Me.T6 = Me.Iron * 1000 Me.T6.Requery Else If Me.ctr6 = 3 Then Me.T6 = Me.Iron / 1000 Me.T6.Requery Else If Me.ctr6 = 10 Then Me.T6 = Me.Iron / 1000 Me.T6.Requery Else If Me.ctr6 = 20 Then Me.T6 = Me.Iron Me.T6.Requery Else If Me.ctr6 = 30 Then Me.T6 = Me.Iron / 1000000 Me.T6.Requery Else If Me.ctr6 = 100 Then Me.T6 = Me.Iron * 1000 Me.T6.Requery Else If Me.ctr6 = 200 Then Me.T6 = Me.Iron * 1000000 Me.T6.Requery Else If Me.ctr6 = 300 Then Me.T6 = Me.Iron Me.T6.Requery End If End If End If End If End If End If End If End If End If '................................................. .............. 'Magnesium If Me.ctr7 = 1 Then Me.T7 = Me.Magnesium Me.T7.Requery Else If Me.ctr7 = 2 Then Me.T7 = Me.Magnesium * 1000 Me.T7.Requery Else If Me.ctr7 = 3 Then Me.T7 = Me.Magnesium / 1000 Me.T7.Requery Else If Me.ctr7 = 10 Then Me.T7 = Me.Magnesium / 1000 Me.T7.Requery Else If Me.ctr7 = 20 Then Me.T7 = Me.Magnesium Me.T7.Requery Else If Me.ctr7 = 30 Then Me.T7 = Me.Magnesium / 1000000 Me.T7.Requery Else If Me.ctr7 = 100 Then Me.T7 = Me.Magnesium * 1000 Me.T7.Requery Else If Me.ctr7 = 200 Then Me.T7 = Me.Magnesium * 1000000 Me.T7.Requery Else If Me.ctr7 = 300 Then Me.T7 = Me.Magnesium Me.T7.Requery End If End If End If End If End If End If End If End If End If '................................................. .............. 'Manganese If Me.ctr8 = 1 Then Me.T8 = Me.Manganese Me.T8.Requery Else If Me.ctr8 = 2 Then Me.T8 = Me.Manganese * 1000 Me.T8.Requery Else If Me.ctr8 = 3 Then Me.T8 = Me.Manganese / 1000 Me.T8.Requery Else If Me.ctr8 = 10 Then Me.T8 = Me.Manganese / 1000 Me.T8.Requery Else If Me.ctr8 = 20 Then Me.T8 = Me.Manganese Me.T8.Requery Else If Me.ctr8 = 30 Then Me.T8 = Me.Manganese / 1000000 Me.T8.Requery Else If Me.ctr8 = 100 Then Me.T8 = Me.Manganese * 1000 Me.T8.Requery Else If Me.ctr8 = 200 Then Me.T8 = Me.Manganese * 1000000 Me.T8.Requery Else If Me.ctr8 = 300 Then Me.T8 = Me.Manganese Me.T8.Requery End If End If End If End If End If End If End If End If End If '................................................. ....... 'Molybdenum If Me.ctr9 = 1 Then Me.T9 = Me.Molybdenum Me.T9.Requery Else If Me.ctr9 = 2 Then Me.T9 = Me.Molybdenum * 1000 Me.T9.Requery Else If Me.ctr9 = 3 Then Me.T9 = Me.Molybdenum / 1000 Me.T9.Requery Else If Me.ctr9 = 10 Then Me.T9 = Me.Molybdenum / 1000 Me.T9.Requery Else If Me.ctr9 = 20 Then Me.T9 = Me.Molybdenum Me.T9.Requery Else If Me.ctr9 = 30 Then Me.T9 = Me.Molybdenum / 1000000 Me.T9.Requery Else If Me.ctr9 = 100 Then Me.T9 = Me.Molybdenum * 1000 Me.T9.Requery Else If Me.ctr9 = 200 Then Me.T9 = Me.Molybdenum * 1000000 Me.T9.Requery Else If Me.ctr9 = 300 Then Me.T9 = Me.Molybdenum Me.T9.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Phosphorus If Me.ctr10 = 1 Then Me.T10 = Me.Phosphorus Me.T10.Requery Else If Me.ctr10 = 2 Then Me.T10 = Me.Phosphorus * 1000 Me.T10.Requery Else If Me.ctr10 = 3 Then Me.T10 = Me.Phosphorus / 1000 Me.T10.Requery Else If Me.ctr10 = 10 Then Me.T10 = Me.Phosphorus / 1000 Me.T10.Requery Else If Me.ctr10 = 20 Then Me.T10 = Me.Phosphorus Me.T10.Requery Else If Me.ctr10 = 30 Then Me.T10 = Me.Phosphorus / 1000000 Me.T10.Requery Else If Me.ctr10 = 100 Then Me.T10 = Me.Phosphorus * 1000 Me.T10.Requery Else If Me.ctr10 = 200 Then Me.T10 = Me.Phosphorus * 1000000 Me.T10.Requery Else If Me.ctr10 = 300 Then Me.T10 = Me.Phosphorus Me.T10.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Selenium If Me.ctr11 = 1 Then Me.T11 = Me.Selenium Me.T11.Requery Else If Me.ctr11 = 2 Then Me.T11 = Me.Selenium * 1000 Me.T11.Requery Else If Me.ctr11 = 3 Then Me.T11 = Me.Selenium / 1000 Me.T11.Requery Else If Me.ctr11 = 10 Then Me.T11 = Me.Selenium / 1000 Me.T11.Requery Else If Me.ctr11 = 20 Then Me.T11 = Me.Selenium Me.T11.Requery Else If Me.ctr11 = 30 Then Me.T11 = Me.Selenium / 1000000 Me.T11.Requery Else If Me.ctr11 = 100 Then Me.T11 = Me.Selenium * 1000 Me.T11.Requery Else If Me.ctr11 = 200 Then Me.T11 = Me.Selenium * 1000000 Me.T11.Requery Else If Me.ctr11 = 300 Then Me.T11 = Me.Selenium Me.T11.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Zinc If Me.ctr12 = 1 Then Me.T12 = Me.Zinc Me.T12.Requery Else If Me.ctr12 = 2 Then Me.T12 = Me.Zinc * 1000 Me.T12.Requery Else If Me.ctr12 = 3 Then Me.T12 = Me.Zinc / 1000 Me.T12.Requery Else If Me.ctr12 = 10 Then Me.T12 = Me.Zinc / 1000 Me.T12.Requery Else If Me.ctr12 = 20 Then Me.T12 = Me.Zinc Me.T12.Requery Else If Me.ctr12 = 30 Then Me.T12 = Me.Zinc / 1000000 Me.T12.Requery Else If Me.ctr12 = 100 Then Me.T12 = Me.Zinc * 1000 Me.T12.Requery Else If Me.ctr12 = 200 Then Me.T12 = Me.Zinc * 1000000 Me.T12.Requery Else If Me.ctr12 = 300 Then Me.T12 = Me.Zinc Me.T12.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Potassium If Me.ctr13 = 1 Then Me.T13 = Me.Potassium Me.T13.Requery Else If Me.ctr13 = 2 Then Me.T13 = Me.Potassium * 1000 Me.T13.Requery Else If Me.ctr13 = 3 Then Me.T13 = Me.Potassium / 1000 Me.T13.Requery Else If Me.ctr13 = 10 Then Me.T13 = Me.Potassium / 1000 Me.T13.Requery Else If Me.ctr13 = 20 Then Me.T13 = Me.Potassium Me.T13.Requery Else If Me.ctr13 = 30 Then Me.T13 = Me.Potassium / 1000000 Me.T13.Requery Else If Me.ctr13 = 100 Then Me.T13 = Me.Potassium * 1000 Me.T13.Requery Else If Me.ctr13 = 200 Then Me.T13 = Me.Potassium * 1000000 Me.T13.Requery Else If Me.ctr13 = 300 Then Me.T13 = Me.Potassium Me.T13.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Sodium If Me.ctr14 = 1 Then Me.T14 = Me.Sodium Me.T14.Requery Else If Me.ctr14 = 2 Then Me.T14 = Me.Sodium * 1000 Me.T14.Requery Else If Me.ctr14 = 3 Then Me.T14 = Me.Sodium / 1000 Me.T14.Requery Else If Me.ctr14 = 10 Then Me.T14 = Me.Sodium / 1000 Me.T14.Requery Else If Me.ctr14 = 20 Then Me.T14 = Me.Sodium Me.T14.Requery Else If Me.ctr14 = 30 Then Me.T14 = Me.Sodium / 1000000 Me.T14.Requery Else If Me.ctr14 = 100 Then Me.T14 = Me.Sodium * 1000 Me.T14.Requery Else If Me.ctr14 = 200 Then Me.T14 = Me.Sodium * 1000000 Me.T14.Requery Else If Me.ctr14 = 300 Then Me.T14 = Me.Sodium Me.T14.Requery End If End If End If End If End If End If End If End If End If '................................................. ........ 'Cloride If Me.ctr15 = 1 Then Me.T15 = Me.Cloride Me.T15.Requery Else If Me.ctr15 = 2 Then Me.T15 = Me.Cloride * 1000 Me.T15.Requery Else If Me.ctr15 = 3 Then Me.T15 = Me.Cloride / 1000 Me.T15.Requery Else If Me.ctr15 = 10 Then Me.T15 = Me.Cloride / 1000 Me.T15.Requery Else If Me.ctr15 = 20 Then Me.T15 = Me.Cloride Me.T15.Requery Else If Me.ctr15 = 30 Then Me.T15 = Me.Cloride / 1000000 Me.T15.Requery Else If Me.ctr15 = 100 Then Me.T15 = Me.Cloride * 1000 Me.T15.Requery Else If Me.ctr15 = 200 Then Me.T15 = Me.Cloride * 1000000 Me.T15.Requery Else If Me.ctr15 = 300 Then Me.T15 = Me.Cloride Me.T15.Requery End If End If End If End If End If End If End If End If End If End Sub |
#2
| ||||
| ||||
Καλησπέρα Γιώργο Επισυνάπτω ένα παράδειγμα για να δεις την υλοποίηση μιας ιδέας που βασίζεται σε χρήση συνάρτησης. Στέλνεις σε αυτή δυο τιμές (ορίσματα) και σε επιστρέφει ένα αποτέλεσμα για να τοποθετηθεί σε κάποιο πλαίσιο κειμένου της φόρμας σου. Πιστεύω ότι δεν θα έχεις δυσκολία για να καταλάβεις την πρότασή μου, ούτε να την προσαρμόσεις σε ό,τι σχεδιάζεις. ...Βέβαια μπορεί να γίνει πιο σύντομη σχεδίαση, αλλά πρέπει να έχεις ευχέρεια σε VBA για να γίνει κατανοητός ο κώδικας και επομένως εύκολα διαχειρίσιμος από εσένα. Έτσι προτίμησα το απλό και το κατανοητό... Τα ξαναλέμε φίλτατε Γιώργη. Νίκος |
#3
| |||
| |||
Νίκο καλημέρα, Σε ευχαριστώ για την πρόταση σου. Είναι μια καλή ιδέα ώς προς την επίτευξη του ζητούμενου, ωστόσο μελετώντας όλα τα δεδομένα κατέληξα σε μια πιο απλή ιδέα....τυπου συνάρτησης "μακαρόνι" η οποία είναι και λειοτυργική αλλά μπορώ να πώ και πιο γρήγορη. Σε ευχαριστώ πάντως φίλε μου, και το εκτιμώ. Μου έδωσες "τροφή" για μελέτη. Νάσαι καλά. Υ.Γ: η συνάρτηση "μακαρόνι" που έλυσε το πρόβλημα =Switch([ctr13]=1;[Potassium];[ctr13]=2;[Potassium]*1000;[ctr13]=3;[Potassium]/1000;[ctr13]=10;[Potassium]/1000;[ctr13]=20;[Potassium];[ctr13]=30;[Potassium]/1000000;[ctr13]=100;[Potassium]*1000;[ctr13]=200;[Potassium]*1000000;[ctr13]=300;[Potassium]) |
#4
| ||||
| ||||
Σωστός ! Καταπληκτική λύση. Με άρεσε... Με εκτίμηση / Νίκος |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[VBA] Πρόβλημα σε κώδικα | xristos | Excel - Ερωτήσεις / Απαντήσεις | 5 | 16-03-16 18:43 |
Πρόβλημα σε κώδικα vba | ΑΛΕΞΙΑ | Access - Ερωτήσεις / Απαντήσεις | 1 | 12-10-15 17:05 |
Πρόβλημα με κώδικα σε πεδίο | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 10 | 24-04-15 20:15 |
Πρόβλημα με κώδικα VBA | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 17 | 08-10-14 17:04 |
Πρόβλημα σε κώδικα | jimrenoir | Access - Ερωτήσεις / Απαντήσεις | 2 | 10-05-11 15:50 |
Η ώρα είναι 15:21.