Macro Excel - Copia dati ogni 300 righe

Anonimo
2015-04-29T16:07:49+00:00

Ciao a tutti,

ho la necessità di copiare da una cartella di lavoro ad un'altra, un range di celle per ogni 300 righe fino a fine file che è variabile.

Conviene un ciclo for next che mi crea ogni volta il range variabile o esiste un modo diverso con poche istruzioni ?

Grazie

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
Risposta accettata dall'autore della domanda
Anonimo
2015-04-30T17:20:17+00:00

Ciao IL CREM,

avrai notato che l'ultimo file comprende le righe vuote fino alla trecentesima dell'ultimo blocco. Se vuoi evitarlo sostituisci:

          Print #ff, strRow

con:

          If Len(Trim$(Replace(strRow, vbTab, ""))) Then

            Print #ff, strRow

          End If

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-04-30T10:41:08+00:00

Ciao IL CREM,

un txt? Prima avevi detto da una cartella di lavoro ad un'altra.

Per il txt un modo è questo:

Public Sub Test()

On Error GoTo ExtP

' ---------- PERSONALIZZARE ---------- >

'

Const cstrPath    As String = "D:\Percorso\IL CREM"

Const cstrFilePfx As String = "TEST"

Const cstrFileExt As String = "TXT"

Const cstrWsh     As String = "Foglio1"

Const cstrRng     As String = "A1"

Const clngStep    As Long = 300

Const clngCols    As Long = 3

'

' ---------- PERSONALIZZARE ---------- <

Dim wbk As Excel.Workbook

Dim wsh As Excel.Worksheet

Dim rng As Excel.Range

Dim lngRow      As Long

Dim lngOffset   As Long

Dim avntRng     As Variant

Dim intSfx      As Integer

Dim strFullname As String

Dim ff          As Integer

Dim intDim1     As Integer

Dim intDim2     As Integer

Dim strRow      As String

    Set wbk = Application.ThisWorkbook

    Set wsh = wbk.Worksheets(cstrWsh)

    Set rng = wsh.Range(cstrRng)

    With wsh

      For lngRow = rng.Row - 1 To .Rows.Count - 1 Step clngStep

        If IsEmpty(rng.Offset(lngOffset).Value) Then Exit For

        avntRng = .Range(rng.Offset(lngOffset), _

                   rng.Offset(lngOffset + clngStep - 1) _

                   ).Resize(, clngCols).Value

        intSfx = intSfx + 1

        strFullname = cstrPath & cstrFilePfx & _

                      CStr(intSfx) & "." & cstrFileExt

        ff = FreeFile

        Open strFullname For Output As #ff

        For intDim1 = LBound(avntRng, 1) To UBound(avntRng, 1)

          strRow = ""

          For intDim2 = LBound(avntRng, 2) To UBound(avntRng, 2)

            strRow = strRow & vbTab & avntRng(intDim1, intDim2)

          Next

          strRow = Mid$(strRow, 2)

          Print #ff, strRow

        Next

        Close

        lngOffset = lngOffset + clngStep

      Next

    End With

ExtP:

    With Err

      If .Number Then MsgBox .Description

    End With

    On Error Resume Next

    Close

    Set rng = Nothing

    Set wsh = Nothing

    Set wbk = Nothing

End Sub

La risposta è stata utile?

0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Eliminata

    Questa risposta è stata eliminata a causa di una violazione del codice di comportamento. La risposta è stata segnalata manualmente o identificata tramite il rilevamento automatizzato prima dell'esecuzione dell'azione. Per ulteriori informazioni, fai riferimento al codice di comportamento.


    I commenti sono stati disattivati. Ulteriori informazioni

  2. Anonimo
    2016-06-25T21:20:26+00:00

    Ciao Fabio,

    --Domanda totalmente nuova--

    Per cui, ti consiglio di aprire un nuovo thread.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-06-25T08:17:52+00:00

    --Domanda totalmente nuova--

    Nella speranza di rendere comprensibile il mio problema, chiedo in anticipo grazie per la lettura del mio fardello!

    Dunque ... Ho creato un "Gioco" in Excel strano ma vero!... Però ho un problema e quì spero di essere chiaro.

    Ho creato una pagina per ogni personaggio da dove prelevare i miei dati (c6 c8 c10 c12) con "nome pagina" ovviamente differente per ogni personaggio

    PERO'

    dopo lo scontro " regole stabilite punteggi e via discorrendo funzionanti"  i valori hanno subito cambiamento e i nuovi valori HO FATTO IN MODO CHE verranno scritti in una colonna affianco sempre nell'ordine (c6 c8 c10 c12) vorrei salvare in ("nome pagina".txt) i valori mutati per poi farli leggere al posto degli iniziali   

    ( in Excel mi da errore "riferimenti circolari")  

    deve funzionare il salvataggio in txt e lettura del file txt per prelievo dati senza chiudere Excel. ovvero il gioco .....  

     Potrei in futuro tramite "VISUAL BASIC" CREARE UN VERO PROGRAMMA ".EXE" CON DATI EXCEL?  

    GRAZIE 10000000000000000000000 E SE NON BASTANO LI MOLTIPLICO PER 1233000000.

    La risposta è stata utile?

    0 commenti Nessun commento