Προς το περιεχόμενο

vba χρήση συγκεκριμένου ονόματος Worksheet


saibon

Προτεινόμενες αναρτήσεις

Δημοσ.

παιδιά με τον πιο κάτω κώδικα έχω βρίσκω την ονομασία του 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") μου βγάζει συνέχεια μηνύματα λάθους

Δημοσ.
παιδιά με τον πιο κάτω κώδικα έχω βρίσκω την ονομασία του 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") μου βγάζει συνέχεια μηνύματα λάθους

 

Βγάλε τα εισαγωγικά μέσα από την παρένθεση και είσαι εντάξει.Τώρα ψάχνει να βρεί ένα φύλλο με όνομα mysheet.name, δεν το βρίσκει και σου χτυπάει.

Δημοσ.

Δοκίμασε Αυτο

Μες τα 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

Δημοσ.

ευχαριστώ παιδιά πάρα πολύ

 

---------- Το μήνυμα προστέθηκε στις 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

 

αν ξέρει κάποιος?

Δημοσ.

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

 

έτσι είναι σωστό

Δημοσ.
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 αυτό μέσα σε μακροεντολή μήπως γι' αυτό δεν το αναγνωρίζει?

και τον κώδικα που μου έχεις γράψει όταν τον βάζω σε μακρο μου βαράει το ίδιο λάθος

Δημοσ.

Βάλε Worksheets(mySheet.Name).Cells(i,16).Value = 12

Ετσι όπως το κάνεις. το κάνεις για όλα τα Worksheets. Αν το κάνεις όπως λέω πιο πάνω τότε διαλέγεις εσύ ποιο Worksheet Θες.

Δημοσ.

Σε Excel 2003 το δοκίμασα και δουλεύει χωρίς πρόβλημα. Δκίμασε να βάλεις το .value στο τέλος όπως προτείνει ο NOTIOS1981 μήπως και σου λύση το πρόβλημα.

Δημοσ.
Βάλε .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

Δημοσ.
δεν το κατάλαβα αυτό

 

να πω ότι εγώ θέλω να περνάω την ονομασία του 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

Δημοσ.
δεν το κατάλαβα αυτό

 

να πω ότι εγώ θέλω να περνάω την ονομασία του 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)

Δημοσ.

Στην ουσία αυτό που θέλω να κάνει είναι να διαβάζει το όνομα του sheet που μπορεί κάθε φορά να είναι διαφορετικό.

 

στο συγκεκριμένο sheet θα περνάει από την αρχή της γραμμής που βρίσκεται στη θέση (ι,18) και σύμφωνα με τους ελέγχους που θα κάνει θα βγάζει το αποτέλεσμα στην (ι,19) γραμμή

 

---------- Το μήνυμα προστέθηκε στις 12:04 ----------

 

αααα τώρα κατάλαβα για να δοκιμάσω και αυτό

 

παιδιά σόρρυ σας έχω πρίξει αλλά έχω να κάνω τέτοια εδώ και 4 χρόνια και δεν θυμάμαι τίποτα

Δημοσ.

Δοκίμασα τον κώδικά σου σε excel 2003 και το μόνο που πρέπει να κάνεις είναι να πάρεις την Next mySheet από την θέση της και να την βάλεις στο τέλος μετά την next. Έτσι λύνεις το πρόβλημα με το error 91

 

End If

Next

Next mySheet

End Sub

Δημοσ.

Το Προβλημα είναι ότι χρησιμοποιείς την 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 για να έχω πιο δομημένο και επαναχρημοποιήσιμο κώδικα γλυτώνοντας και τέτοιυ είδους προβλήματα

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...