Utilizzo del Case



  • Utilizzo del Case
    di olasvadas (utente non iscritto) data: 22/08/2012 18:01:19

    Ciao a tutti,
    non sono assolutamente esperto in VB, ma ho esprienza in altri linguaggi, tipo ksh di unix etc, mi manca soprattutto la corretta sintassi per gestire correttamente le macro.
    Ne sto scrivendo una dove alla colonna A può avere 5 o 6 valori (SUN, AIX, LINUX, TRUE64 e HP-UX) e a seconda del valore deve aprire un apposito foglio xls che vado a completare con i valori presenti nelle colonne successive.
    È tipicamente un'attività da gestire con il case all'interno di un ciclo di for, ma qui casco e rischio di non venirne a capo velocemente, ho provato a scriverlo così come sotto.
    dove sbaglio? Inoltre come faccio a settare delle variabili con il nome del file che mi interessa?
    Ossia vorrei
    Selection.Copy
    Windows(
     
        Dim i As Integer
        Dim CurRange As Range
        
        Set CurRange = Range(



  • di olasvadas data: 22/08/2012 18:06:41

    Acci scusate, manca il 95% del codice che avevo copiato, riproviamo
     
        Dim i As Integer
        Dim CurRange As Range
        Set CurRange = Range(



  • di olasvadas data: 22/08/2012 18:11:57

    Ho allegato un file visto che non mi gestiva tuttele righe nel codice VBA.
    Ancora cosa sbagliavo che visualizzava solo 3 righe?

    Grazie a tutti, e ciao,
    Stefano


  • Anomalia risolta
    di Mauro (utente non iscritto) data: 22/08/2012 18:30:30

    L'anomalia del troncamento del codice dovrebbe essere risolta, per la risoluzione del problema VB lascio la palla agli amici del forum. Provo a postare il codice dell'amico.
     
        Dim i As Integer
        Dim CurRange As Range
        Set CurRange = Range("A2:K50")
        For i = 1 To CurRange.Rows.Count
            If Not CurRange.Cells(i, 2) = "" Then
        ' ciclo di case per decidere quale file utilizzare.
        CurRange.Range("A" & i).Select
        Select Case system
            AIX
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoAACDF_AIx.xls"
            SUN
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoAACDF_SUN.xls"
            TRUE64
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoAACDF_TRUE64.xls"
            LINUX
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoAACDF_LINUX.xls"
            HP -UX
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoAACDF_HP-UX.xls"
            UAR
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountPaperinoUAR3.xls"
        End Select
        '   fine ciclo di case per decidere quale file utilizzare.
        '   inizio inserimento dati,
        '   Gestione nome
        Windows("Lista_login22-8-2012.xls").Activate
        CurRange.Range("B" & i).Select
        Selection.Copy
        Windows("C:pippoplutoAccountPaperinoAACDF_SUN.xls").Activate
        Range("D18:F18").Select
        ActiveSheet.Paste



  • di Vecchio Frac data: 22/08/2012 21:29:46

    Bè sì, VBA è più complesso di un linguaggio di scripting come lo è per esempio VBScript.
    Ti do intanto la risposta veloce sulla gestione della casistica:

    Select Case system
    Case "AIX"
    Workbooks.Open ecc.
    Case "SUN"
    Workbooks.Open ecc.
    Case ecc.
    Workbooks.Open ecc.
    End Select

    Mi studio meglio la tua richiesta e poi ti fornisco qualche suggerimento :)





  • di Vecchio Frac data: 22/08/2012 21:57:36

    Nel tuo caso i nomi dei fogli Excel coincidono con il codice che immetti nella colonna A.
    Quindi il Select Case è superfluo :)
    Allego un po' di codice commentato.
    Probabilmente è lontano dai tuoi obiettivi, ma non sapendo niente di più questo è quanto posso fare :)
     
    Option Explicit
    
    Sub apri_wbk()
    Dim aCell as Range, system as string, wbk as WorkBook
    
        'consideriamo ogni cella dell'intervallo A2:A50
        'in queste celle troviamo i nomi dei sistemi operativi supportati (SUN, AIX, ecc.)
        For Each aCell in [a2:a50]
            'se la cella in colonna B non è vuota...
            If aCell.Offset(0, 1) <> "" Then
                'la variabile stringa "system" è valorizzata al maiuscolo del suo contenuto
    	    system = UCase(aCell)
       	    'l'oggetto wbk apre il file Excel che si trova nel percorso indicato e ha il nome che si trova nella cella; il riferimento all'oggetto viene mantenuto fino alla fine
                set wbk = Workbooks.Open ("C:pippoplutoAccountPaperinoAACDF_" & system & ".xls")
    	End If
    
    	'attivare il file Lista_login nel epzzo di codice visto è inutile
            'quindi lo mantengo commentato in questo esempio
            'Windows("Lista_login22-8-2012.xls").Activate
    
            'in accordo con l'originale, copio le tre celle da B a D (rispetto a aCell che è in A) nel nuovo foglio wbk a partire da D18
            aCell.Offset(0, 1).Resize(1, 3).Copy wbk.[d18]
    
    	'probabilmente il foglio dovrà essere chiuso, salvando le modifiche
    	wbk.Close True
    	Set wbk = Nothing
        Next
    End Sub






  • di olasvadas (utente non iscritto) data: 23/08/2012 11:16:50

    Buon giorno e grazie,
    il case funziona e questo è un buon principio, lo voglio utilizzare per mantenere al massimo della semplicità il codice anche per far sì che possa essere letto e modificato da colleghi che non hanno mai messo mano ad una riga di codice

    In pratica volevo migliorare l'idea di un collega che ha sviluppato una macro per ogni sistema operativo, per creare dei fogli .xls di richiesta creazione account ossia 1 procedura che li gestisca tutti.

    Ti/Vi faccio sapere come finisce.

    Grazie, Ciao

    Stefano



  • di Vecchio Frac data: 23/08/2012 11:20:55

    Il ragionamento va bene se devi fare altro oltre che aprire un file di Excel.
    Mantieni pure la struttura Select Case ma inseriscila *dopo* che hai aperto il file di Excel, tanto per ridurre la quantità di codice:
    Select Case system
    Case "AIX"
    ...
    Case "SUN
    ...
    Case Else ' sì, c'è pure il tappo residuale in cui non si trova alcun caso previsto
    ...
    End Select





  • di olasvadas data: 23/08/2012 18:53:17

    Alla fine ho fatto così:
    nel case ho selezionato il NomeFile_sistema-Operativo (AACDF_SUN.xls per esempio) e dato che non conosco la sintassi per settare il nome del file in una variabile per usarla, alla fine del case ho messo la copia in un file privo do descrizioni macchine che riempio con i dati di un altro foglio .xls

    Il tutto nasce dal fatto che i fogli tipo AACDF_SUN.xls sono bloccati su qualche cella dal cliente e che non mi dà fogli privi dei blocchi, ed il sistema operativo è uno di questi campi.

    Dato che in questi ultimi giorni per un'emergenza ho dovuto compilare decine di fogli (dai tre ai 5) per un sacco di gente, 50/60 persone, mi sono stufato.

    Mi mancava il work around , l'ho trovato, ve lo passo.
    ho ancora qualche problemino, ma mi è mancato il tempo per fare un po' di test. Quando tutto funzionerà a dovere, vi passerò tutta la Macro con i dettagli.

    Ciao e Grazie,
    Stefano

     
        Select Case system
            Case "AIX"
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountpaperinoAACDF_AIx.xls"
            Windows("AACDF_AIX.xls").Activate
            Case "SUN"
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountpaperinoAACDF_SUN.xls"
            Windows("AACDF_SUN.xls").Activate
            Case "TRUE64"
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountpaperinoAACDF_TRUE64.xls"
            Case "LINUX"
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountpaperinoAACDF_LINUX.xls"
            Case "HP_UX"
            Workbooks.Open Filename:= _
            "C:pippoplutoAccountpaperinoAACDF_HP-UX.xls"
            ' Case "UAR"
            ' Workbooks.Open Filename:= _
            ' "C:pippoplutoAccountpaperinoUAR3.xls"
        End Select
    '   fine ciclo di case per decidere quale file utilizzare.
    '   Copia del file in un file anonimo
            ActiveWorkbook.SaveAs Filename:= _
            "C:pippoplutoAccount	opolinoAACDF_MOD.xls", _
            FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWorkbook.Close
    '   Fine Copia del file in un file anonimo



  • di Vecchio Frac data: 23/08/2012 20:50:18

    Ti avevo già indicato come assegnare ad una variabile oggetto (di tipo Workbook) un percorso + nome file per poterlo poi trattare come un normale foglio, forse ti è sfuggito, si usa l'istruzione Set:

    set wbk = Workbooks.Open (path + filename)

    Dopodichè puoi accedere mediante "wbk." a tutti i metodi e le proprietà di un Workbook, compresi Sheets e Range naturalmente.

    Rimango convinto, per quello che mi dici, che la costruzione con Select Case è superflua, visto che già conosci (è in una cella) il tipo di sistema operativo da considerare (infatti non lo fai digitare dall'utente nè lo scegli da una casella a discesa). Tutto il Select probabilmente farebbe solo più confusione ai tuoi colleghi perchè vedono una serie ripetuta di Workbooks.Open :)

    Mi è oscura la frase "Il tutto nasce dal fatto che i fogli tipo AACDF_SUN.xls sono bloccati su qualche cella dal cliente e che non mi dà fogli privi dei blocchi, ed il sistema operativo è uno di questi campi."...
    Sono bloccati in che senso? il codice dà qualche messaggio di errore? è un problema di path forse?

    Vedrò volentieri il modello finale, testato come si deve :)





  • di olasvadas (utente non iscritto) data: 05/09/2012 16:43:18

    Dear Old Frac
    ho allegato il mio parto, faticoso (per me) ma funzionante.

    Ricapitolo: nella richiesta di creazione account sulle macchine del cliente dobbiamo preparare dei fogli xls di richiesta che sono proprietary del cliente che ha bloccato con password alcune celle. Il blocco sulle celle impedisce la pura sostituzione del contenuto delle stesse.
    Le celle si modificano solo tramite menu a tendina.
    Quindi il foglio excel è stato salvato tante volte quante sono le attuali combinazioni necessarie ai nostri scopi.
    nel foglio xls sono state gestite una ventina di colonne tutte contenenti i dati delle persone che devono avere l'account sulle macchine del Customer.
    System Nome Ruolo Cognome MAIL GROUP Login Primary Group home directory Server Mail Data start Env Reason SottoSistema Data end DB Name environment

    questi i nomi delle colonne, che in relatà insistono su un'unica riga
    nella colonna system i dati necessari al case, a seconda del contenuto c'è la copia dell'apposito template ed un'unica gestione tranne che per la gestiopne del tracer interno (TraACC3.xls) in cui c'è una gestione dedicata.

    Ho cercato di commentarla al meglio, spero sia comprensibile.
    Caio, S.

     
    Sub Unico()
    '
    ' SUN Macro
    ' Macro recorded 08/08/2012 by IT058688
    '
    '
    
        Dim i As Integer
        Dim CurRange As Range
        Dim wbk_dest As Workbook
        
        Set CurRange = Range("A2:S50")
        
        For i = 1 To CurRange.Rows.Count
        
            If Not CurRange.Cells(i, 2) = "" Then
    ' ciclo di case per decidere quale file utilizzare.
        CurRange.Range("A" & i).Select
        Select Case CurRange.Range("A" & i)
            Case "AIX"
            If CurRange.Cells(i, "C") = "Tester" Then
                Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_AIX_RW.xls")
            Else
                Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_AIX_RW.xls.xls")
            End If
            Call CommonManag(i, wbk_dest, CurRange)
            Case "SUN"
            If CurRange.Cells(i, "C") = "Tester" Then
                Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_SUN_RW.xls xls")
            Else
                Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_SUN_R.xls ")
            End If
            Call CommonManag(i, wbk_dest, CurRange)
            Case "TRUE64"
            Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_TRUE64.xls")
            Call CommonManag(i, wbk_dest, CurRange)
            Case "LINUX"
            Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_LINUX.xls")
            Call CommonManag(i, wbk_dest, CurRange)
            Case "HP_UX"
            Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippoACC_HP-UX.xls")
            Call CommonManag(i, wbk_dest, CurRange)
    '       Inizio Case UAR
            Case "UAR"
            Set wbk_dest = Workbooks.Open("C:steveGrpAccountpippo TracACC3.xls")
    '   Gestione Nome
            Windows("Lista_login.xls").Activate
            CurRange.Range("B" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D5").Select
            ActiveSheet.Paste
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
    '   Fine Gestione Nome
    '   Gestione Cognome
            Windows("Lista_login.xls").Activate
            CurRange.Range("D" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D6").Select
            ActiveSheet.Paste
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
        End With
    '   Fine Gestione Cognome
    '   Gestione Data Inizio or Data start
            Windows("Lista_login.xls").Activate
            CurRange.Range("M" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D7").Select
            ActiveSheet.Paste
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
    '   Fine Gestione Data Inizio or Data start
    '   Gestione Data Fine or Data end
            Windows("Lista_login.xls").Activate
            CurRange.Range("Q" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D8").Select
            ActiveSheet.Paste
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
    '   Fine Gestione Data fine or Data end
    '   Gestione OBS
            Windows("Lista_login.xls").Activate
            CurRange.Range("F" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D12").Select
            ActiveSheet.Paste
            Selection.Font.ColorIndex = 3
            Selection.Font.Bold = True
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            ActiveWindow.SmallScroll Down:=9
    '   Fine Gestione OBS
    '   Gestione Sotto Sistema
            Windows("Lista_login.xls").Activate
            CurRange.Range("P" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D13").Select
            ActiveSheet.Paste
            Selection.Font.ColorIndex = 3
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            Selection.Font.Bold = True
            ActiveWindow.SmallScroll Down:=3
    '   Fine Gestione Sotto Sistema
    '   Gestione Environment
            Windows("Lista_login.xls").Activate
            CurRange.Range("N" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D15").Select
            ActiveSheet.Paste
            Selection.Font.ColorIndex = 3
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            Selection.Font.Bold = True
    '   Fine Gestione Environment
    '   Gestione Diritti di scrittura
            Windows("Lista_login.xls").Activate
            CurRange.Range("N" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D16").Select
            If CurRange.Cells(i, "C") = "Tester" Then
                wbk_dest.ActiveSheet.Cells(16, "D").Value = "Read/Write"
            Else
                wbk_dest.ActiveSheet.Cells(16, "D").Value = "Read"
            End If
            Selection.Font.ColorIndex = 3
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            Selection.Font.Bold = True
    '   Fine Gestione Diritti di scrittura
    '   Gestione OS/Oracle
        Windows("Lista_login.xls").Activate
        CurRange.Range("S" & i).Select
        Selection.Copy
        Windows("UAR3.xls").Activate
        Range("D17").Select
        ActiveSheet.Paste
        Selection.Font.ColorIndex = 3
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Font.Bold = True
    '   Fine Gestione OS/Oracle
        
    '    Gestione OS / Oracle
    '    Windows("Lista_login.xls").Activate
    '    CurRange.Range("S" & i).Select
    If CurRange.Cells(i, "S") = "Oracle" Then
    '   Gestione Cancellazione commento
            Range("D18").Select
            Selection.ClearContents
            Range("D19").Select
            Selection.ClearContents
    '   Fine  Cancellazione commento
    '   Gestione inserimento nomi DB
                Windows("Lista_login.xls").Activate
                CurRange.Range("R" & i).Select
                Selection.Copy
                wbk_dest.Activate
                Range("D21").Select
                ActiveSheet.Paste
                Selection.Font.ColorIndex = 3
                With Selection
                    .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                    .WrapText = False
                    .Orientation = 0
                    .AddIndent = False
                    .IndentLevel = 0
                    .ShrinkToFit = False
                    .ReadingOrder = xlContext
                    .MergeCells = False
            End With
            Selection.Font.Bold = True
    '   Fine Gestione DB
               Else
    '   Gestione Server
            Windows("Lista_login.xls").Activate
            CurRange.Range("J" & i).Select
            Selection.Copy
            Windows("UAR3.xls").Activate
            Range("D19").Select
            ActiveSheet.Paste
            Selection.Font.ColorIndex = 3
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            Selection.Font.Bold = True
            Range("D21").Select
            ActiveCell.FormulaR1C1 = " "
            With ActiveCell.Characters(Start:=1, Length:=1).Font
                    .Name = "Arial"
                    .FontStyle = "Bold"
                    .Size = 10
                    .Strikethrough = False
                    .Superscript = False
                    .Subscript = False
                    .OutlineFont = False
                    .Shadow = False
                    .Underline = xlUnderlineStyleNone
                    .ColorIndex = 3
            End With
    '   Fine  Gestione Server
                    
        End If
    
    '   Gestione Bordo
            Range("D5:D22").Select
            Selection.Borders(xlDiagonalDown).LineStyle = xlNone
            Selection.Borders(xlDiagonalUp).LineStyle = xlNone
            With Selection.Borders(xlEdgeLeft)
                    .LineStyle = xlContinuous
                    .Weight = xlThin
                    .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeTop)
                    .LineStyle = xlContinuous
                    .Weight = xlMedium
                    .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeBottom)
                    .LineStyle = xlContinuous
                    .Weight = xlMedium
                    .ColorIndex = xlAutomatic
            End With
            With Selection.Borders(xlEdgeRight)
                    .LineStyle = xlContinuous
                    .Weight = xlMedium
                    .ColorIndex = xlAutomatic
            End With
    '   Fine  Gestione Bordo
    '   Gestione salvataggio file UAR
            ChDir " C:steveGrp AccountNewServers"
            Windows("Lista_login.xls").Activate
            CurRange.Range("K" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Application.CutCopyMode = False
            Windows("Lista_login.xls").Activate
            CurRange.Range("K" & i).Select
            'ActiveCell.FormulaR1C1 = "Abt_Ang"
            Windows("UAR3.xls").Activate
            ActiveWorkbook.SaveAs Filename:= _
                    " C:steveGrp AccountNewServersdiprova" & CurRange.Cells(i, "K") & "_UAR3.xls", _
                    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
                    ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWorkbook.Close
    '   Fine Gestione salvataggio file UAR
    '       fine case UAR
            End Select
    
                    Else
                    
                            Exit For
                    
                    End If
                    
            Next
    
    End Sub
    
    
    Sub CommonManag(i As Integer, wbk_dest As Workbook, CurRange As Range)
    '   Fine Copia del file in un file anonimo
            '   inizio inserimento dati,
            '   Gestione nome
            Windows("Lista_login.xls").Activate
            CurRange.Range("B" & i).Select
            Selection.Copy
            wbk_dest.Activate
            Range("D18:F18").Select
            ActiveSheet.Paste
            '   Fine Gestione Nome
            '   Gestione Cognome
            Windows("Lista_login.xls").Activate
            CurRange.Range("D" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D19:F19").Select
            ActiveSheet.Paste
            '   Fine Gestione Cognome
            '   Gestione Mail Address
            Windows("Lista_login.xls").Activate
            CurRange.Range("E" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D20:F20").Select
            ActiveSheet.Paste
            '        Fine Gestione Mail Address
            '   Gestione OBS
            Windows("Lista_login.xls").Activate
            CurRange.Range("F" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D21:F21").Select
            ActiveSheet.Paste
            '   Fine Gestione OBS
            '   Gestione login
            ActiveWindow.SmallScroll Down:=12
            Windows("Lista_login.xls").Activate
            CurRange.Range("G" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D29:F29").Select
            ActiveSheet.Paste
            '   Gestione login
            '   Gestione Primary Group
            Windows("Lista_login.xls").Activate
            CurRange.Range("H" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D30:F30").Select
            ActiveSheet.Paste
            '   Fine Gestione Primary Group
            '   Gestione homedir
            Windows("Lista_login.xls").Activate
            CurRange.Range("I" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D34:F34").Select
            ActiveSheet.Paste
            '   Fine Gestione homedir
            '   Gestione  Server Name
            ActiveWindow.SmallScroll Down:=12
            Windows("Lista_login.xls").Activate
            CurRange.Range("N" & i).Select
            Select Case Env
            Case "PROD"
            CurRange.Range("J" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D50:J500").Select
            ActiveSheet.Paste
            Case "Pre"
            CurRange.Range("J" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D51:J51").Select
            ActiveSheet.Paste
            Case "DEV"
            CurRange.Range("J" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D52:J52").Select
            ActiveSheet.Paste
            Case "TEST"
            CurRange.Range("J" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D52:J52").Select
            ActiveSheet.Paste
            Case "VD"
            CurRange.Range("J" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Range("D53:J53").Select
            ActiveSheet.Paste
            End Select
            '   Gestione  Server Name
            
            '   Gestione salvataggio
            ActiveWindow.SmallScroll Down:=-27
            Range("B9:J10").Select
            Windows("Lista_login.xls").Activate
            CurRange.Range("K" & i).Select
            Application.CutCopyMode = False
            Selection.Copy
            wbk_dest.Activate
            Application.CutCopyMode = False
            Windows("Lista_login.xls").Activate
            CurRange.Range("K" & i).Select
            wbk_dest.Activate
            ActiveWorkbook.SaveAs Filename:= _
                    " C:steveGrp AccountNewServersdiprova" & CurRange.Cells(i, "K") & "_" & CurRange.Cells(i, "A") & ".xls", _
                     FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
                    ReadOnlyRecommended:=False, CreateBackup:=False
            ActiveWorkbook.Close
    
            '   Fine Gestione Salvataggio
            Windows("Lista_login.xls").Activate
    End Sub
    



  • di Vecchio Frac data: 05/09/2012 17:47:11

    Dear Stefano the Trekker (eh già... Google se ne frega della nostra privacy ),
    appena ho un attimo darò un'occhiata al lungo codice.
    Magari, la prossima volta puoi allegare un file di esempio con il codice finale e qualche riga di test, zippandolo o rarrandolo per contenerne le dimensioni, piuttosto che allegare il codice semplicemente, così si semplificano le operazioni di test.
    Ma va bene così, comunque.
    A presto.






  • di olasvadas (utente non iscritto) data: 05/09/2012 17:51:38

    better the hunter

    S.



  • di Vecchio Frac data: 05/09/2012 22:35:15

    LOL, mi è venuto un filo di mal di testa a cercare di seguire tutta la logica del programmino :)
    Immagino che funzoni, punti critici non ne vedo e infatti è ben sequenziato.
    Come dicevo in altra parte del thread, si potrebbe tranquillamente fare tutta una serie di ottimizzazioni (per esempio per fare a meno del Select Case) e forse si riesce a gestire anche la scelta forzata nel menu a tendina.
    Considera anche che generalmente puoi abbreviare la sequenza: "range.seleziona - selezione.copy - altra selezione. activate - nuova selezione.paste" con "range_iniziale.copy [destinazione]".
    Probabilmente questo potrebbe essere un passo successivo, di affinamento.
    Se consideri chiusa la discussione, prego spuntare la casella "discussione risolta".
    E grazie per il feedback :)





  • di olasvadas (utente non iscritto) data: 07/09/2012 10:35:27

    Mi spiace per il mal di testa, per me è una cosa abbastanza piccola, in passato le mie kshell UNIX contavano parecchie migliaia di righe. ;-D

    Funziona, se ho tempo e qualche aiuto locale la sistemerò meglio, ma non mi posso lamentare, la gestione di decine di richieste account si è di molto ridotta in termini di tempo e correttezza di contenuti ed i miei occhi ringraziano.

    Grazie per i suggerimenti, grazie a te per i feedback,

    Ciao S.