Condividi:        

Duplicare un file

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

Duplicare un file

Postdi Baddiu » 04/01/18 21:10

Ciao a tutti, utilizzo un file excel che mi crea tanti fogli quanti sono i giorni del mese nominandomeli con la data, a fine mese mi chiede se voglio creare un nuovo file col mese successivo. Fino a oggi ho utilizzato un pc windows e tutto funzionava; ora utilizzo un mac con office originale per mac e quando mi chiede di creare il nuovo file mi dice errore foglio n riga n...
Io non sono tanto pratico di macro ma credo che le istruzioni siano queste

'MsgBox ("Dupplicare il file per il mese diverso!!!")
If InputBox("Dupplicare il file? [S/N]") = "S" Then
Call FoglioNuovoMese(DataToMyString(Data_Foglio_New))
End If

Exit For
End If
Next

Exit Sub

Errore:
MsgBox "Foglio n " & Count_Foglio & " Riga n " & Count_Riga
MsgBox Msg, , "Errore", Err.HelpFile, Err.HelpContext


End Sub




Mi sapete aiutare?
Grazie
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Sponsor
 

Re: Duplicare un file

Postdi wallace&gromit » 04/01/18 21:31

Questa è solo la parte finale del codice, prova a pubblicare tutto che magari si capisce dov'è l'inghippo. L'unica cosa che vedo io è un next che non è seguito da una variabile (suppongo "n") . Non penso sia necessariamente un errore ma potrebbe essere un primo oggetto da analizzare.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Duplicare un file

Postdi Baddiu » 05/01/18 12:38

Ho messo tutto il codice.


Codice: Seleziona tutto
Sub Calcolo_Tot_Lotti_Art_Mese()

Dim Foglio_Giorno As Worksheet
Dim UltimoFoglio As Worksheet
Dim Foglio_Riepilogo As Worksheet
Dim Kg_Mese() As Variant
Dim Count_Foglio, Count_Riga As Integer
Dim Data_Riassunto As Date
Dim Identificatore As String
Dim Lotto As String
Dim Cod_Prodotto As String
Dim Qta_kg As Long
Dim Riga_Dati As String
Dim DatoNull As Boolean
Dim Dati_Parziali As Boolean
Dim Count_Controllo As Integer
Dim Kg_Controllo() As Variant
Dim Foglio_Controllo As Worksheet



On Error GoTo Errore 'inizio gestione errore

Set UltimoFoglio = Worksheets.Item(Worksheets.Count)

If Foglio_Esistente("RIEPILOGO") = False Then
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "RIEPILOGO"
End If

ReDim Kg_Mese(4, 0)
ReDim Kg_Controllo(8, 0)

