Salva nome foglio



  • Salva nome foglio
    di angy (utente non iscritto) data: 07/06/2014 11:08:01

    Buongiorno forum. Avrei bisogno di un aiuto.
    Con il codice sotto riportato, mi scrive il nome del foglio creato "X" nel foglio "Dati" nella cella F6.
    Sheets("Dati").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0) = X
    Fin qui tutto bene.
    Ma se io volessi riportare in un foglio diverso il nome del foglio creato "X" ma in un Range da i6:i30 come posso fare?
    Cioè il nome del foglio "X" deve incominciare a scrivere dalla cella i6, prima cella libera, fino alla i30.
    grazie
    Ps. riporto sotto il codice completo
     
    Dim Messaggio As String, Titolo As String, X As String, _
    ws As Integer, wsc As Integer, wsX As String, wsOri As Worksheet, _
    wsCopia As Worksheet, z As String, zz As String, wss As Integer
    Application.ScreenUpdating = False
    Messaggio = "SCRIVI IL NOME DEL DIPENDENTE !!!"
    Titolo = "CREA UN NUOVO DIPENDENTE !"
    X = InputBox(Messaggio, Titolo)
    X = UCase(X)
    If X = "" Then Exit Sub
    wsc = Sheets.Count
    For ws = 1 To wsc
        Sheets(ws).Activate
        wsX = ActiveSheet.Name
        If wsX = X Then
          z = msgbox("Esiste già il dipendente chiamato " & X & "; Vuoi inserire un nuovo dipendente?!", _
            vbYesNo, "ATTENZIONE")
            If z = vbNo Then
                Exit Sub
                Else
    10
                zz = InputBox("Inserisci nuovo  nome")
                X = UCase(zz)
                If zz = "" Then
                    Exit Sub
                End If
                For wss = 1 To wsc
                    Sheets(wss).Activate
                    wsX = ActiveSheet.Name
                    If wsX = X Then
                        z = msgbox("Esiste già un Dipendente chiamato " & X & "; devi cambiare nome.", _
                        vbCritical, "ATTENZIONE")
                        GoTo 10
                        'RITORNA ALL'INPUTBOX
                    End If
                Next wss
            End If
            Exit For
        End If
    Next ws
    Set wsOri = Sheets("Matrix")
    With wsOri
        .Visible = True
        .Activate
        .Copy before:=Sheets(2)
    End With
    Set wsCopia = Sheets("Matrix (2)")
    With wsCopia
        .Name = X
        .Range("B2").Value = X  ' scrive il nome dipendente nella cella B2 del foglio creato
         Sheets("Dati").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0) = X  ' mi scrive il nome del nuovo dipendente nel foglio Dati colonna F
        msgbox ("Il nuovo Dipendente  " & X & "  è stato aggiunto con Successo!"), vbInformation, ("INFORMAZIONI...")
    End With
    Application.ScreenUpdating = True
    Sheets(X).Move before:=Sheets(Worksheets.Count - 1)



  • di Vecchio Frac data: 07/06/2014 11:38:11

    Non è "il codice completo". Manca la firma: è una Sub o una Function?
    Inoltre... sigh :(
    vedo un'etichetta 10 e più sotto un "GoTo 10"... dovresti rivedere la logica e correggerla, non si scrive più così dai tempi di GWBasic :)

    Per il tuo problema, ragionaci su un attimo.
    La prima cosa che potresti implementare è questo ragionamento:
    - con un ciclo separato scorro dalla cella Range("I6") del nuovo foglio di destinazione
    - appena trovo un cella vuota esco dal ciclo e ci inserisco l'informazione, altrimenti
    - continuo il ciclo
    - tra aprentesi: se una cella vuota non è stata trovata... ?

    Una volta fatto e visto che funziona, puoi velocizzare (ad esempio con range(...).End(xlDown) o qualche trucco simile, magari anche una function LastRow apposita che non sarebbe male).





  • di angy (utente non iscritto) data: 07/06/2014 11:53:23

    Grazie VF è un piacere interagire con te. Sei mancato un bel pò ed il fatto che sei ritornato qui tra noi, mi fa davvero piacere.
    Detto questo, ti dico che non è un mio codice, perchè non sarei in grado di scriverlo visto la mia pochissima conoscenza del VBa. Questo codice l'ho trovato in rete e poi lo modificato un pochino alle mie esigenze.
    Quindi non sarei capace da solo nel migliorare e risolvere il mio problema.
    Questo codice io lo inserisco in un pulsante (sub).



  • di angy (utente non iscritto) data: 07/06/2014 19:12:36

    Riporto qui la soluzione che sono riuscito a fare. Potrebbe venir utile ad altri. Come dice VF tutto è migliorabile.
    Ho risolto così:
    1- Ho inserito nel codice sotto "Sheets(Dati)" questa riga:
    Sheets("info").Range("i30").End(xlUp).Offset(1, 0) = X ' copia da i1 fino alla i30 ilnome del foglio creato "x"

    2- Ho inserito la textbox12 nell'userform

    3- nell'userform activate ho inserito
    TextBox12.Value = Sheets("info").Range("i30") ' se nella cella i30 si trova un valore, riportala in textbox12

    4- Poi all'inizio del codice, riportato nel post precedente gli ho inseirto:
    If TextBox12 <> "" Then Exit Sub ' se nella textbox12 cè un valore, allora esci dalla sub, altrimenti continua il codice

    Grazie