Blocco UserForm dopo alcini controlli

Anonimo
2012-11-22T09:19:01+00:00

Spiego brevemente lo scopo del lavoro.

Sto creando una maschera, in Visual Basic for Application, in cui inserendo dei dati in opportune ComboBox/TextBox e cliccando su un Command Button  vengono direttamente caricati in un altro file excel; contemporaneamente si creano cartelle e sottocartelle in una determinata directory. Visto che la maggior parte dei dati sono obbligatori, ho dovuto utilizzare un'istruzione “If..then..elseif..else..end if” abbastanza lunga, che non mi permette di andare avanti nel caricamento dei dati nell’atro file excel se i campi obbligatori non vengono inseriti.

Il mio problema è il seguente:

dopo 5/6 volte che cerco di caricare i dati (i dati sono obbligatori ma li ho lasciati vuoti perché sto in fase di prova e quindi voglio trovare tutti i possibili errori) la UserForm (o meglio la maschera in cui si inseriscono i dati) si blocca e non mi permette di cliccare su nessun TextBox, ComboBox o Command Button….e l’unica cosa che posso fare è chiudere il file excel in cui ho creato la maschera.

 PS: il programmino non mi da errori; quindi non capisco dove ho sbagliato il codice visto che sto usando Visaul Basic da una decina di giorni!!

Questo l'intero codice, di tutte le le textbox/combobox/command button:

Private Sub ComboBox10_DropButtonClick()

Me.ComboBox10.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub ComboBox11_DropButtonClick()

Me.ComboBox11.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub ComboBox12_DropButtonClick()

Me.ComboBox12.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub ComboBox2_DropButtonClick()

Me.ComboBox2.List = Application.Transpose(Range("BS3:EG3"))

End Sub

Private Sub ComboBox3_DropButtonClick()

Me.ComboBox3.List = Application.Transpose(Range("BS4:BX4"))

End Sub

Private Sub ComboBox4_DropButtonClick()

Me.ComboBox4.List = Application.Transpose(Range("BS2:CA2"))

End Sub

Private Sub ComboBox5_DropButtonClick()

Me.ComboBox5.List = Application.Transpose(Range("BS5:BU5"))

End Sub

Private Sub ComboBox6_DropButtonClick()

Me.ComboBox6.List = Application.Transpose(Range("BS6:BV6"))

End Sub

Private Sub ComboBox7_DropButtonClick()

Me.ComboBox7.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub ComboBox8_DropButtonClick()

Me.ComboBox8.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub ComboBox9_DropButtonClick()

Me.ComboBox9.List = Application.Transpose(Range("BS7:BU7"))

End Sub

Private Sub CommandButton1_Click()

Unload Me

    Windows("Maschera Contract Summary.xlsm").Activate

    Range("A1").Select

    ActiveWindow.LargeScroll ToRight:=1

    Range("AB5:BH5").Select

    Selection.Copy

    Range("A1").Select

    ActiveCell.Offset(8, 27).Range("A1").Select

    Selection.End(xlDown).Select

    ActiveCell.Offset(1, 0).Range("A1").Select

    ActiveSheet.Paste

    ActiveSheet.Range("A1").Select

    Application.CutCopyMode = False

    ActiveWorkbook.Save

    UserForm1.Show

End Sub

Private Sub CommandButton2_Click()