DatoNull = True
Dati_Parziali = False
Count_Controllo = 0
For Count_Foglio = 2 To Sheets.Count - 2                    'Analizza le schede
    Set Foglio_Giorno = Worksheets.Item(Count_Foglio)       'Analizza le righe
    Foglio_Giorno.Activate
    For Count_Riga = 4 To 27
        If Not (Count_Riga = 14 Or Count_Riga = 15 Or Count_Riga = 16 Or Count_Riga = 17) Then
            Cod_Prodotto = Strings.Format$(ActiveSheet.Range("A" & Count_Riga).Value)
            Lotto = Strings.Format$(ActiveSheet.Range("G" & Count_Riga).Value)
            Identificatore = Cod_Prodotto & "-" & Lotto
            Qta_kg = 0
            Qta_kg = ActiveSheet.Range("D" & Count_Riga).Value
            Riga_Dati = Conversion.CStr(Count_Foglio & "." & Count_Riga & "-")
            If Cod_Prodotto = "" Then
                If Lotto = "" And Qta_kg = 0 Then
                    Debug.Print "Foglio n " & Count_Foglio & " nella riga n " & Count_Riga & " riga vuota"
                Else
                    MsgBox "Verificare dati nel foglio '" & Foglio_Giorno.Name & "' riga nç " & Count_Riga
                    Dati_Parziali = True
                    'Exit Sub
                End If
            Else
                If (Not (Lotto = "")) And (Not (Qta_kg = 0)) Then
                    Call Aggiorna_Qta_kg(Kg_Mese(), Identificatore, Cod_Prodotto, Lotto, Qta_kg, Riga_Dati)
                    ReDim Preserve Kg_Controllo(8, 0 To Count_Controllo)
                    Kg_Controllo(0, Count_Controllo) = Strings.Format$(ActiveSheet.Range("A" & Count_Riga).Value)
                    Kg_Controllo(1, Count_Controllo) = Strings.Format$(ActiveSheet.Range("B" & Count_Riga).Value)
                    Kg_Controllo(2, Count_Controllo) = Strings.Format$(ActiveSheet.Range("C" & Count_Riga).Value)
                    Kg_Controllo(3, Count_Controllo) = Strings.Format$(ActiveSheet.Range("D" & Count_Riga).Value)
                    Kg_Controllo(4, Count_Controllo) = Strings.Format$(ActiveSheet.Range("E" & Count_Riga).Value)
                    Kg_Controllo(5, Count_Controllo) = Strings.Format$(ActiveSheet.Range("F" & Count_Riga).Value)
                    Kg_Controllo(6, Count_Controllo) = Strings.Format$(ActiveSheet.Range("G" & Count_Riga).Value)
                    Kg_Controllo(7, Count_Controllo) = Strings.Format$(ActiveSheet.Range("H" & Count_Riga).Value)
                    Kg_Controllo(8, Count_Controllo) = Strings.Format$(ActiveSheet.Range("I" & Count_Riga).Value)
                    Debug.Print Kg_Controllo(0, Count_Controllo) & "  " & Kg_Controllo(1, Count_Controllo) & "  " & Kg_Controllo(2, Count_Controllo) & "  " & Kg_Controllo(3, Count_Controllo) & "  " & Kg_Controllo(4, Count_Controllo) & "  " & Kg_Controllo(5, Count_Controllo) & "  " & Kg_Controllo(6, Count_Controllo) & "  " & Kg_Controllo(7, Count_Controllo) & "  " & Kg_Controllo(8, Count_Controllo)
                    Count_Controllo = Count_Controllo + 1
                Else
                    MsgBox "Verificare dati nel foglio '" & Foglio_Giorno.Name & "' riga nç " & Count_Riga
                    Dati_Parziali = True
                    'Exit Sub
                End If
            End If
        End If
    Next
Next

Set Foglio_Riepilogo = Worksheets.Item("RIEPILOGO")
Foglio_Riepilogo.Activate

Range("A1:E1000").ClearContents

If Dati_Parziali = True Then
    Range("A1:E1000").Interior.Color = RGB(255, 0, 0)
Else
    Range("A1:E1000").Interior.ColorIndex = xlNone
End If

ActiveSheet.Range("A1").Value = "Codice prodotto"
ActiveSheet.Range("B1").Value = "Lotto"
ActiveSheet.Range("C1").Value = "Kg"
ActiveSheet.Range("D1").Value = "Identificativo"
ActiveSheet.Range("E1").Value = "Origine dati"


For Count = 0 To UBound(Kg_Mese, 2)
    ActiveSheet.Range("A" & (Count + 2)).Value = Kg_Mese(1, Count)
    ActiveSheet.Range("B" & (Count + 2)).Value = Kg_Mese(2, Count)
    ActiveSheet.Range("C" & (Count + 2)).Value = Kg_Mese(3, Count)
    ActiveSheet.Range("D" & (Count + 2)).Value = "'" & Kg_Mese(0, Count)
    ActiveSheet.Range("E" & (Count + 2)).Value = Kg_Mese(4, Count)
Next

Range("A2:E" & (Count + 2)).Sort Key1:=Worksheets("RIEPILOGO").Columns("A"), Order1:=xlAscending, Key2:=Worksheets("RIEPILOGO").Columns("B"), Order2:=xlAscending

Set Foglio_Controllo = Worksheets.Item("CONTROLLO")

Foglio_Controllo.Activate

Range("A2:J1000").ClearContents

