Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di leomac
    Registrato dal
    Mar 2009
    Messaggi
    188

    [VB6/Excell] Muoversi in un foglio Excell

    Salve a tutti
    Volevo sapere se era possibile spostarsi all'interno di un foglio Excell tramite non comandi Range.Select, ma tramite semplici operazioni matematiche.
    Spiego meglio: Mi trovo all'interno di un data base Excell, all'interno del quale è presente un codice che è diverso per ogni cliente. Accanto alla casella del codice ho il nome del cliente, sotto il luogo in cui è l'azienda e poi sempre accanto altri dati.
    In pratica:

    000154(1A);Gino(1B);Carote(1C)
    Firenze(2B)
    000155(3A);Luigi(3B);Mele(3C)
    Roma(4B)

    con Roma(4B) => 4 = riga; B = colonna

    Per ogni cliente è necessario stampare un modulo. Faccio ciò copiando e incollando tali dati dal data base ad un altro folgio excell in cui è gia presente il layout del modulo. Tramite quindi copia/incolla completo tale modulo e poi cancello i dati inseriti. In pratica parlando in VB6 userei:

    codice:
    ' Dal Foglio DATA BASE, seleziona il CODICE CLIENTE e copiami il contenuto in PROSPETTI
        Worksheets("DATA BASE").Range("B462").Copy
        Worksheets("PROSPETTI").Range("Q1").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    ' Dal Foglio DATA BASE, seleziona il CLIENTE e copiami il contenuto in PROSPETTI
        Worksheets("DATA BASE").Range("C462:C463").Copy
        Worksheets("PROSPETTI").Range("M2:M3").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    ' Dal Foglio DATA BASE, seleziona la ZONA e copiami il contenuto in PROSPETTI
        Worksheets("DATA BASE").Range("E462:E463").Copy
        Worksheets("PROSPETTI").Range("A10:A11").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    ' Dal Foglio DATA BASE, seleziona il LUOGO e copiami il contenuto in PROSPETTI
        Worksheets("DATA BASE").Range("G462:AT463").Copy
        Worksheets("PROSPETTI").Range("A12:B51").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
    'Ritorna a DATA BASE, seleziona la casella e copiami il contenuto.
        Worksheets("DATA BASE").Range("F463").Copy
        Worksheets("PROSPETTI").Range("B6").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    ' Selezionami il folgio del PROSPETTO di interesse e stampami quello che ho selezionato due volte
        Sheets("PROSPETTI").Select
        Range("A1:Q56").Select
        Application.CutCopyMode = False
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"
    ' Cancellami solo il testo che prima avevo inserito in PROSPETTI
        Worksheets("PROSPETTI").Range("Q1","M2:M3","A10:A11","R12:S51","A12:B51","B6").ClearContents
    Il punto è che di clienti ce ne sono più di 2000 di conseguenza dovrei creare 2000 macro con tutti i range diversi. E al sol pensiero ho già i crampi alla mano. VVoVe:
    Di conseguenza avrei pensato a fare un unica macro che tramite il comando
    Cells.Find(What:="000154").Activate
    trovi prima la cella corrispondente selezionandola e poi da questa, tramite dei comandi Moveleft, Movedown, se ne vada in giro a copiare/incollare il tutto.
    A questo punto quindi mi servirebbero solo due macro una con box con comando trova che una volta trovato il codice si collega all'altra macro del copia incolla, che è uguale per tutti in quanto il data base presenta la stessa simmetria per tutti i clienti. Spero sia stato chiaro.
    Qundi in conclusione come posso muovermi all'interno del foglio senza utilizzare delle "coordinate" per ogni singola cella??

  2. #2
    Utente di HTML.it L'avatar di leomac
    Registrato dal
    Mar 2009
    Messaggi
    188
    In pratica avrei risolto con il codice

    ActiveCell.Offset(0, 1).Activate

    il quale dalla cella selezionata con .Find, si muove da cella a cella cambiando i numeri di riga e colonna presenti tra parentesi. Ora però mi trovo difronte ad altro problema. Infatti dovrei cambiare il codice:

    Worksheets("DATA BASE").Range("G462:AT463").Copy

    con ActiveCell.Offset. Ma il range da G ad AT è abbastanza ampio e quindi dovrei ripetere per una ventina di volte il comando Active e cambiando naturalmente anche il range del paste special. In pratica:
    codice:
    ActiveCell.Offset(0, 1).Copy
    Worksheets("PROSPETTI").Range("A12").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
    
    ActiveCell.Offset(0, 2).Copy
    Worksheets("PROSPETTI").Range("A13").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
    ....
    E' possibile ampliare il range di ActiveCell.Offset in modo da andarmi a copiare un'intera zona?? Oppure devo proprio cambiare comando?

    Grazie

  3. #3
    Utente di HTML.it L'avatar di leomac
    Registrato dal
    Mar 2009
    Messaggi
    188

    Chiarimenti ActiveCell.Offset

    .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.