Unload Me

    If TextBox1.Text = "" Then

    MsgBox "Digitare Valore in Campo Company.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox5.Text = "" Then

    MsgBox "Definire area procurement ID.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox4.Text = "" Then

    MsgBox "Selezionare Valore Commodity L2.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox2.Text = "" Then

    MsgBox "Selezionare Valore Commodity L3.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf Not Left(Range("AD5").Value, 1) = Left(Range("AE5").Value, 1) Then

    MsgBox "La Commodity L3 deve essere della stessa famiglia della Commodity L2.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf TextBox28.Text = "" Then

    MsgBox "Inserire Vendor Code.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf TextBox26.Text = "" Then

    MsgBox "Inserire Buyer Code.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf TextBox7.Text = "" Then

    MsgBox "Inserire SAP Contract Number.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, "/") Then

    MsgBox "In SAP number  non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, "") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, "|") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, Range("AB3").Value) Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, "*") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, "<") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, ">") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox7.Text, ":") Then

    MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox3.Text = "" Then

    MsgBox "Selezionare Contract Type.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf TextBox8.Text = "" Or TextBox8.MaxLength > 30 Then

    MsgBox "Inserire Breve Descrizione [max 30 caratteri].", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, "") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, "/") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, ":") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, "*") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, "<") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, ">") Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, "|") Then

    MsgBox "In Brief Description  non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf InStr(TextBox8.Text, Range("AB3").Value) Then

    MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

    UserForm1.Show

    ElseIf Not IsDate(TextBox9.Text) Then

    MsgBox "Inserire Data in formato dd/mm/yyyy in Date of Creation.)", vbCritical, "Errore"

    UserForm1.Show

    ElseIf Not IsDate(TextBox11.Text) Then

    MsgBox "Inserire Data in formato dd/mm/yyyy in Validity - Start Data.)", vbCritical, "Errore"

    UserForm1.Show

    ElseIf Not IsDate(TextBox12.Text) Then

    MsgBox "Inserire Data in formato dd/mm/yyyy in Validity - End Data.)", vbCritical, "Errore"

    UserForm1.Show

    ElseIf Not IsNumeric(TextBox13.Text) Then

    MsgBox "Inserire valore numerico in Contract Value.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox6.Text = "" Then

    MsgBox "Campo Currency vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox7.Text = "" Then

    MsgBox "Campo Volume Committent vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox11.Text = "" Then

    MsgBox "Campo Escalation Formula vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox12.Text = "" Then

    MsgBox "Campo Rebates vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox8.Text = "" Then

    MsgBox "Campo Automatic renewal clauses vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox9.Text = "" Then

    MsgBox "Campo Early Termination vuoto.", vbCritical, "Errore"

    UserForm1.Show

    ElseIf ComboBox10.Text = "" Then

    MsgBox "Campo KPI vuoto.", vbCritical, "Errore"

    UserForm1.Show

    Else

    Dim fso

    Dim fol As String

    fol = "C:\Users\giuseppe.divico\Desktop\Contratti" & Range("AD5").Value & "" & Range("AE5").Value & "" & Range("AG5").Value & "_" & Range("AH5").Value

    Set fso = CreateObject("Scripting.FileSystemObject")

      If Not fso.FolderExists(fol) Then

      fso.CreateFolder (fol)

      End If

    Dim fsa

    Dim fal As String

    fal = "C:\Users\giuseppe.divico\Desktop\Contratti" & Range("AD5").Value & "" & Range("AE5").Value & "" & Range("AG5").Value & "_" & Range("AH5").Value & "" & Range("AM5").Value & "_" & Range("AN5").Value

    Set fsa = CreateObject("Scripting.FileSystemObject")

      If Not fsa.FolderExists(fal) Then

      fsa.CreateFolder (fal)

        Else

        MsgBox "Cartella già esistente. Modificare SAP Number o utilizzare un'altra descrizione breve.", vbCritical, "Errore"

      UserForm1.Show

      End If

    Workbooks.Open Filename:="C:\Users\giuseppe.divico\Desktop\AW IP Contratti Summary Prova.xlsx"

    Windows("Maschera Contract Summary.xlsm").Activate

    Range("A1").Select

    ActiveWindow.LargeScroll ToRight:=1

    Range("AB5:BH5").Select

    Selection.Copy

    Windows("AW IP Contratti Summary Prova.xlsx").Activate

    Range("A1").Select

    ActiveCell.Offset(1, 1).Range("A1").Select

    Selection.End(xlDown).Select

    ActiveCell.Offset(1, 0).Range("A1").Select

    ActiveSheet.Paste

    ActiveSheet.Range("A1").Select

    Application.CutCopyMode = False

    ActiveWorkbook.Save

    Windows("AW IP Contratti Summary Prova.xlsx").Close

    Windows("Maschera Contract Summary.xlsm").Activate

    Range("A1").Select

    ActiveWindow.LargeScroll ToRight:=1

    Range("AB5:AG5,AI5,AK5:AS5,AU5:BF5,BH5").Select

    Selection.ClearContents

    Range("A1").Select