For Count = 0 To UBound(Kg_Controllo, 2)
    ActiveSheet.Range("A" & (Count + 2)).Value = Kg_Controllo(0, Count)
    ActiveSheet.Range("B" & (Count + 2)).Value = Kg_Controllo(1, Count)
    ActiveSheet.Range("C" & (Count + 2)).Value = Kg_Controllo(2, Count)
    ActiveSheet.Range("D" & (Count + 2)).Value = Kg_Controllo(3, Count)
    ActiveSheet.Range("E" & (Count + 2)).Value = Kg_Controllo(4, Count)
    ActiveSheet.Range("F" & (Count + 2)).Value = Kg_Controllo(5, Count)
    ActiveSheet.Range("G" & (Count + 2)).Value = Kg_Controllo(6, Count)
    ActiveSheet.Range("H" & (Count + 2)).Value = Kg_Controllo(7, Count)
    ActiveSheet.Range("I" & (Count + 2)).Value = Kg_Controllo(8, Count)
    ActiveSheet.Range("J" & (Count + 2)).Value = "'" & Kg_Controllo(0, Count) & "-" & Kg_Controllo(6, Count)
Next

Exit Sub

Errore:
    MsgBox "Foglio n " & Count_Foglio & " Riga n " & Count_Riga
    MsgBox Msg, , "Errore", Err.HelpFile, Err.HelpContext
   
End Sub


Codice: Seleziona tutto
Function Foglio_Esistente(Nome_Foglio As String) As Boolean

Dim Count As Integer
Dim Controllo_Foglio As Boolean

Controllo_Foglio = False

For Count = 1 To Sheets.Count
  If Strings.UCase(Sheets(Count).Name) = Strings.UCase(Nome_Foglio) Then
    Controllo_Foglio = True
    Exit For
  End If
Next

Foglio_Esistente = Controllo_Foglio

End Function




Codice: Seleziona tutto
Sub Aggiorna_Qta_kg(ByRef Kg_Mese() As Variant, Identificatore_Str As String, Cod_Prodotto_Str As String, Lotto_Str As String, Qta_kg_Str As Long, Riga_Dati_Str As String)

Dim Count As Long
Dim IdentificatoreDaArray As String
Dim QtaDaArray As Long
Dim RigaDatiDaArray As String
Dim CodiceTrovato As Boolean
Dim LunghezzaDistinta As Long

CodiceTrovato = False
LunghezzaDistinta = UBound(Kg_Mese, 2)

If LunghezzaDistinta = 0 And Kg_Mese(0, 0) = "" Then
    Kg_Mese(0, 0) = Identificatore_Str
    Kg_Mese(1, 0) = Cod_Prodotto_Str
    Kg_Mese(2, 0) = Lotto_Str
    Kg_Mese(3, 0) = Qta_kg_Str
    Kg_Mese(4, 0) = Riga_Dati_Str
    Debug.Print Kg_Mese(0, 0) & " " & Kg_Mese(1, 0) & " " & Kg_Mese(2, 0) & " " & Kg_Mese(3, 0) & " " & Kg_Mese(4, 0)
Else
    For Count = 0 To LunghezzaDistinta
        IdentificatoreDaArray = Kg_Mese(0, Count)
        If IdentificatoreDaArray = Identificatore_Str Then
            CodiceTrovato = True
            QtaDaArray = Kg_Mese(3, Count)
            RigaDatiDaArray = Kg_Mese(4, Count)
            Kg_Mese(3, Count) = QtaDaArray + Qta_kg_Str
            Kg_Mese(4, Count) = RigaDatiDaArray & Riga_Dati_Str
            Debug.Print Kg_Mese(0, Count) & " " & Kg_Mese(1, Count) & " " & Kg_Mese(2, Count) & " " & Kg_Mese(3, Count) & " " & Kg_Mese(4, Count)
            Exit For
        Else
            'Debug.Print "Codici identificativo da array diverso da quello passato alla sub"
        End If
    Next
    If CodiceTrovato = False Then
        ReDim Preserve Kg_Mese(4, 0 To Count)
        Kg_Mese(0, Count) = Identificatore_Str
        Kg_Mese(1, Count) = Cod_Prodotto_Str
        Kg_Mese(2, Count) = Lotto_Str
        Kg_Mese(3, Count) = Qta_kg_Str
        Kg_Mese(4, Count) = Riga_Dati_Str
        Debug.Print Kg_Mese(0, Count) & " " & Kg_Mese(1, Count) & " " & Kg_Mese(2, Count) & " " & Kg_Mese(3, Count) & " " & Kg_Mese(4, Count)
    End If
