Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Inserire Macro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Inserire Macro

Postdi nicola_na78 » 14/11/19 11:39

Ciao a tutti, esporto da gestionale un foglio excel rinominato "anagrafica" all'interno di "Foglio1" dovrei inserire automaticamente questo codice:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = ActiveCell.Address Then
        confronto = ActiveCell.Address
        cella = Len(ActiveCell.Address) - 3
        rigo = Right(ActiveCell.Address, cella)
       
For i = 2 To Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row
       If Cells(rigo, "M") = Sheets("Foglio2").Cells(i, 1) Then
            Sheets("MA_Items").Cells(rigo, "L") = Sheets("Foglio2").Cells(i, 2)
       End If
       
       Next
       
End If
End Sub


Mi dite come posso fare?
grazie a tutti :-)

Win10
office2016
nicola_na78
Utente Senior
 
Post: 177
Iscritto il: 11/06/10 15:26

Sponsor
 

Re: Inserire Macro

Postdi Anthony47 » 14/11/19 16:22

Teoricamente si puo' inserire tramite macro una macro in un file esistente, ma il mio suggerimento e' di partire da un file vuoto (che funzionera' da "modello"), che gia' contiene quella macro (parlo della Worksheet_Change) piu' un'altra Sub Importa che si occupa di aprire il file "Anagrafica.xlsx", copiare il contenuto del suo Foglio1 nel tuo Foglio1, chiudere "Anagrafica.xlsx", salvare il tuo file con un nuovo nome (lasciando quindi intatto il file "modello"
Secondo me puoi benissimo ottenere la Sub Importa registrandola in proprio; per cominciare guarda qui: viewtopic.php?f=26&t=103893&p=622593#p622593

E se non risolvi allora pubblica quello che hai ottenuto e spiega dove ti sei arenato, e vedremo di risolvere insieme.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16610
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserire Macro

Postdi nicola_na78 » 15/11/19 13:16

Ciao Anthony, grazie per aver risposto.
ho fatto nel seguente modo:

Codice: Seleziona tutto
Sub InserisciModulo()

ChDrive "C"
ChDir "C:\cartel\"
Modulo = Dir("Foglio1.cls")
Application.ScreenUpdating = False
Application.EnableEvents = False
Call ImportModule(Modulo)
CodeFile = True
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
Sub ImportModule(Modulo As Variant)

ActiveWorkbook.VBProject.VBComponents.import Modulo
ActiveWorkbook.VBProject.vb
Application.Visible = True

End Sub

il modulo lo inserisce, ma lo mette nella cartella moduli di classe invece di sovrascrivere il modulo "Foglio1".

Grazie.
nicola_na78
Utente Senior
 
Post: 177
Iscritto il: 11/06/10 15:26

Re: Inserire Macro

Postdi Anthony47 » 15/11/19 20:07

Quindi tu pensi che invece di copiare dei dati da un foglio Excel a un altro sia piu' semplice importarne le macro? Come vedi non lo e' perche' parliamo dei moduli vba dei fogli di lavoro.
Anzi, tra copiare i dati su un foglio gia' con macro, copiare le macro da un workbook a un altro, o importare le macro da un file .cls hai scelto (sempre nel caso in oggetto) la via piu' complicata...

Se vuoi lavorare partendo dal file .cls (quello ottenuto esportando le macro da un file che le contiene) allora devi sapere che non si puo' fare in modo diretto: va prima creato l'evento da gestire (ogni evento da gestire) e al suo interno vanno posizionate le linee di codice.

Un esempio:
Codice: Seleziona tutto
Sub InserisciSheetModuleDaFile()
Dim Modulo As String, DeSh As String, PreL As String
Dim RigaF, InCode As Boolean, LineCtr As Long
'
Modulo = "D:\DDocs\Pippo_Foglio1.cls"           '<<< Percorso e Nome del modulo
DeSh = Sheets("Foglio1").CodeName               '<<< Nome del foglio di destinazione
'
FreeF = FreeFile()
Open Modulo For Input As #FreeF
With ActiveWorkbook.VBProject.VBComponents(DeSh).CodeModule
    Do While Not EOF(FreeF)
        Line Input #FreeF, RigaF
        Debug.Print RigaF
        If InStr(1, RigaF, "End Sub", vbTextCompare) = 1 Then
            InCode = False
            LineCtr = 0
        Else
            If InStr(1, RigaF, "_SelectionChange", vbTextCompare) > 0 Then
                InCode = True
                PreL = "'     "
                LineCtr = .CreateEventProc("SelectionChange", "Worksheet")        'Prepara l'evento Worksheet_SelectionChange
            ElseIf InStr(1, RigaF, "_Change", vbTextCompare) > 0 Then
                InCode = True
                PreL = "'     "
                LineCtr = .CreateEventProc("Change", "Worksheet")                 'Prepara l'evento Worksheet_cHANGE
            ElseIf InStr(1, RigaF, "_Activate", vbTextCompare) > 0 Then
                InCode = True
                PreL = "'     "
                LineCtr = .CreateEventProc("Activate", "Worksheet")               'Prepara l'evento Worksheet_Activate
            ElseIf InStr(1, RigaF, "_altroEvento", vbTextCompare) > 0 Then      'Preparazione altri eventi
                InCode = True
                PreL = "'     "
                LineCtr = .CreateEventProc(tipoEvento, tipoOggetto)
            ElseIf InStr(1, RigaF, "_AltroEvento", vbTextCompare) > 0 Then      'Preparazione altri eventi
               
            End If
        End If
        If InCode Then
            LineCtr = LineCtr + 1
            .InsertLines LineCtr, PreL & RigaF
            PreL = ""
        End If
    Loop
End With
Close #FreeF
End Sub

Le righe marcate <<< vanno personalizzate come da commento

Dopo aver inserito il codice in un file di servizio devi rendere attivo il file che contiene il foglio su cui vuoi aggiungere le macro e lanciare la Sub InserisciSheetModuleDaFile

Tieni presente che in questo modo non potrai inserire dichiarazioni in testa al modulo

Rimango convinto che quanto avevo suggerito nel primo post sia piu' semplice.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16610
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Inserire Macro":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti