2012-04-19 17 views
6

Ho una funzione vba in Excel 2010 che ho creato utilizzando l'aiuto delle persone qui. Questa funzione copia i contenuti di una tabella/modulo, li ordina e li invia alle tabelle appropriate.Come selezionare il contenuto della tabella senza distruggere la tabella?

Ora, dopo aver eseguito questa funzione, desidero cancellare la tabella originale. Posso ottenere questo con il seguente codice, assumendo che ACell sia stata definita come la prima cella nella tabella. ACell.ListObject.Range.ClearContents funziona correttamente, l'unico problema è che elimina sia la tabella che i valori dei dati.

C'è qualche modo per aggirare questo? Preferirei non dover impostare il tavolo ogni volta che inserisco alcuni dati.

risposta

17

ne dite:

ACell.ListObject.DataBodyRange.Rows.Delete 

che manterrà la vostra struttura e intestazioni tavola, ma cancellare tutti i dati e le righe.

EDIT: Ho intenzione di modificare solo una parte della mia risposta da your previous post, in quanto fa per lo più quello che vuoi. Questo lascia solo una riga:

With loSource 
    .Range.AutoFilter 
    .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1,      .DataBodyRange.Columns.Count).Rows.Delete 
    .DataBodyRange.Rows(1).Specialcells(xlCellTypeConstants).ClearContents 
End With 

Se si desidera lasciare tutte le righe intatti con le loro formule e quant'altro, basta fare:

With loSource 
    .Range.AutoFilter 
    .DataBodyRange.Specialcells(xlCellTypeConstants).ClearContents 
End With 

che è vicino a quello che @Readify suggerito, se non ha vinto 't chiare formule.

+1

Quindi se cancello tutte le righe cosa succede? Lascerà 1 vuoto o avrò solo una tabella con nome senza celle, non ho l'intestazione del piè di pagina su questo tavolo. – SpeedCrazy

+0

Ho appena provato e questo elimina completamente la tabella, le formule, la convalida dei dati, la formattazione, tutto! – SpeedCrazy

+0

Ok, fai un respiro profondo :). Sarebbe utile se tu menzionassi cose come la convalida dei dati e le formule nella tua domanda. La precedente domanda a cui ho risposto su questo argomento includeva il codice per lasciare una riga. E 'questo quello che vuoi? –

5

provare solo cancellare i dati (non l'intera tabella tra cui header):

ACell.ListObject.DataBodyRange.ClearContents 
+0

Se si desidera lasciare le righe della tabella e solo cancellare il contenuto, utilizzare il precedente. Se vuoi eliminare anche le righe, usa la risposta di Doug. – Reafidy

+0

+1 per vedere questo con occhi nuovi e dare la risposta più vicina alle informazioni in quel momento. –

0

Io uso questo codice per rimuovere i miei dati ma lasciare le formule nella riga superiore. Rimuove anche tutte le righe tranne la riga superiore e scorre la pagina verso l'alto.

Sub CleanTheTable() 
    Application.ScreenUpdating = False 
    Sheets("Data").Select 
    ActiveSheet.ListObjects("TestTable").HeaderRowRange.Select 
    'Remove the filters if one exists. 
    If ActiveSheet.FilterMode Then 
    Selection.AutoFilter 
    End If 
    'Clear all lines but the first one in the table leaving formulas for the next go round. 
    With Worksheets("Data").ListObjects("TestTable") 
    .Range.AutoFilter 
    On Error Resume Next 
    .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete 
    .DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents 
    ActiveWindow.SmallScroll Down:=-10000 

    End With 
Application.ScreenUpdating = True 
End Sub 
Problemi correlati