End If
End Sub



Codice: Seleziona tutto
Function Inserimento_Data(Data_Proposta As String) As String

Dim Data_Foglio As String
Dim Data_Verifica As Date

Dim Data_Foglio_Giorno As String
Dim Data_Foglio_Mese As String
Dim Data_Foglio_Anno As String

On Error GoTo GestioneErrori

Data_Foglio = InputBox("Inserire data nuovo foglio (gg-mm-aaaa)", "Data", Data_Proposta)

If Strings.Right(Strings.Left(Data_Foglio, 3), 1) = "-" And Strings.Left(Strings.Right(Data_Foglio, 5), 1) = "-" Then
    Data_Foglio_Giorno = CInt(Strings.Left(Data_Foglio, 2))
    Data_Foglio_Mese = CInt(Strings.Right(Strings.Left(Data_Foglio, 5), 2))
    Data_Foglio_Anno = CInt(Strings.Right(Data_Foglio, 4))
Else
    Data_Foglio = Inserimento_Data(Data_Proposta)
End If

Data_Verifica = CDate(Data_Foglio)

Inserimento_Data = Data_Foglio

Exit Function

GestioneErrori:

MsgBox ("La data non è stata inserita correttamente")

Inserimento_Data = "Errore"
 
End Function


Codice: Seleziona tutto
Function DataToMyString(Data As Date) As String

Dim Giorno As String
Dim Mese As String
Dim Anno As String

Dim DataString As String

Giorno = DatePart("d", Data)
Mese = DatePart("m", Data)
Anno = DatePart("yyyy", Data)

If Strings.Len(Giorno) = 1 Then
    Giorno = "0" + Giorno
End If

If Strings.Len(Mese) = 1 Then
    Mese = "0" + Mese
End If

DataString = Giorno + "-" + Mese + "-" + Anno

DataToMyString = DataString

End Function


Codice: Seleziona tutto
Function MyStringToData(StringData As String) As Date

Dim Data As Date

Data = CDate(Strings.Replace(StringData, "-", "/"))

MyStringToData = Data

End Function


Codice: Seleziona tutto
Sub CreaNuovoFoglio(Nome_Foglio As String, Riepilogo_Esiste As Boolean)

Dim Foglio_Nuovo As Worksheet

ActiveSheet.Copy after:=Sheets(Sheets.Count)
Set Foglio_Nuovo = Worksheets.Item(Worksheets.Count)

Call Formatta_Scheda_Prodotto(Foglio_Nuovo, Nome_Foglio)

If Riepilogo_Esiste Then
   Worksheets(Nome_Foglio).Move before:=Worksheets("RIEPILOGO")
End If
   

End Sub


Codice: Seleziona tutto
Sub Inserisci_Fogli_Mancanti()

Dim Foglio_Ultimo_Giorno As Worksheet
Dim Data_Ultimo_Foglio As Date
Dim Data_Foglio_Old As Date
Dim Data_Foglio_New As Date
Dim Data_Oggi As Date
Dim Count As Integer
Dim Fogli_Da_Aggiugere As Integer
Dim Riepilogo_Esiste As Boolean

On Error GoTo Errore 'inizio gestione errore

If Foglio_Esistente("RIEPILOGO") = False Then
    Set Foglio_Ultimo_Giorno = Worksheets.Item(Sheets.Count - 1)
    Riepilogo_Esiste = False
Else
    Set Foglio_Ultimo_Giorno = Worksheets.Item(Sheets.Count - 2)
    Riepilogo_Esiste = True
End If

Data_Ultimo_Foglio = MyStringToData(Foglio_Ultimo_Giorno.Name)
Data_Oggi = DateTime.Now


Debug.Print Data_Ultimo_Foglio
Debug.Print Data_Oggi

Fogli_Da_Aggiugere = DateTime.DateDiff("d", Data_Ultimo_Foglio, Data_Oggi)

Data_Foglio_New = Data_Ultimo_Foglio

For Count = 1 To Fogli_Da_Aggiugere
   
    Data_Foglio_Old = Data_Foglio_New
    Data_Foglio_New = DateTime.DateAdd("d", 1, Data_Foglio_New)
   
    Mese_Ultimo_Foglio = CInt(Strings.Right(Strings.Left(Data_Foglio_Old, 5), 2))
    Mese_Nuovo_Foglio = CInt(Strings.Right(Strings.Left(Data_Foglio_New, 5), 2))
   
    If Mese_Ultimo_Foglio = Mese_Nuovo_Foglio Then
        Foglio_Ultimo_Giorno.Activate
        Call CreaNuovoFoglio(DataToMyString(Data_Foglio_New), Riepilogo_Esiste)
    Else
        Debug.Print Mese_Ultimo_Foglio & " <> " & Mese_Nuovo_Foglio
       
        'MsgBox ("Dupplicare il file per il mese diverso!!!")
        If InputBox("Dupplicare il file? [S/N]") = "S" Then
            Call FoglioNuovoMese(DataToMyString(Data_Foglio_New))
        End If

        Exit For
    End If
Next



Exit Sub

Errore:
    MsgBox "Foglio n " & Count_Foglio & " Riga n " & Count_Riga
    MsgBox Msg, , "Errore", Err.HelpFile, Err.HelpContext
   

End Sub



Codice: Seleziona tutto
Sub FoglioNuovoMese(Data As String)

Dim Nome_File, Percorso As String
Dim Giorno, Mese, Anno As String
Dim Foglio As Worksheet
Dim Foglio_Giorno As Worksheet
Dim Foglio_Riassunto As Worksheet
Dim First_Count, End_Count As Integer

Giorno = CInt(Strings.Left(Data, 2))
If Strings.Len(Giorno) = 1 Then
    Giorno = "0" & Giorno
End If
Mese = CInt(Strings.Left(Strings.Right(Data, 7), 2))
If Strings.Len(Mese) = 1 Then
    Mese = "0" & Mese
End If
Anno = CInt(Strings.Right(Data, 4))

Dim fs As Object
Dim oldPath As String, newPath As String, newfiles As String, utente As String

oldPath = ThisWorkbook.Path
newPath = ThisWorkbook.Path
Nome_File = Anno & Mese & Giorno & " Scheda prodotto in uscita " & Mese & " " & Anno & ".xlsm"
NewFile = newPath & "\" & Nome_File
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile oldPath & "\" & ActiveWorkbook.Name, newPath & "\" & Nome_File 'This file was an .xls file
Set fs = Nothing
 
Workbooks.Open NewFile

End_Count = Worksheets.Count

For Count = (End_Count - 2) To 3 Step -1
    Worksheets(Count).Delete
Next
         
Set Foglio_Giorno = Worksheets.Item(2)

Call Formatta_Scheda_Prodotto(Foglio_Giorno, Data)

End Sub


Codice: Seleziona tutto
Sub Formatta_Scheda_Prodotto(Foglio_Giorno As Worksheet, Data As String)

Foglio_Giorno.Activate
Foglio_Giorno.Unprotect

Range("A4:A13").Select
Selection.ClearContents
Range("B4:B4").Select
Selection.ClearContents
Range("D4:D13").Select
Selection.ClearContents
Range("G4:G13").Select
Selection.ClearContents
Range("I4:I13").Select
Selection.ClearContents

Range("A18:A27").Select
Selection.ClearContents
Range("D18:D27").Select
Selection.ClearContents
Range("G18:G27").Select
Selection.ClearContents
Range("I18:I27").Select
Selection.ClearContents

Foglio_Giorno.Name = Data

End Sub
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 05/01/18 16:43

Non hai detto quale istruzione viene evidenziata "in errore" dal debugger, ne' il tipo di errore, quindi procediamo alla cieca.

Intanto rilevo che la macro usa le convenzioni Windows per quanto riguarda la struttura del filesystem; quindi certamente andranno in errore all'interno della Sub FoglioNuovoMese tutte le istruzioni che usano il "\" come path separator. Per evitare questo errore, modifica questa parte di codice della Sub FoglioNuovoMese:
Ora:
oldPath = ThisWorkbook.Path
newPath = ThisWorkbook.Path
Nome_File = Anno & Mese & Giorno & " Scheda prodotto in uscita " & Mese & " " & Anno & ".xlsm"
NewFile = newPath & "\" & Nome_File
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile oldPath & "\" & ActiveWorkbook.Name, newPath & "\" & Nome_File 'This file was an .xls file
Set fs = Nothing