End If

End Sub

Private Sub CommandButton3_Click()

    Unload Me

    Range("A1").Select

    ActiveWindow.LargeScroll ToRight:=1

    Range("AB5:AG5,AI5,AK5:AS5,AU5:BF5,BH5").Select

    Selection.ClearContents

    Range("A1").Select

    ActiveWindow.LargeScroll ToRight:=1

    Range("AB13:AG40,AI13,AK13:AS40,AU13:BF40,BH13:BH40").Select

    Range(Selection, Selection.End(xlDown)).Select

    Selection.ClearContents

    Range("A1").Select

End Sub

Private Sub Label21_Click()

End Sub

Private Sub Label23_Click()

End Sub

Private Sub Label24_Click()

End Sub

Private Sub Label26_Click()

End Sub

Private Sub Label27_Click()

End Sub

Private Sub Label30_Click()

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox11_Change()

End Sub

Private Sub TextBox12_()

End Sub

Private Sub TextBox12_Change()

End Sub

Private Sub TextBox22_Change()

End Sub

Private Sub TextBox8_Change()

End Sub

Private Sub TextBox9_Change()

End Sub

Private Sub UserForm_Click()

End Sub

Grazie in anticipo. Spero mi sono spiegato bene e che la cosa sia risolvibile.

Giuseppe

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-11-23T06:19:45+00:00

Ciao Mauro, devo scrivere ciò che mi hai consigliato per ogni TextBox/ComboBox o solo per quelli per cui non sono consentiti alcuni caratteri.

 

 

 

Se intendi l'evento Change con il controllo del testo, solo per le TextBox sulle quali devi fare un controllo sul contenuto. Ad esempio controllare non ci siano \ o / o quello che vuoi.

Il controllo sul fatto che la TextBox o la ComboBox non sia vuota, lo fai poi nel Click del CommandButton che esegue le operazioni di immissione dati.

Qui trovi un semplice esempio, il file controllo.xls, che condensa quanto detto fino ad ora:

