Bart Aimar ha scritto:

Quindi ti serve una macro...
Ma vorresti delle dritte per provare a scriverla o cerchi qualcosa chiavi in mano?

Ho deciso per il chiavi in mano... poi ti mando la fattura... :-)

Ho messo insieme un po' di codice... prova se ti funziona.


bello sarebbe che, inserendo una nuova riga in Tabella1, "qualcosa" la riportasse in Tabella2, ordinandola appropriatamente.
Questo mi sembra giĆ  molto complicato... :-)

Ci ho pensato un po' su, ma qui non so come aiutarti...

ciao

Bart

REM  *****  BASIC  *****
Sub Main_valerio
Duplica_Sheet1
Riordina_A (2, true)'
 'il numero 2 corrisponde
 ' alla colonna C
end sub


Sub Duplica_Sheet1
' duplica un foglio e aggiunge un suffisso al nome
dim iNumInser as integer
        oDoc = thisComponent
        sNomeSheet = oDoc.currentcontroller.activesheet.name
        oSheet = oDoc.currentcontroller.activesheet
   ''' Copy_PageStyle
        print_area= oSheet.getPrintAreas
        ' registro l'area di stampa
        RepeatRows = oSheet.getTitleRows
        'registro le righe da ripetere (intestazione colonna)
        PrintRepeatRows = oSheet.PrintTitleRows
' i parametri "optional" devono essere verificati nell'ordine
' in cui vengono passati!!
        if isMissing (sSuffix) Then
                        sSuffix = "_print"
                else
                        sSuffix = "_copia"
        end if
        sRaggrup = sNomeSheet & sSuffix
        If thisComponent.Sheets.hasByName(sNomeSheet & sSuffix) Then
                If thisComponent.Sheets.hasByName(_
                sNomeSheet & sSuffix & "_bk") Then            
                        thisComponent.Sheets.removebyname(_
                        sNomeSheet &  sSuffix & "_bk")
                end if
                oSheet = oDoc.Sheets.getByName(sNomeSheet & sSuffix)
                oSheet.Name = sNomeSheet &  sSuffix & "_bk"
        end if

                        oDoc = ThisComponent
                        iNumInser = oDoc.Sheets.count
        sNome = sNomeSheet & sSuffix
        oDoc.Sheets.CopybyName(sNomeSheet,sNome, iNumInser)'
        oSheet = oDoc.Sheets.getByName(sNomeSheet & sSuffix)
        oDoc.CurrentController.SetActiveSheet(oSheet)
        ' Salta al foglio duplicato
        oSheet.setPrintAreas(print_area)
        oSheet.setTitleRows(RepeatRows)
        oSheet.setPrintTitleRows(PrintRepeatRows)
END SUB

Function Riordina_A (_
        ColRior as integer, AscDesc as boolean)as variant
' Riordina l'elenco prezzi con criteri
' a scelta...
                                                                
dim lrowF as long
dim oSheet as object
odoc = thiscomponent
oSheet = odoc.Sheets.getByName(_
odoc.currentcontroller.activesheet.name)
oLastCell = getLastUsedCell(oSheet)
lcolEnd = oLastCell.Endcolumn
lrowEnd = oLastCell.EndRow

oMioRange = osheet.getCellRangeByPosition(0,1,lcolEnd,lrowEnd)
' e poi lo riordina
  Dim oSheetDSC,oDSCRange  As Object
  Dim aSortFields(0) As New com.sun.star.util.SortField
  Dim aSortDesc(0) As New com.sun.star.beans.PropertyValue
  aSortFields(0).Field = ColRior ' 0
  aSortFields(0).SortAscending =  AscDesc 'TRUE'FALSE
  aSortDesc(0).Name = "SortFields"
  aSortDesc(0).Value = aSortFields()
  oMioRange.Sort(aSortDesc())
        Riordina_A = lrowF
End Function

Function getLastUsedCell(oSheet as Object)
  Dim oCell As Object
  Dim oCursor As Object
  Dim aAddress As Variant
  oCell = oSheet.GetCellbyPosition( 0, 0 )
  oCursor = oSheet.createCursorByRange(oCell)
  oCursor.GotoEndOfUsedArea(True)
  aAddress = oCursor.RangeAddress
  GetLastUsedCell = aAddress'.EndRow
End Function



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a