Modifica in:
Codice: Seleziona tutto
Dim PS As String                    '+++
PS = Application.PathSeparator      '+++
oldPath = ThisWorkbook.Path
newPath = ThisWorkbook.Path
Nome_File = Anno & Mese & Giorno & " Scheda prodotto in uscita " & Mese & " " & Anno & ".xlsm"
NewFile = newPath & PS & Nome_File  'MMM
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile oldPath & PS & ActiveWorkbook.Name, newPath & PS & Nome_File 'MMM This file was an .xls file
Set fs = Nothing


Le righe marcate +++ sono nuove, quelle marcate MMM sono state modificate

Prova con questa modifica, e se va in errore scegli "Debug" per ispezionare il codice: indica poi nel tuo messaggio il testo esatto del messaggio e quale riga in quale macro risulta evidenziata.

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

Re: Duplicare un file

Postdi Baddiu » 06/01/18 09:07

Ho inserito le nuove istruzioni ma come prima quando cerca di creare il nuovo file mi dice errore riga n.....

Come avrai capito non sono tanto pratico, come faccio a fare il debug?

Grazie
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 06/01/18 20:31

Non conosco il comportamento di Excel in ambiente Mac, ma quando si verifica un errore in fase di esecuzione dovrebbe uscire un popup che riporta il messaggio di errore e che offre la possibilita' di "terminare la macro" oppure entrare in "Debug"; premendo Debug dovrebbe aprirsi l'editor delle macro con evidenziata la riga che genera l'errore.

Idem se in fase di verifica viene trovato un errore di sintassi prima che si passi alla fase di esecuzione.

Puoi anche allegare uno screenshot per documentare cosa compare sullo schermo al momento dell'errore
Per le istruzioni su come allegare una immagine:
viewtopic.php?f=26&t=103893&p=605488#p605488

Le informazioni per la creazione dell'immagine da pubblicare si riferisce all'ambiene Windows; credo che su Mac ci siano tutte le opzioni che servono, ma al limite fai una foto decorosa e pubblica quella.

Ciao, ti aspettiamo
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Duplicare un file

Postdi Zer0Kelvin » 07/01/18 01:57

Ciao Anthony.
A giudicare dal primo post, guardando questo codice,
Codice: Seleziona tutto
Errore:
MsgBox "Foglio n " & Count_Foglio & " Riga n " & Count_Riga
MsgBox Msg, , "Errore", Err.HelpFile, Err.HelpContext
penso che sia attivo il controllo degli errori e il messaggio citato non è quello del debugger, ma quello visualizzato dal codice.
Bisogna prima far disabilitare l'On Error Goto, ma la vedo dura. ;)
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Duplicare un file

Postdi Baddiu » 07/01/18 14:05

Ciao, quando eseguo istruzione unico messaggio che appare è Foglio n Riga n e unico pulsante che c'è è Ok, lo clicco e appare un'altra schermata con scritto errore e con col solito pulsante Ok.
Non riesco fare nulla di più come si può vedere nelle foto allegate

Immagine

Immagine

Comunque quello che mi lascia perplesso è che se eseguo istruzione su un Pc Windows tutto funziona mentre su un Mac mi aggiunge le pagine giornaliere ma non riesce a creare il nuovo file mensile..


Grazie a tutti per interessamento
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 08/01/18 02:34

Zer0Kelvin ha colto un particolare che io avevo ignorato.

Vai nella Sub Calcolo_Tot_Lotti_Art_Mese e nella Sub Inserisci_Fogli_Mancanti e disabilita le istruzioni On Error GoTo Errore che vi trovi (basta mettere un Apostrofo in testa alla riga).

Poi esegui la tua procedura.

A questo punto invece del messaggio inutile che ti compare ora, riceverai un messaggio di errore e la possibilita' di entrare in Debug.
Indica il messaggio di errore che ti compare e , dopo aver scelto Debug, quale riga di codice risulta evidenziata.

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

Re: Duplicare un file

