Condividi tramite

Macro per archiviare dati di una bolla

Anonimo
2021-06-09T09:30:26+00:00

Buongiorno a tutti,

purtrroppo dopo 20 anni dai trascorsi scolastici faccio un po'fatica a fare certe cose su vba e chiedo consiglio a voi.

premessa: ho un file che riproduce una sorta di bolla da accompagnamento che i ragazzi compilano nei vari campi.

Inoltre ho un secondo file che si chiama DB che mi ripropone diversi di questi campi su una singola riga. All'attivo ci sono già tanti record di tante bolle.

Ho scritto la prima macro che si chiama "cattura", dove ho definito una qunidicina di variabili e ho memorizzato i valori delle celle in queste variabili, in modo da inviare e gestire i dati con nomi piuttosto che con celle (un po'macchinoso ma non sono proprio dentro ai loro processi, ho preferito fare un passaggio in più).

4 variabili a titolo di esempio: "data" - "company" - "codice" - "destinatario"

adesso che devo scrivere la seconda macro ma sto andando un po'nel panico....in pratica questa macro deve:

  • aprire l'altro file excel che si trova in un altro percorso di rete
  • posizionarsi sulla prima cella della colonna A che trova libera
  • incollare il valore della variabile "data" nella colonna A prima cella libera, il valore della colonna "company" nella colonna C prima cella libera, e così via. (Ho scritto colonna A e colonna C giusto perchè vorrei definire io dove scrivere. L'importante è che se la macro scrive "data" su A50, poi mi scriva company su C50.

grazie del vostro tempo

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

13 risposte

Ordina per: Più utili
  1. Anonimo
    2021-06-09T12:18:38+00:00

    Ciao Germano2283,

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    Dim Data As String

    Dim company As String

    Dim code As Variant

    Dim destinatario As String

    Dim via As String

    Dim cap As String

    Dim città As String

    Dim stato As String

    Dim ncolli As String

    Dim peso As String

    'vari bancali

    Dim misure1 As String

    Dim misure2 As String

    Dim misure3 As String

    Dim misure4 As String

    Dim misure5 As String

    Dim misure6 As String

    Dim misure7 As String

    Dim quantità1 As Long

    Dim quantità2 As Long

    Dim quantità3 As Long

    Dim quantità4 As Long

    Dim quantità5 As Long

    Dim quantità6 As Long

    Dim quantità7 As Long

    Dim tipo_trasporto As String

    Dim n_ordine As Long

    Dim compilatore As String

    Dim n_mandato As String

    '-------->>

    Public Sub Cattura()

    Dim srcWB As Workbook 
    
    Dim srcSH As Worksheet 
    
    Set srcWB = ThisWorkbook 
    
    Set srcSH = srcWB.Sheets(1) 
    
    With srcSH 
    
        Data = .Range("c18").Value 
    
        company = .Range("c15").Value 
    
        destinatario = .Range("d32").Value 
    
        code = .Range("h31").Value 
    
        via = .Range("c33").Value 
    
        cap = .Range("d34").Value 
    
        città = .Range("h34").Value 
    
        stato = .Range("f35").Value 
    
        ncolli = .Range("c28").Value 
    
        peso = .Range("c30").Value 
    
        misure1 = .Range("c36").Value 
    
        misure2 = .Range("c37").Value 
    
        misure3 = .Range("c38").Value 
    
        misure4 = .Range("c39").Value 
    
        misure5 = .Range("c40").Value 
    
        misure6 = .Range("c41").Value 
    
        misure7 = .Range("c42").Value 
    
        quantità1 = .Range("d36").Value 
    
        quantità2 = .Range("d37").Value 
    
        quantità3 = .Range("d38").Value 
    
        quantità4 = .Range("d39").Value 
    
        quantità5 = .Range("d40").Value 
    
        quantità6 = .Range("d41").Value 
    
        quantità7 = .Range("d42").Value 
    
        tipo\_trasporto = .Range("c4").Value 
    
        n\_ordine = .Range("c3").Value 
    
        compilatore = .Range("c17").Value 
    
        n\_mandato = .Range("i4").Value + 1 
    
    End With 
    
    MsgBox ("Dati Catturati") 
    
    Call Trascivere\_Dati 
    

    End Sub

    '-------->>

    Public Sub Trascivere_Dati()

    Dim destWB As Workbook 
    
    Dim destSH As Worksheet 
    
    Dim destRng As Range 
    
    Dim arrDati As Variant 
    
    Dim FD As FileDialog 
    
    Dim sFile As String 
    
    Dim LRow As Long 
    
    Const sColonne\_di\_Destinazione As String = "A:AD" 
    
    Set FD = Application.FileDialog(msoFileDialogFilePicker) 
    
    With FD 
    
        .Filters.Clear 
    
        .Filters.Add "Excel Files", "\*.xlsx?", 1 
    
        .Title = "Choose an Excel file" 
    
        .AllowMultiSelect = False 
    
        .InitialFileName = ThisWorkbook.Path 
    
        If .Show = True Then 
    
            sFile = .SelectedItems(1) 
    
        Else 
    
            Call MsgBox(Prompt:="Non hai selezionato il file di destinazione!", \_ 
    
                Buttons:=vbCritical, \_ 
    
                Title:="REPORT") 
    
            Exit Sub 
    
        End If 
    
    End With 
    
    Set destWB = Workbooks.Open(sFile) 
    
    Set destSH = destWB.Sheets(1) 
    
    With destSH 
    
        LRow = LastRow(destSH) 
    
        Set destRng = Intersect(.Range(sColonne\_di\_Destinazione), .Rows(LRow + 1)) 
    
    End With 
    
    arrDati = VBA.Array(Data, company, destinatario, code, via, cap, città, stato, \_ 
    
    ncolli, peso, misure1, misure2, misure3, misure4, misure5, misure6, misure7, \_ 
    
    quantità1, quantità2, quantità3, quantità4, quantità5, quantità6, quantità7, \_ 
    
    tipo\_trasporto, n\_ordine, compilatore, n\_mandato) 
    

    destRng.Value = arrDati

    destWB.Close SaveChanges:=True

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

    Optional rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If rng Is Nothing Then 
    
        Set rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = rng.Find(What:="\*", \_ 
    
        After:=rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow < minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '<<========

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento
  2. Anonimo
    2021-06-09T10:44:14+00:00
    Variabile colonna
    data a
    company b
    code c
    destinatario d
    via e
    cap f
    città g
    stato h
    ncolli i
    peso j
    Misure1 k
    Quantità1 l
    Misure2 m
    Quantità2 n
    Misure3 o
    Quantità3 p
    Misure4 q
    Quantità4 r
    Misure5 s
    Quantità5 t
    Misure6 u
    Quantità6 v
    Misure7 w
    Quantità7 x
    tipo_trasporto y
    n_ordine z
    compilatore aa
    n_mandato ab
    COSTO ac
    NOTE ad

    Questo è il record che devo salvare nel DB. Ho inserito le colonne "costo" e "note"ma sono campi che vengono inseriti a mano dopo aver salvato il record.

    grazie

    0 commenti Nessun commento
  3. Anonimo
    2021-06-09T10:22:14+00:00

    Ciao Germano2283,

    [...]

    • incollare il valore della variabile "data" nella colonna A prima cella libera, il valore della colonna "company" nella colonna C prima cella libera, e così via. (Ho scritto colonna A e colonna C giusto perchè vorrei definire io dove scrivere.

    [...]

    Per creare la seconda macro, sarà necessario stabilire le colonne di destinazione per ciascuna delle 28 variabili.

    ===

    Regards,

    Norman

    0 commenti Nessun commento
  4. Anonimo
    2021-06-09T09:50:34+00:00

    Sub Cattura()

    Dim Data As String

    Dim company As String

    Dim code As Variant

    Dim destinatario As String

    Dim via As String

    Dim cap As String

    Dim città As String

    Dim stato As String

    Dim ncolli As String

    Dim peso As String

    'vari bancali

    Dim misure1 As String

    Dim misure2 As String

    Dim misure3 As String

    Dim misure4 As String

    Dim misure5 As String

    Dim misure6 As String

    Dim misure7 As String

    Dim quantità1 As String

    Dim quantità2 As String

    Dim quantità3 As String

    Dim quantità4 As String

    Dim quantità5 As String

    Dim quantità6 As String

    Dim quantità7 As String

    Dim tipo_trasporto As String

    Dim n_ordine As String

    Dim compilatore As String

    Dim n_mandato As String

    Data = Range("c18").Value

    company = Range("c15").Value

    destinatario = Range("d32").Value

    code = Range("h31").Value

    via = Range("c33").Value

    cap = Range("d34").Value

    città = Range("h34").Value

    stato = Range("f35").Value

    ncolli = Range("c28").Value

    peso = Range("c30").Value

    misure1 = Range("c36").Value

    misure2 = Range("c37").Value

    misure3 = Range("c38").Value

    misure4 = Range("c39").Value

    misure5 = Range("c40").Value

    misure6 = Range("c41").Value

    misure7 = Range("c42").Value

    quantità1 = Range("d36").Value

    quantità2 = Range("d37").Value

    quantità3 = Range("d38").Value

    quantità4 = Range("d39").Value

    quantità5 = Range("d40").Value

    quantità6 = Range("d41").Value

    quantità7 = Range("d42").Value

    tipo_trasporto = Range("c4").Value

    n_ordine = Range("c3").Value

    compilatore = Range("c17").Value

    n_mandato = Range("i4").Value + 1

    MsgBox ("Dati Catturati")

    End Sub

    0 commenti Nessun commento
  5. Anonimo
    2021-06-09T09:41:08+00:00

    Ciao Germano2283,

    purtrroppo dopo 20 anni dai trascorsi scolastici faccio un po'fatica a fare certe cose su vba e chiedo consiglio a voi.

    premessa: ho un file che riproduce una sorta di bolla da accompagnamento che i ragazzi compilano nei vari campi.

    Inoltre ho un secondo file che si chiama DB che mi ripropone diversi di questi campi su una singola riga. All'attivo ci sono già tanti record di tante bolle.

    Ho scritto la prima macro che si chiama "cattura", dove ho definito una qunidicina di variabili e ho memorizzato i valori delle celle in queste variabili, in modo da inviare e gestire i dati con nomi piuttosto che con celle (un po'macchinoso ma non sono proprio dentro ai loro processi, ho preferito fare un passaggio in più).

    4 variabili a titolo di esempio: "data" - "company" - "codice" - "destinatario"

    adesso che devo scrivere la seconda macro ma sto andando un po'nel panico....in pratica questa macro deve:

    • aprire l'altro file excel che si trova in un altro percorso di rete
    • posizionarsi sulla prima cella della colonna A che trova libera
    • incollare il valore della variabile "data" nella colonna A prima cella libera, il valore della colonna "company" nella colonna C prima cella libera, e così via. (Ho scritto colonna A e colonna C giusto perchè vorrei definire io dove scrivere. L'importante è che se la macro scrive "data" su A50, poi mi scriva company su C50.

    Ti chiederei gentilmente di pubblicare il codice della macro Cattura.

    ===

    Regards,

    Norman

    0 commenti Nessun commento