Fai la tua domanda
0

creare un elenco dei nomi dei fogli presenti in un file calc

chiesto il 2018-08-26 21:38:58 +0200

Immagine gravatar per Pasren

Buongiorno a tutti, mi occorrerebbe creare un indice dei nomi di tutti fogli contenuti in un file calc. Ho trovato questo codice, che però è valido solo per excell:

    Rem Attribute VBA_ModuleType=VBAModule
     Option VBASupport 1 

Sub CreateIndex()
  'updateby Extendoffice 20150914
Dim xAlerts As Boolean
Dim I  As Long
Dim xShtIndex As Worksheet
Dim xSht As Variant
xAlerts = Application.DisplayAlerts
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Index").Delete
On Error GoTo 0
Set xShtIndex = Sheets.Add(Sheets(1))
xShtIndex.Name = "Index"
I = 1
Cells(1, 1).Value = "INDEX"
For Each xSht In ThisWorkbook.Sheets
    If xSht.Name <> "Index" Then
        I = I + 1
        xShtIndex.Hyperlinks.Add Cells(I, 1), "", "'" & xSht.Name & "'!A1", , xSht.Name
    End If
Next
Application.DisplayAlerts = xAlerts
 End Sub

Le righe Rem Attribute VBA_ModuleType=VBAModule Option VBASupport 1

sono state aggiunte per rendere compatibile il codice VBA col Basic di LO. Ma non è bastato e la macro non funziona (su excell funziona benissimo). A quello che ho capito si blocca alla riga

xShtIndex.Hyperlinks.Add Cells(I, 1), "", "'" & xSht.Name & "'!A1", , xSht.Name

Qualcuno mi può aiutare a rendere il codice compatibile o a fare una nuova macro? Non ho confidenza col BAsic o col VBA . Grazie mille a tutti coloro che mi potranno aiutare

modifica retag flag offensive close merge delete

2 Answers

0

risposto il 2018-08-26 23:45:26 +0200

Immagine gravatar per akurery

Per creare un indice dei fogli osservo che in Calc esiste il Navigatore, al cui interno c'è già l'elenco dei nomi dei vari fogli sui quali puoi fare doppio clic per spostarti. Se non devi inviare il file ad altri, ti serve veramente aggiungere un foglio con l'indice quando puoi usare il Navigatore?
Tra l'altro, se nel Navigatore prendi il nome di un foglio e lo trascini in una cella, in questa cella viene creato un link a quel foglio, proprio come farebbe la macro che stai cercando di replicare. Se non hai tanti fogli e non devi ripetere la procedura per altri file, puoi creare l'indice a mano, senza bisogno di macro.

Se poi vuoi proprio sistemare la macro non sono un programmatore e ne capisco poco, però da quanto ne so il problema non dovrebbero essere tanto i comandi presenti nel codice, quanto i nomi dei riferimenti ai vari oggetti.
Dai un'occhiata a queste guide:
http://www.pitonyak.org/book/
Sono in inglese e fanno riferimento a OpenOffice, ma valgono anche per LibreOffice.

modifica flag offensive delete link more
0

risposto il 2018-08-27 15:34:56 +0200

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Ringrazio per la risposta. mi occorre creare un indice in un foglio perchè devo poi avere in questo un insieme di poche ma fondamentali informazioni che fanno riferimento a quel foglio. Quindi avere un indice "dinamico" è, per me, importante. Il sito consigliato non mi è stato utile ma potrà servire in futuro. Grazie mille.Sono riuscito, modificando come di seguito la macro a creare un indice indicando nella seconda cella il numero di foglio e nella terza il nome del foglio. Il "nuovo" codice è:

               Rem Attribute VBA_ModuleType=VBAModule
                Option VBASupport 1 
                        Sub CreateIndex()
   Dim xAlerts As Boolean
    Dim I  As Long
    Dim xShtIndex As Worksheet
    Dim xSht As Variant
    xAlerts = Application.DisplayAlerts
    Application.DisplayAlerts = False
    On Error Resume Next
    Sheets("Index").Delete
    On Error GoTo 0
    Set xShtIndex = Sheets.Add(Sheets(1))
    xShtIndex.Name = "Index"
    I = 1
    Cells(1, 1).Value = "INDEX"
    For Each xSht In ThisWorkbook.Sheets
        If xSht.Name <> "Index" Then
            I = I + 1
             Cells(I, 1).Value = "Foglio Numero "
                 Cells(I, 2).Value = I
                 Cells(I, 3).Value = xSht.Name 
        End If
    Next
    Application.DisplayAlerts = xAlerts
     End Sub

In pratica nella cella della i-esima riga e della 1 colonna ci va la scritta "Foglio numero" nella cella della i-esima riga e della 2 colonna ci va il numero del foglio nella cella della i-esima riga e della 3 colonna ci va il nome del foglio Sono sicuro che con l'istruzione giusta potre inserire anche il collegamento. Ora, se riesco, da queste informazioni, a creare collegamenti ai vari fogli e a specifiche celle dei relativi fogli, ho risolto. Non conoscendo il VBA me ne sono andato per "il fumo". Ringrazio chi vorrà\potrà aiutarmi.

modifica flag offensive delete link more
Login/Signup to Answer

Question Tools

1 follower

Stats

Chieste: 2018-08-26 21:38:58 +0200

Seen: 282 times

Last updated: Aug 27 '18