Postdi Baddiu » 08/01/18 12:32

Ho eseguito le istruzioni e ora appare questo

Immagine

Immagine

Grazie mille
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 08/01/18 14:10

Ah ha, una semplice google search ci dice che "Unfortunately, the FSO model is not available on the Apple Macintosh (Mac)"
Non e' grave, perche' dovrebbe bastare eliminare queste istruzioni
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile oldPath & PS & ActiveWorkbook.Name, newPath & PS & Nome_File 'MMM This file was an .xls file
Set fs = Nothing


e sostituirla con questa:
Codice: Seleziona tutto
FileCopy oldPath & PS & ActiveWorkbook.Name, newPath & PS & Nome_File

Riprova, vediamo quanto sei fortunato :D
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Duplicare un file

Postdi Baddiu » 08/01/18 17:49

Grazie mille!!!

Funziona!
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Baddiu » 05/02/18 22:37

Aiuto.....
Non funziona più.... cosa può essere successo?

Immagine
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 05/02/18 23:56

C'e' un messaggio di errore? Quale?

Prima dell'istruzione in giallo inserisci questa riga:
Codice: Seleziona tutto
Debug.Print oldPath, ActiveWorkbook.Name, newPath & PS & Nome_File


Poi quando va in errore e vai in "Debug", quindi vai sulla finestra del vba, premo Contr-g; si aprira' la "finestra Immediata": copia quello che ci trovi scritto e incollalo nel tuo prossimo messaggio, insieme con il messaggio di errore.

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

Re: Duplicare un file

Postdi Baddiu » 06/02/18 12:36

Ho provato a fare quello che mi hai detto ma non mi appare nulla.... se faccio control-g non si apre la finestra di dialogo...
Sbaglio qualche cosa?
Quando eseguo la macro mi dice errore di runtime 75.
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 06/02/18 13:03

Quell'errore indica un problema con il percorso o il nome del file.
Se la combinazione Contr-g non funziona, cerca nel menu della finestra vba: Menu /Visualizza /Finestra Immediata

Se proprio non ci riesci, allora invece della riga Debug.Print inserisci un msgbox:
Codice: Seleziona tutto
MsgBox (oldPath & vbCrLf & ActiveWorkbook.Name & vbCrLf & newPath & PS & Nome_File)


Prendi nota del messaggio (fai uno screenshot) e premi Ok per eseguire l'istruzione successiva che va in errore. Poi pubblica lo screenshot
Per le istruzioni su come allegare una immagine:
viewtopic.php?f=26&t=103893&p=605488#p605488

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

Re: Duplicare un file

Postdi Baddiu » 06/02/18 20:19

Immagine

ecco qui quello che appare
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38

Re: Duplicare un file

Postdi Anthony47 » 07/02/18 00:39

L'errore 75 indica o che il percorso & nome file non e' formalmente corretto, oppure potrebbe gia' esistere un file con il nome con cui si prova a salvare.
Quindi controlla se esiste in quella directory un file "20180101 Scheda prodotto in uscita 02 2018.xlsm", ed eventualmente cancellalo.
Quanto al "formalmente corretto", non so se la stringa mostrata nella seconda parte dello screenshot (Macintosh HD:Users:baddiu:Dektop:Molino:Rintracciabilita_ProdottiUscita:2018:20180101 Scheda prodotto in uscita 02 2018.xlsm) rappresenti, nella terminologia Mac, un valido percorso & nome file.

Tutto questo ragionamento tra l'altro ha senso se "fino a ieri funzionava regolarmente"; perche' INVECE a me sembra strano che si possa copiare il file in uso senza ottenere un errore, a meno che il file (quello che deve essere copiato) non sia stato aperto in modalita' "Sola lettura"...

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

Re: Duplicare un file

Postdi Baddiu » 07/02/18 12:20

Grazie comunque.
Ho provato a spostare il file in un altra cartella ma da lo stesso errore...

Creerò i nuovi mesi con un pc Win...

Grazie
Baddiu
Utente Junior
 
Post: 10
Iscritto il: 04/01/18 20:38


Torna a Applicazioni Office Windows


Topic correlati a "Duplicare un file":


Chi c’è in linea

Visitano il forum: Nessuno e 34 ospiti