|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Senior Member
Iscritto dal: Nov 2002
Città: Mission world: Napoles, Milan, Madrid, Paris, London, Now AMSTERDAM!!!!! yahoooo!!! Next stop: California, Tnx TNS-NIPO!!
Messaggi: 2150
|
[Visual basic] codice per excel chi mi aiuta?
ciao ragazzi, mi servirebbe un piacere enorme, Devo creare un bottone in un file excel che quando premuto crea dei file di Testo in determinate con il contenuto di 4 fogli di un file excell, una specie di repot in file txt, sinceramente non mi importa la formattazione mi serve solo portare quello che c'é in questi 4 fogli in un file txt. ho trovato questo codice sul sito della microsoft per fare ció che voglio, ma funziona solo per un foglio...
http://support.microsoft.com/kb/635038/it Quote:
Qualcuno mi saprebbe aiutare? Altra cosa che mi chiedevo é se era possibile implementare anche del codice che dovrebbe creare un file a parte con una piccola parte del primo foglio solo nel momento in cui la casella X é piena... non so se mi sono spiegato caso mai non capite cerco di spiegarmi meglio! Grazie a tutti in anticipo!
__________________
La libertá sopratutto di parola é un lusso che non ci si puo' permettere in italia, per la strada come su internet. |
|
![]() |
![]() |
#2 |
Member
Iscritto dal: May 2006
Messaggi: 69
|
Devi eseguire il codice da te postato per ogni foglio che vuoi salvare.
Ad esempio se vuoi salvare tutti i fogli di una cartella di lavoro in un unico file puoi fare così: Codice:
Sub file_testo() Dim start As Range Dim fine As Range Dim Foglio As Worksheet Dim strNomeDefault As String Dim strIntestazione As String Dim f As Integer 'Imposta il nome di default del file strNomeDefault = "Prova" n = InputBox("INSERIRE IL NOME DEL FILE DI TESTO RISULTANTE", , strNomeDefault) n = n & ".txt" f = FreeFile Open n For Output As #f ' Per ogni foglio nella cartella di lavoro corrente... For Each Foglio In ActiveWorkbook.Worksheets ' Attiva il foglio Foglio.Activate Set start = Application.InputBox(prompt:="ANGOLO ALTO SINISTRO", Type:=8, Title:=Foglio.Name) Set fine = Application.InputBox(prompt:="ANGOLO BASSO DESTRO", Type:=8, Title:=Foglio.Name) colonna_inizio = Range(start.Address).Column riga_inizio = Range(start.Address).Row colonna_fine = Range(fine.Address).Column riga_fine = Range(fine.Address).Row ' Prepara l'intestazione ' (il nome del foglio corrente fra parentesi quadre + INVIO) strIntestazione = "[" & Foglio.Name & "]" & vbCrLf ' Scrive l'intestazione nel file Print #f, strIntestazione; For y = riga_inizio To riga_fine For i = colonna_inizio To colonna_fine valore = Foglio.Cells(y, i).Value If i = colonna_fine Then valore = valore & vbCrLf Else valore = valore & ";" End If Print #f, valore; Next i Next y Next Close #f End Sub Codice:
Sub file_testo_parte() Dim Foglio As Worksheet Dim iRiga As Integer Dim iCol As Integer Dim strIntestazione As String Dim f As Integer ' Foglio contenente la cella da controllare Set Foglio = ActiveWorkbook.Worksheets("foglio1") ' Coordinate della cella da controllare iRiga = 5 iCol = 3 ' Se la cella non è vuota... If (Foglio.Cells(iRiga, iCol).Value <> "") Then ' ...salva parte del foglio 'Imposta il nome del file n = "File_parte" & ".txt" ' Coordinate della cella inizio colonna_inizio = 1 riga_inizio = 1 ' Coordinate della cella fine colonna_fine = 3 riga_fine = 3 f = FreeFile Open n For Output As #f ' Prepara l'intestazione ' (il nome del foglio corrente fra parentesi quadre + INVIO) strIntestazione = "[" & Foglio.Name & " Parziale ]" & vbCrLf ' Scrive l'intestazione nel file Print #f, strIntestazione; For y = riga_inizio To riga_fine For i = colonna_inizio To colonna_fine valore = Foglio.Cells(y, i).Value If i = colonna_fine Then valore = valore & vbCrLf Else valore = valore & ";" End If Print #f, valore; Next i Next y Close #f End If End Sub Se hai problemi chiedi pure. |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2006
Messaggi: 69
|
Ho ricevuto il tuo pvt e ho fatto un po' di modifiche.
Codice:
Sub SalvaComeTXT() Dim Interv As Range Dim strIntestazione As String Dim strFile As String Dim strFileParte As String ' Visualizza la finestra di dialogo "Salva" e recupera il nome del file strFile = DlgSalva If (strFile <> "") Then ' ------------------------------------------------------- ' Stampa l'intervallo A1:D6 del Foglio1 ' ------------------------------------------------------- Set Interv = Worksheets("Foglio1").Range("A1:D6") strIntestazione = "[Foglio1]" & vbCrLf SalvaRange strFile, False, strIntestazione, Interv ' ------------------------------------------------------- ' Stampa l'intervallo A1:F20 del Foglio2 ' ------------------------------------------------------- Set Interv = Worksheets("Foglio2").Range("A1:F20") strIntestazione = "[Foglio2]" & vbCrLf SalvaRange strFile, True, strIntestazione, Interv ' ------------------------------------------------------- ' ' ' ... Continua per tutti i fogli che vuoi salvare ... ' ' ' Se la cella "A5" del Foglio1 ha del testo... If (Worksheets("Foglio1").Range("A5").Value <> "") Then ' ...salva parte del foglio nel file strFileParte ' Toglie l'estensione al nome del file strFileParte = Left(strFile, Len(strFile) - 4) ' Aggiunge un suffisso e rimette l'estensione strFileParte = strFileParte & "_parte.txt" ' Es. Se strFile = "c:\salvataggio.txt" allora ' strFileParte sarà uguale a "c:\salvataggio_parte.txt" Set Interv = Worksheets("Foglio1").Range("A1:B2") strIntestazione = "[Foglio1_parte]" & vbCrLf SalvaRange strFileParte, False, strIntestazione, Interv ' ------------------------------------------------------- End If End If End Sub Private Function DlgSalva() Dim dlg As New CommonDialog Dim strFile As String ' Imposta le opzioni della finestra di dialogo dlg.DialogTitle = "Salva fogli come file di testo" dlg.Filter = "File di testo (*.txt)|*.txt" ' Visualizza la finestra di dialogo dlg.ShowSave ' Recupera il file selezionato strFile = dlg.Filename ' Se non si è premuto "annulla"... If (strFile <> "") Then ' ...restituisce il nome e il percorso del file DlgSalva = strFile Exit Function End If ' Se si è premuto "annulla" restituisce una stringa vuota DlgSalva = "" End Function Private Sub SalvaRange(ByVal strFile As String, ByVal blnAggiungi As Boolean, ByVal strIntestazione As String, ByRef Interv As Range) ' ------------------------------------------------------------------- ' DESCRIZIONE: Salva su file un intervallo di celle. ' ------------------------------------------------------------------- ' INPUT: ' ------------------------------------------------------------------- ' strFile -> Nome del file in cui salvare i dati. ' Se il file non esiste verrà creato. ' Se esiste verrà sovrascritto o i dati verranno ' aggiunti a seconda del valore di blnAggiungi. ' ' blnAggiungi->Se TRUE: il dati verranno aggiunti al file ' Se FALSE: il file verrà sovrascritto ' ' strIntestazione -> Intestazione da stampare nel file. ' Se non si vuole intestazione passare "" ' ' Interv -> Intervallo da stampare ' ------------------------------------------------------------------- Dim f As Integer Dim r As Integer Dim c As Integer On Error GoTo Errore ' Recupera un numero di file libero f = FreeFile If (blnAggiungi) Then ' Apre il file aggiungendo i dati alla fine Open strFile For Append As #f Else ' Se il file esiste... If (Dir(strFile) <> "") Then ' ...chiede conferma prima di sovrascriverlo Risp = MsgBox("Il file " & strFile & " già esiste lo vuoi sovrascrivere?", vbYesNo + vbQuestion, "Attenzione!") If (Risp = vbNo) Then ' Non si vuole sovrascrivere il file: ESCI!!! Exit Sub End If End If ' Apre il file sovrascriverlo Open strFile For Output As #f End If If (strIntestazione <> "") Then ' Scrive l'intestazione nel file Print #f, strIntestazione; End If ' Scrive il valore di ogni cella nel file For r = 1 To Interv.Rows.Count For c = 1 To Interv.Columns.Count valore = Interv.Cells(r, c).Value If c = Interv.Columns.Count Then valore = valore & vbCrLf Else valore = valore & ";" End If Print #f, valore; Next Next ' Chiude il file Close #f Exit Sub ' Gestisce eventuali errori Errore: Dim strMsg As String strMsg = "Si è verificato un errore durante il salvataggio del file." & vbCrLf & "Errore Numero: " & Err.Number & vbCrLf & "Descrizione: " & Err.Description MsgBox strMsg, vbCritical End Sub |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:02.