saibon Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 παιδιά με τον πιο κάτω κώδικα έχω βρίσκω την ονομασία του sheet Dim mySheet As Worksheet For Each mySheet In Worksheets MsgBox mySheet.name Next mySheet πως την ονομασία του sheet μπορώ να την χρησιμοποιήσω σε μια εντολή όπως πιο κάτω? If (Worksheets("mysheet.name").Cells(i, 16) < 12) Then..... αν στην παρένθεση χρησιμοποιήσω το ("mysheet.name") μου βγάζει συνέχεια μηνύματα λάθους
achnoula Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 παιδιά με τον πιο κάτω κώδικα έχω βρίσκω την ονομασία του sheetDim mySheet As Worksheet For Each mySheet In Worksheets MsgBox mySheet.name Next mySheet πως την ονομασία του sheet μπορώ να την χρησιμοποιήσω σε μια εντολή όπως πιο κάτω? If (Worksheets("mysheet.name").Cells(i, 16) < 12) Then..... αν στην παρένθεση χρησιμοποιήσω το ("mysheet.name") μου βγάζει συνέχεια μηνύματα λάθους Βγάλε τα εισαγωγικά μέσα από την παρένθεση και είσαι εντάξει.Τώρα ψάχνει να βρεί ένα φύλλο με όνομα mysheet.name, δεν το βρίσκει και σου χτυπάει.
NOTIOS1981 Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Δοκίμασε Αυτο Μες τα Quotes μπαινει κείμενο όχι variable αν θες variable την ορίζεις ως String και την βάζεις χωρίς Quotes. Dim Arr() As String Public Sub Example() With ActiveWorkbook ReDim Arr(1 To Worksheets.Count) Dim i As Integer i = 0 For Each mySheet In Worksheets i = i + 1 Arr(i) = mySheet.Name MsgBox Arr(i) Next mySheet Worksheets(Arr(1)).Cells(1, 1).Value = "0" End With End Sub
saibon Δημοσ. 15 Ιουλίου 2009 Μέλος Δημοσ. 15 Ιουλίου 2009 ευχαριστώ παιδιά πάρα πολύ ---------- Το μήνυμα προστέθηκε στις 10:58 ---------- Private Sub CommandButton1_Click() Dim mySheet As Worksheet For Each mySheet In Worksheets MsgBox mySheet.name Next mySheet i = 0 For i = 7 To 200 '<12 If (Worksheets(mySheet.name).Cells(i, 16) < 12) Or (Worksheets(mySheet.name).Cells(i, 16) = 12) Then Worksheets(mysheet.name).Cells(i, 17) = Worksheets(mysheet.name).Cells(i, 16) * 5 μου βγάζει μήνυμα Runtime error 91 αν ξέρει κάποιος?
achnoula Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Dim mySheet As Worksheet For Each mySheet In Worksheets For i = 7 To 200 If (Worksheets(mySheet.Name).Cells(i, 16) < 12) Or (Worksheets(mySheet.Name).Cells(i, 16) = 12) Then Worksheets(mySheet.Name).Cells(i, 17) = Worksheets(mySheet.Name).Cells(i, 16) * 5 End If Next i Next mySheet έτσι είναι σωστό
saibon Δημοσ. 15 Ιουλίου 2009 Μέλος Δημοσ. 15 Ιουλίου 2009 Dim mySheet As Worksheet For Each mySheet In Worksheets For i = 7 To 200 If (Worksheets(mySheet.Name).Cells(i, 16) < 12) Or (Worksheets(mySheet.Name).Cells(i, 16) = 12) Then Worksheets(mySheet.Name).Cells(i, 17) = Worksheets(mySheet.Name).Cells(i, 16) * 5 End If Next i Next mySheet έτσι είναι σωστό πάλι μου βγάζει το ίδιο λάθος να επισημάνω ότι το τρέχω στο excel αυτό μέσα σε μακροεντολή μήπως γι' αυτό δεν το αναγνωρίζει? και τον κώδικα που μου έχεις γράψει όταν τον βάζω σε μακρο μου βαράει το ίδιο λάθος
NOTIOS1981 Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Βάλε Worksheets(mySheet.Name).Cells(i,16).Value = 12 Ετσι όπως το κάνεις. το κάνεις για όλα τα Worksheets. Αν το κάνεις όπως λέω πιο πάνω τότε διαλέγεις εσύ ποιο Worksheet Θες.
achnoula Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Σε Excel 2003 το δοκίμασα και δουλεύει χωρίς πρόβλημα. Δκίμασε να βάλεις το .value στο τέλος όπως προτείνει ο NOTIOS1981 μήπως και σου λύση το πρόβλημα.
saibon Δημοσ. 15 Ιουλίου 2009 Μέλος Δημοσ. 15 Ιουλίου 2009 Βάλε .Cells(x,y).Value = z δεν το κατάλαβα αυτό να πω ότι εγώ θέλω να περνάω την ονομασία του Sheet στον πιο κάτω εντολή If (Worksheets(mySheet.Name).Cells(i, 16) < 12) το mySheet.name το δηλώνω όπως πιο κάτω Dim mySheet As Worksheet όταν το τρέχω μου βγάζει run time error 91 object variable or with block variable
achnoula Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 μπορείς να γράψεις με 2 λόγια τι θέλεις να κάνεις για βοηθήσουμε καλύτερα;
saibon Δημοσ. 15 Ιουλίου 2009 Μέλος Δημοσ. 15 Ιουλίου 2009 δεν το κατάλαβα αυτό να πω ότι εγώ θέλω να περνάω την ονομασία του Sheet στον πιο κάτω εντολή If (Worksheets(mySheet.Name).Cells(i, 16) < 12) το mySheet.name το δηλώνω όπως πιο κάτω Dim mySheet As Worksheet όταν το τρέχω μου βγάζει run time error 91 object variable or with block variable μπορείτε να τρέξετε τον δικό μου κώδικα στο δικό σας? σας παρακαλώ γιατί δεν ξέρω τι φταίει αν εσάς το τρέχει σωστά τι να πω είναι ο πιο κάτω Private Sub CommandButton1_Click() Dim mySheet As Worksheet Dim z As Integer For Each mySheet In Worksheets MsgBox mySheet.name Next mySheet i = 0 For i = 7 To 200 '<12 If (Worksheets(mySheet.name).Cells(i, 16) < 12) Or (Worksheets(mySheet.name).Cells(i, 16) = 12) Then Worksheets(mySheet.name).Cells(i, 17) = Worksheets(mySheet.name).Cells(i, 16) * 5 '>12<24 ElseIf (Worksheets(mySheet.name).Cells(i, 16) > 12) And (Worksheets(mySheet.name).Cells(i, 16) < 24) Or (Worksheets(mySheet.name).Cells(i, 16) = 24) Then Worksheets(mySheet.name).Cells(i, 17) = ((Worksheets(mySheet.name).Cells(i, 16) - 12) * 8) + 60 '>24<36 ElseIf (Worksheets(mySheet.name).Cells(i, 16) > 24) And (Worksheets(mySheet.name).Cells(i, 16) < 36) Or (Worksheets(mySheet.name).Cells(i, 16) = 36) Then Worksheets(mySheet.name).Cells(i, 17) = ((ActiveSheet.Cells(i, 16) - 24) * 9) + 60 + 96 ElseIf (Worksheets(mySheet.name).Cells(i, 16) > 36) And (Worksheets(mySheet.name).Cells(i, 16) < 48) Or (Worksheets(mySheet.name).Cells(i, 16) = 48) Then Worksheets(mySheet.name).Cells(i, 17) = ((ActiveSheet.Cells(i, 16) - 36) * 8) + 60 + 96 + 108 ElseIf (Worksheets(mySheet.name).Cells(i, 16) > 48) And (Worksheets(mySheet.name).Cells(i, 16) < 60) Or Worksheets(mySheet.name).Cells(i, 16) = 60 Then Worksheets(mySheet.name).Cells(i, 17) = ((Worksheets(mySheet.name).Cells(i, 16) - 48) * 5) + 60 + 96 + 108 + 96 End If Next For i = 7 To 200 'MsgBox (Worksheets("Äåßãìá").Cells(i, 16)) 'Sheets("ÐÅ Äåßãìá").Select '<12 If (Worksheets(mySheet.name).Cells(i, 18) < 12) Or (Worksheets(mySheet.name).Cells(i, 18) = 12) Then Worksheets(mySheet.name).Cells(i, 19) = (Worksheets(mySheet.name).Cells(i, 18) * 5) / 2 '>12<24 ElseIf (Worksheets(mySheet.name).Cells(i, 18) > 12) And (Worksheets(mySheet.name).Cells(i, 18) < 24) Or (Worksheets(mySheet.name).Cells(i, 18) = 24) Then Worksheets(mySheet.name).Cells(i, 19) = (((Worksheets(mySheet.name).Cells(i, 18) - 12) * 8) + 60) / 2 '>24<36 ElseIf (Worksheets(mySheet.name).Cells(i, 18) > 24) And (Worksheets(mySheet.name).Cells(i, 18) < 36) Or (Worksheets(mySheet.name).Cells(i, 18) = 36) Then Worksheets(mySheet.name).Cells(i, 19) = (((Worksheets(mySheet.name).Cells(i, 18) - 24) * 9) + 60 + 96) / 2 ElseIf (Worksheets(mySheet.name).Cells(i, 18) > 36) And (Worksheets(mySheet.name).Cells(i, 18) < 48) Or (Worksheets(mySheet.name).Cells(i, 18) = 48) Then Worksheets(mySheet.name).Cells(i, 19) = (((Worksheets(mySheet.name).Cells(i, 18) - 36) * 8) + 60 + 96 + 108) / 2 ElseIf (Worksheets(mySheet.name).Cells(i, 18) > 48) And (Worksheets(mySheet.name).Cells(i, 18) < 60) Or Worksheets(mySheet.name).Cells(i, 18) = 60 Then Worksheets(mySheet.name).Cells(i, 19) = (((Worksheets(mySheet.name).Cells(i, 18) - 48) * 5) + 60 + 96 + 108 + 96) / 2 End If Next End Sub
NOTIOS1981 Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 δεν το κατάλαβα αυτό να πω ότι εγώ θέλω να περνάω την ονομασία του Sheet στον πιο κάτω εντολή If (Worksheets(mySheet.Name).Cells(i, 16) < 12) το mySheet.name το δηλώνω όπως πιο κάτω Dim mySheet As Worksheet όταν το τρέχω μου βγάζει run time error 91 object variable or with block variable If (Worksheets(mySheet.Name).Cells(i, 16).Value < 12)
saibon Δημοσ. 15 Ιουλίου 2009 Μέλος Δημοσ. 15 Ιουλίου 2009 Στην ουσία αυτό που θέλω να κάνει είναι να διαβάζει το όνομα του sheet που μπορεί κάθε φορά να είναι διαφορετικό. στο συγκεκριμένο sheet θα περνάει από την αρχή της γραμμής που βρίσκεται στη θέση (ι,18) και σύμφωνα με τους ελέγχους που θα κάνει θα βγάζει το αποτέλεσμα στην (ι,19) γραμμή ---------- Το μήνυμα προστέθηκε στις 12:04 ---------- αααα τώρα κατάλαβα για να δοκιμάσω και αυτό παιδιά σόρρυ σας έχω πρίξει αλλά έχω να κάνω τέτοια εδώ και 4 χρόνια και δεν θυμάμαι τίποτα
achnoula Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Δοκίμασα τον κώδικά σου σε excel 2003 και το μόνο που πρέπει να κάνεις είναι να πάρεις την Next mySheet από την θέση της και να την βάλεις στο τέλος μετά την next. Έτσι λύνεις το πρόβλημα με το error 91 End If Next Next mySheet End Sub
NOTIOS1981 Δημοσ. 15 Ιουλίου 2009 Δημοσ. 15 Ιουλίου 2009 Το Προβλημα είναι ότι χρησιμοποιείς την mySheet.name Εκτός Της For Κάνε Αυτό Dim Arr() As String Public Sub Example() With ActiveWorkbook ReDim Arr(1 To Worksheets.Count) Dim i As Integer i = 0 For Each mySheet In Worksheets i = i + 1 Arr(i) = mySheet.Name MsgBox Arr(i) Next mySheet και χρησιμοποίησε την Arr ΠΧ If (Worksheets(Arr(1)).Cells(i, 16).Value < 12) Or (Worksheets(Arr(1)).Cells(i, 16).Value = 12) Για το Πρώτο Worksheet Μπορεις Και να βάλεις το Next mySheet Prin την End Sub Γενικά πάντως προτιμώ την χρήση Variables για να έχω πιο δομημένο και επαναχρημοποιήσιμο κώδικα γλυτώνοντας και τέτοιυ είδους προβλήματα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.