Metodo unionworkbooksadd



  • Metodo union+workbooks.add
    di nicola (utente non iscritto) data: 21/08/2014 17:32:27

    Ciao a tutti .....eccomi nuovamente in mezzo a voi ...e meno male che ci siete

    Ho questo codice che attraverso il metodo union vado a selezionare 3 colonne e copiarle in un nuovo
    file....

    Fin qui tutto bene

    Il mio problema e che una volta copiato vorrei invertire le colonne

    ossia la colonna "C" diventa la "A" e viceversa....

    Cerco di attivare il nuovo file con wb.activate ma non riesco a tagliare e incollare

    Vi prego aiutooo

    grazie in anticipo

     
    Private Sub cmdCaricapromo_Click()
    Dim Unione As Range
    Dim c1, c2, c3 As Range
    Dim wb As Workbook
    Dim FinalRow As Long
    Dim Percorso As String, promo As String
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    Range("K4:K" & FinalRow) = Array(1292)
    
    Set c1 = Range("K4:K" & FinalRow)
    Set c2 = Range("A4:A" & FinalRow)
    Set c3 = Range("J4:J" & FinalRow)
    
    Set Unione = Union(c1, c2, c3)
    
    Unione.Copy
    
    Set wb = Workbooks.Add
    
    Selection.PasteSpecial Paste:=xlPasteValues
    
        wb.Activate
        Range("C:C").Select
        Application.CutCopyMode = False
        Selection.Cut
        Range("A:A").Select
        Selection.Insert Shift:=xlToRight
    
    promo = InputBox("Salva Con Nome") & ".csv"
    
    
    Percorso = "S:Preordini Preas_Pdv"
    
    ActiveWorkbook.SaveAs Filename:=Percorso & promo, FileFormat:=xlCSV
    
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    
    End Sub



  • di lepat (utente non iscritto) data: 21/08/2014 17:55:15

    prova così
     
    Private Sub cmdCaricapromo_Click()
    Dim Unione As Range
    Dim c1, c2, c3 As Range
    Dim wb As Workbook
    Dim FinalRow As Long
    Dim Percorso As String, promo As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("K4:K" & FinalRow) = Array(1292)
    Set c1 = Range("K4:K" & FinalRow)
    Set c2 = Range("A4:A" & FinalRow)
    Set c3 = Range("J4:J" & FinalRow)
    Set Unione = Union(c1, c2, c3)
    Unione.Copy
    Set wb = Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues
    With ActiveSheet
        .Range("C:C").Select
        Application.CutCopyMode = False
        Selection.Cut
        .Range("A:A").Select
        Selection.Insert Shift:=xlToRight
    End With
    promo = InputBox("Salva Con Nome") & ".csv"
    Percorso = "S:Preordini Preas_Pdv"
    ActiveWorkbook.SaveAs Filename:=Percorso & promo, FileFormat:=xlCSV
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub


  • metodo union + workbooks.add
    di nicola (utente non iscritto) data: 21/08/2014 18:10:07

    Grande lepat.....

    grazaieee millleeee...

    Mi pui spigare gentilmente cosa sbagliavo....



  • di Grograman data: 22/08/2014 09:09:45

    Non che abbia nulla contro il metodo union, ma in questo caso due domande:

    - Perchè scrivere "1292" nel file di origine e non direttamente nel file finale?
    - Perchè non copiare direttamente le colonne utili nell'ordine che piiù ci aggrada?

    A seguire codice con un paio di variabili per vedere come utilizzare meglio la paternità degli oggetti
     
    Option Explicit
    Private Sub cmdCaricapromo_Click()
      Dim wbFrom As Workbook, wbTo As Workbook
      Dim wsFrom As Worksheet, wsTo As Worksheet
      Dim FinalRow As Long
      Dim Percorso As String, promo As String
      
      With Application
        .ScreenUpdating = False
        .EnableEvents = False
      End With
      
      Set wbFrom = ThisWorkbook
      Set wsFrom = wbFrom.Worksheets(1)
      Set wbTo = Application.Workbooks.Add
      Set wsTo = wbTo.Worksheets(1)
      
      'come la volta scorsa, se di default crei un .xls invece che un .xlsx/xlsm potresti incasinarti
      FinalRow = wsFrom.Cells(wsFrom.Rows.Count, 1).End(xlUp).Row '''''''''''''''''''''''''''''''''''
      
      wsTo.Range("A1:A" & FinalRow - 3) = 1292
      wsTo.Range("B1:B" & FinalRow - 3) = wsFrom.Range("J4:J" & FinalRow).Value
      wsTo.Range("C1:C" & FinalRow - 3) = wsFrom.Range("A4:A" & FinalRow).Value
    
      promo = InputBox("Salva Con Nome") & ".csv"
      Percorso = "S:Preordini Preas_Pdv"
      wbTo.SaveAs Filename:=Percorso & promo, FileFormat:=xlCSV
      
      With Application
        .ScreenUpdating = True
        .EnableEvents = True
      End With
      
      Set wbFrom = Nothing
      Set wsFrom = Nothing
      Set wbTo = Nothing
      Set wsTo = Nothing
    End Sub
    
    



  • di Grograman data: 22/08/2014 09:11:56

    Versione didattica con richiamo a routine dedicata per l'accensione o meno delle proprietà dell'application
     
    Option Explicit
    Private Sub cmdCaricapromo_Click()
      Dim wbFrom As Workbook, wbTo As Workbook
      Dim wsFrom As Worksheet, wsTo As Worksheet
      Dim FinalRow As Long
      Dim Percorso As String, promo As String
      
      Call Accendi(False)
      
      Set wbFrom = ThisWorkbook
      Set wsFrom = wbFrom.Worksheets(1)
      Set wbTo = Application.Workbooks.Add
      Set wsTo = wbTo.Worksheets(1)
      
      'come la volta scorsa, se di default crei un .xls invece che un .xlsx/xlsm potresti incasinarti
      FinalRow = wsFrom.Cells(wsFrom.Rows.Count, 1).End(xlUp).Row '''''''''''''''''''''''''''''''''''
      
      wsTo.Range("A1:A" & FinalRow - 3) = 1292
      wsTo.Range("B1:B" & FinalRow - 3) = wsFrom.Range("J4:J" & FinalRow).Value
      wsTo.Range("C1:C" & FinalRow - 3) = wsFrom.Range("A4:A" & FinalRow).Value
    
      promo = InputBox("Salva Con Nome") & ".csv"
      Percorso = "S:Preordini Preas_Pdv"
      wbTo.SaveAs Filename:=Percorso & promo, FileFormat:=xlCSV
      
      Call Accendi(True)
      
      Set wbFrom = Nothing
      Set wsFrom = Nothing
      Set wbTo = Nothing
      Set wsTo = Nothing
    End Sub
    
    Sub Accendi(ByVal bApp As Boolean)
      With Application
        .ScreenUpdating = bApp
        .EnableEvents = bApp
      End With
    End Sub
    


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 10:25:43

    Grazie Grograman per la spiegazione .....

    infatti preferisco il tuo codice piu tosto che il mio...in quanto vai ad eliminare dei passaggi di codice inutili

    Grazie mille





  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 10:52:12

    Ciao Grograman

    una domanda

    Quando salvo il file in csv mi perde gli zeri:::::

    Come posso risolvere:::::::Attraverso una formattazione della colonna b????



  • di Grograman data: 22/08/2014 11:02:43

    Urca il salvatagigo non l'ho provato.... ci provolo!



  • di Grograman data: 22/08/2014 11:06:28

    Uhm... menti sapendo di mentire?
    Non rilevo problemi sugli zeri, ecco un estratto dal csv creato aperto in notepad++:

    1292,-6,1
    1292,-10,2
    1292,15,3
    1292,-4,4
    1292,13,5
    1292,0,6
    1292,13,7
    1292,15,8
    1292,-24,9
    1292,33,10
    1292,-12,11
    1292,6,12
    1292,10,13
    1292,-1,14
    1292,27,15
    1292,45,16
    1292,2,17
    1292,44,18
    1292,17,19
    1292,-5,20


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 11:12:45

    1292,90169,-6
    1292,90170,-10
    1292,12128,15
    1292,12114,-4
    1292,12110,13
    1292,12115,0
    1292,12122,13
    1292,9588,15
    1292,12129,-24
    1292,90186,33
    1292,12116,-12
    1292,31401,6
    1292,90204,10
    1292,12245,-1
    1292,9587,27
    1292,90203,45
    1292,90168,2
    1292,3025,44
    1292,3024,17
    1292,90167,-5
    1292,9565,43
    1292,9585,20
    1292,3021,26
    1292,9589,30
    1292,3030,0
    1292,90185,33
    1292,31400,17
    1292,9566,33
    1292,45008,175

    La seconda colonna è composta di 6 numeri compresi gli zero



    magari mentissi



  • di Grograman data: 22/08/2014 11:16:32

    Ehehe mentre rispondevi ci ero arrivato, io avevo usato dati inventati ecco perchè non vedevo il problema.

    Basta mettere in formato corretto la colonna C!
     
      wsTo.Range("A1:A" & FinalRow - 3) = 1292
      wsTo.Range("B1:B" & FinalRow - 3) = wsFrom.Range("J4:J" & FinalRow).Value
      wsTo.Range("C1:C" & FinalRow - 3) = wsFrom.Range("A4:A" & FinalRow).Value
      wsTo.Range("C1:C" & FinalRow - 3).NumberFormat = "000000" 'RIGA AGGIUNTA



  • di Grograman data: 22/08/2014 11:20:35

    P.S. ovviamente il mio ultimo codice è sbagliato... la formattazione come hai scritto va fatta su B non su C...


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 11:34:57



    Grazieeeeee

    per ora non ti stresso piuuuu

    NB per ora


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 11:45:51

    Cavolooooo

    ho notato ora che se vado a filtrare e quindi nascondere le Q,tà negative ...mi importa tutto comunque ....

    Hai una soluzione

    Ps...avevo ragione quando ho detto per ora



  • di Grograman (utente non iscritto) data: 22/08/2014 12:16:18

    Non era specificato che i dati potevano essere filtrati prima dell'esportazione

    Non lasciarti spaventare dal fatto che mantiene la formattazione, una volta chiuso e riaperto è un normale file di testo il csv prodotto:
     
    Private Sub cmdCaricapromo_Click()
      Dim wbFrom As Workbook, wbTo As Workbook
      Dim wsFrom As Worksheet, wsTo As Worksheet
      Dim FinalRow As Long
      Dim Percorso As String, promo As String
      Dim rC1 As Range
      
      Call Accendi(False)
      
      Set wbFrom = ThisWorkbook
      Set wsFrom = wbFrom.Worksheets(1)
      Set wbTo = Application.Workbooks.Add
      Set wsTo = wbTo.Worksheets(1)
      
      'come la volta scorsa, se di default crei un .xls invece che un .xlsx/xlsm potresti incasinarti
      FinalRow = wsFrom.Cells(wsFrom.Rows.Count, 1).End(xlUp).Row '''''''''''''''''''''''''''''''''''
      
      ''COPIO CELLE VISIBILI COLONNA A
      Set rC1 = wsFrom.Range("A4:A" & FinalRow)
      rC1.SpecialCells(xlCellTypeVisible).Copy Destination:=wsTo.Range("B1")
      
      ''COPIO CELLE VISIBILI COLONNA J
      Set rC1 = wsFrom.Range("J4:J" & FinalRow)
      rC1.SpecialCells(xlCellTypeVisible).Copy Destination:=wsTo.Range("C1")
      
      ''RICALCOLO ULTIMA RIGA SU NUOVO FILE
      FinalRow = wsTo.Cells(wsTo.Rows.Count, 2).End(xlUp).Row
      wsTo.Range("A1:A" & FinalRow) = 1292
      wsTo.Range("B1:B" & FinalRow).NumberFormat = "000000"
    
      
      promo = InputBox("Salva Con Nome") & ".csv"
      Percorso = "S:Preordini Preas_Pdv"
      Percorso = "C:ProveFiles"
      wbTo.SaveAs Filename:=Percorso & promo, FileFormat:=xlCSV
      
      'PERSONALMENTE AGGIUNGEREI CHIUSURA DEL FILE E POSIZIONAMENTO SU CARTELLA IN CUI E' SALVATO:
      wbTo.Close vbNo
      Call Shell("Explorer.exe " & Percorso, vbNormalNoFocus)
      
      Call Accendi(True)
      
      Set wbFrom = Nothing
      Set wsFrom = Nothing
      Set wbTo = Nothing
      Set wsTo = Nothing
    End Sub
    
    Sub Accendi(ByVal bApp As Boolean)
      With Application
        .ScreenUpdating = bApp
        .EnableEvents = bApp
      End With
    End Sub


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 12:33:35

    Che figo questo codice......bravissimo

    Solo una cosa ...la formattazione in un unica colonna non va bene
    1292,012128,15
    1292,012110,13
    1292,012122,13
    1292,009588,15
    1292,090186,33
    1292,031401,6
    1292,090204,10
    1292,009587,27
    1292,090203,45
    1292,090168,2
    1292,003025,44
    1292,003024,17
    1292,009565,43
    1292,009585,20
    1292,003021,26
    1292,009589,30
    1292,090185,33

    Mi occorre come prima ossia all'apertura del file avere 3 colonne distinte

    Non so se mi sono spigato





  • di Grograman data: 22/08/2014 12:46:37

    Ni.
    Se salvi come CSV avrai sempre un unica colonna.
    Lo dice il nome stesso "Comma separated values".
    In pratica un file di testo....

    O lo salvi come xls o ti fai un importazione da testo o un testo in colonne!


  • Metodo find + attivazione foglio
    di Nicola (utente non iscritto) data: 22/08/2014 13:03:33

    Risoltoooo...ho capito ora il ragionamento ....In pratica salvavo in csv....ma nel visualizzare il file tenevo la formattazione con le 3 colonne .....Chiaramente solo visibile, in quanto il csv come dici bene tu è in un unica colonna....

    Grazie millllle....

    Per oggi finito di stressarti....

    Finalmente in ferie una settimana.....

    A presto ...sei stato bravissimo