https://skydrive.live.com/?cid=0361684D94BB851A#cid=0361684D94BB851A&id=361684D94BB851A%21169

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-11-22T14:45:08+00:00

    Non ti preoccupare, non me la prendo...anzi fai bene a darmi tutte le dritte possibili...te l'ho detto è da 10 giorni che utilizzo per la prima volta VBA.

    Tornando a noi:

    Allora il controllo di tutte le TextBox/ComboBox me le deve fare un Command Button, che contemporaneamente mi deve creare le cartelle.

    Nel frattempo che tu rispondessi al mio messaggio, ho provato ad impostare il codice del command button che mi deve esguire il tutto (quello degli if per intenderci) in questo modo:

    Private Sub CommandButton2_Click()

    Unload Me

        If TextBox1.Text = "" Then

        MsgBox "Digitare Valore in Campo Company.", vbCritical, "Errore"

        UserForm1.Show

        TextBox1.SetFocus

        Exit Sub

        End If

        If ComboBox5.Text = "" Then

        MsgBox "Definire area procurement ID.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox5.SetFocus

        Exit Sub

        End If

        If ComboBox4.Text = "" Then

        MsgBox "Selezionare Valore Commodity L2.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox4.SetFocus

        Exit Sub

        End If

        If ComboBox2.Text = "" Then

        MsgBox "Selezionare Valore Commodity L3.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox2.SetFocus

        Exit Sub

        End If

        If Not Left(Range("AD5").Value, 1) = Left(Range("AE5").Value, 1) Then

        MsgBox "La Commodity L3 deve essere della stessa famiglia della Commodity L2.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox2.SetFocus

        Exit Sub

        End If

        If TextBox28.Text = "" Then

        MsgBox "Inserire Vendor Code.", vbCritical, "Errore"

        UserForm1.Show

        TextBox28.SetFocus

        Exit Sub

        End If

        If TextBox26.Text = "" Then

        MsgBox "Inserire Buyer Code.", vbCritical, "Errore"

        UserForm1.Show

        TextBox26.SetFocus

        Exit Sub

        End If

        If TextBox7.Text = "" Then

        MsgBox "Inserire SAP Contract Number.", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        Exit Sub

        End If

        If InStr(TextBox7.Text, "/") Then

        MsgBox "In SAP number  non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, "") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, "|") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, Range("AB3").Value) Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, "*") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, "<") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, ">") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        ElseIf InStr(TextBox7.Text, ":") Then

        MsgBox "In SAP number non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox7.SetFocus

        Exit Sub

        End If

        If ComboBox3.Text = "" Then

        MsgBox "Selezionare Contract Type.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox3.SetFocus

        Exit Sub

        End If

        If TextBox8.Text = "" Then

        MsgBox "Inserire Breve Descrizione.", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        Exit Sub

        End If

        If InStr(TextBox8.Text, "") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, "/") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, ":") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, "*") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, "<") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, ">") Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, "|") Then

        MsgBox "In Brief Description  non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        ElseIf InStr(TextBox8.Text, Range("AB3").Value) Then

        MsgBox "In Brief Description non è permesso l'inserimento di /:*<>|""", vbCritical, "Errore"

        UserForm1.Show

        TextBox8.SetFocus

        Exit Sub

        End If

        If Not IsDate(TextBox9.Text) Then

        MsgBox "Inserire Data in formato dd/mm/yyyy in Date of Creation.)", vbCritical, "Errore"

        UserForm1.Show

        Exit Sub

        End If

        If Not IsDate(TextBox11.Text) Then

        MsgBox "Inserire Data in formato dd/mm/yyyy in Validity - Start Data.)", vbCritical, "Errore"

        UserForm1.Show

        Exit Sub

        End If

        If Not IsDate(TextBox12.Text) Then

        MsgBox "Inserire Data in formato dd/mm/yyyy in Validity - End Data.)", vbCritical, "Errore"

        UserForm1.Show

        Exit Sub

        End If

        If Not IsNumeric(TextBox13.Text) Then

        MsgBox "Inserire valore numerico in Contract Value.", vbCritical, "Errore"

        UserForm1.Show

        Exit Sub

        End If

        If ComboBox6.Text = "" Then

        MsgBox "Campo Currency vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox6.SetFocus

        Exit Sub

        End If

        If ComboBox7.Text = "" Then

        MsgBox "Campo Volume Committent vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox7.SetFocus

        Exit Sub

        End If

        If ComboBox11.Text = "" Then

        MsgBox "Campo Escalation Formula vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox11.SetFocus

        Exit Sub

        End If

        If ComboBox12.Text = "" Then

        MsgBox "Campo Rebates vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox12.SetFocus

        Exit Sub

        End If

        If ComboBox8.Text = "" Then

        MsgBox "Campo Automatic renewal clauses vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox8.SetFocus

        Exit Sub

        End If

        If ComboBox9.Text = "" Then

        MsgBox "Campo Early Termination vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox9.SetFocus

        Exit Sub

        End If

        If ComboBox10.Text = "" Then

        MsgBox "Campo KPI vuoto.", vbCritical, "Errore"

        UserForm1.Show

        ComboBox10.SetFocus

        Else

        Dim fso

        Dim fol As String

        fol = "C:\Users\giuseppe.divico\Desktop\Contratti" & Range("AD5").Value & "" & Range("AE5").Value & "" & Range("AG5").Value & "_" & Range("AH5").Value

        Set fso = CreateObject("Scripting.FileSystemObject")

          If Not fso.FolderExists(fol) Then

          fso.CreateFolder (fol)

          End If

        Dim fsa

        Dim fal As String

        fal = "C:\Users\giuseppe.divico\Desktop\Contratti" & Range("AD5").Value & "" & Range("AE5").Value & "" & Range("AG5").Value & "_" & Range("AH5").Value & "" & Range("AM5").Value & "_" & Range("AN5").Value

        Set fsa = CreateObject("Scripting.FileSystemObject")

          If Not fsa.FolderExists(fal) Then

          fsa.CreateFolder (fal)

            Else

            MsgBox "Cartella già esistente. Modificare SAP Number o utilizzare un'altra descrizione breve.", vbCritical, "Errore"

          UserForm1.Show

          End If

        Workbooks.Open Filename:="C:\Users\giuseppe.divico\Desktop\AW IP Contratti Summary Prova.xlsx"

        Windows("Maschera Contract Summary.xlsm").Activate

        Range("A1").Select

        ActiveWindow.LargeScroll ToRight:=1

        Range("AB5:BH5").Select

        Selection.Copy

        Windows("AW IP Contratti Summary Prova.xlsx").Activate

        Range("A1").Select

        ActiveCell.Offset(1, 1).Range("A1").Select

        Selection.End(xlDown).Select

        ActiveCell.Offset(1, 0).Range("A1").Select

        ActiveSheet.Paste

        ActiveSheet.Range("A1").Select

        Application.CutCopyMode = False

        ActiveWorkbook.Save

        Windows("AW IP Contratti Summary Prova.xlsx").Close

        Windows("Maschera Contract Summary.xlsm").Activate

        Range("A1").Select

        ActiveWindow.LargeScroll ToRight:=1

        Range("AB5:AG5,AI5,AK5:AS5,AU5:BF5,BH5").Select

        Selection.ClearContents

        Range("A1").Select

    End If

    End Sub

    Sembra che non si blocchi!!!!

    Però ho incontrato un problema:

    Il problema è che quando inserisco la data nel TextBox9 mi esce un box con scritto:

    Microsoft forms

    Exception occurred

    Che vuol dire?

    Grazie Mille

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-11-22T14:15:06+00:00

     

    1. Entrambi i file già esistono.

     

    <cut>

    Spero di essere stato chiaro.

    Grazie Mille.

    No.

    Sarebbe meglio che nell'evento Exit di ciascun oggetto controllassi il contenuto.

    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

        If Me.ComboBox1.Text = "" Then

            MsgBox "Attenzione! Inserire il valore."

            Cancel = True

        End If

    End Sub

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

        If Me.TextBox1.Text = "" Then

            MsgBox "Attenzione! Inserire il valore."

            Cancel = True

        End If

    End Sub

    Però io non so come fai compilare e valutare la UserForm.

    Per evitare quegli If, puoi anche mettere il controllo nell'evento QueryClose.

    Ad esempio questo esegue un controllo alla chiusura:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

        Dim ctrl As Control

        For Each ctrl In Me.Controls

            If ctrl.Value = "" Then

                MsgBox "Attenzione! " & ctrl.Name & " non è stato completato!"

                Cancel = True

                Exit Sub

            End If

        Next

    End Sub

    A questo punto però, sarebbe meglio *raggruppare i controlli* che devono essere completati in un Frame. Così i controlli nel Frame *vengono controllati*, gli altri no:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

        Dim ctrl As Control

        For Each ctrl In Me.Frame1.Controls

            If ctrl.Value = "" Then

                MsgBox "Attenzione! " & ctrl.Name & " non è stato completato!"

                Cancel = True

                Exit Sub

            End If

        Next

    End Sub

    Se il controllo non deve avvenire alla chiusura della UserForm, ma da un pulsante, sempre utilizzando un Frame per contenere i controlli:

    Private Sub CommandButton1_Click()

        Dim ctrl As Control

        For Each ctrl In Me.Frame1.Controls

            If ctrl.Value = "" Then

                MsgBox "Attenzione! " & ctrl.Name & " non è stato completato!"

                Exit Sub

            End If

        Next

        'qui il codice da eseguire se tutti

        'i controlli sono completati

        MsgBox "Tutto OK"

    End Sub

    Inoltre, la serie degli If è comunque ininfluente. Se hai un codice che viene richiamato alla fine degli If, fossero anche 1000, prima esegue gli If, quindi il resto del codice. E un ciclo for non cambia nulla in questo contesto.

    Una critica, cattiva se vuoi e mi dispiace ma spero tu non te la prenda.

    Il tuo codice non è proprio un bel codice...

    Apri oggetti e non li chiudi, utilizzi dei Select che non servono, ecc.

    Io lo rivedrei, un passo alla volta.

    Ad esempio, il punto 2 che ho quotato: quei due file entrambi già aperti?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-11-22T13:33:59+00:00

    ok scusa, forse sono stato poco chiaro. Rispondo a ciò che mi hai chiesto:

    1) La userform si trova nel file Maschera Cintract Summary: inserisco i dati nella user form che vanno contemporaneamente a completare una riga nello stesso file. Questa riga poi va a popolare un database che si trova nell'altro file AW IP Contratti Summary (che vorrei non venisse toccato per evitare danni ecco perchè utilizzo una userfom).

    1. Entrambi i file già esistono.
    2. una volta che compilo "correttamente" tutti i textBox/ComboBox (cioè una volta superato tutto quel ciclo IF) si creano le cartelle.
    3. I nomi che andranno a creare la cartella li prendo dalla riga di ui parlo nel punto 1).
    4. La nuova cartella, se non esitste, va creata e  contiene i valori presenti nella cella di questa riga. di cui si parla nel punto 1).Lo stesso vale per la sotto cartella.

    6)La prima parte della directory è fissa: sono cartelle già presenti sul mio desktop. La restante parte della directory dipende dai valori che inserisco in opportune TextBox/ComboBox.

    1. Per la directory mi servono due ComboBox per la cartella e di due TextBox per la relativa sotto cartella.

    Scusa per l'immagine, ma visto che sono in fase critica e dovrei risolvere questa cosa il primo possibile ho optato per un punto eslamativo. Ora la cambio.

    PS: scusa l'ignoranza, io credo che il problema sta in quei If..elseif...Se quelli non si blocca nulla. Sarebbe meglio un ciclo for per le textbox e un ciclo for per le combobox? Vabè la mia è un ipotesi...non so...sono troppo inesperto.

    Spero di essere stato chiaro.

    Grazie Mille.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-11-22T12:15:19+00:00

    Spiego brevemente lo scopo del lavoro.

    <cut>

     

    Grazie in anticipo. Spero mi sono spiegato bene e che la cosa sia risolvibile.

     

    Giuseppe

    Vediamo, piano piano, di capire.

    • I dati che carichi nella UserForm, si trovano nello stesso file?
    • Il file nei quali vai ad inserire i dati della UserForm, è già presente o lo devi creare?
    • Una volta creato, devi creare una directory che lo contenga?
    • Dove prendiamo il nome della directory e del file che creiamo?
    • Per validare l'immissione dei dati e la conseguente creazione di file/directory , *tutti* i controlli della UserForm devono essere completati?

    Scusa, ma dal tuo codice si capisce poco (almeno io non capisco nulla).

    E un favore, se possibile. L'immagine che hai messo potrebbe confondere gli utenti meno esperti, che potrebbero scambiarla per un avviso di alert. Potresti modificarla?

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento