Errore di sintassi



  • Errore di sintassi
    di Ciccia (utente non iscritto) data: 06/10/2015 21:38:32

    Ciao a tutti,
    vi scrivo perchè ho un problema con vba.
    Io ho copiato e incollato la sintassi di una funzione, questa sotto, su un foglio excel 2010 di prova, su cui andava perfettamente con delle parole scritte a caso.
    Quando l'ho copiata e incollata nel foglio Vba del mio foglio di lavoro su cui dovrei realmente usarla (stavolta Excel 2013) me l'ha salvata correttamente, infatti compare nell' elenco funzioni, ma quando l'ho utilizzata con i dati del mio foglio, mi ha segnalato più volte errore, in particolare errore di sintassi nella funzione, rimandandomi automaticamente al foglio di sintassi. La frase scorretta a suo avviso è "Function ConcatenaEx(sep As String, ParamArray rng())", dicendo che è "un nome non univoco". Che significa? Nell'altro foglio di excel funzionava ed è stata copiata uguale!
    Grazie a chiunque potrà spendere un po' del suo tempo ad aiutarmi,
    ciaoooooooo
     
    Option Explicit
    
    Function ConcatenaEx(sep As String, ParamArray rng())
    
      Dim r As Range
      Dim i As Integer
      Dim idx As Integer
      Dim sResult() As String
      Dim x As Long, y As Long
      idx = 0
      
      For i = 0 To UBound(rng)
          Set r = rng(i)
          For x = r.Row To r.Row + r.Rows.Count - 1
      
              For y = r.Column To r.Column + r.Columns.Count - 1
                  ReDim Preserve sResult(idx)
                  sResult(idx) = Sheets(rng(i).Parent.Name).Cells(x, y)
                  idx = idx + 1
              Next y
          Next x
      Next i
      
      Set r = Nothing
      ConcatenaEx = Join(sResult, sep)
    
    End Function



  • di cromagno data: 07/10/2015 00:02:27

    Ciao,
    "nome non univoco" significa che una variabile o una macro (o una function) è già stata usata o all'interno della cartella di lavoro o già salvata tra le macro/function personali.
    Hai altri moduli e/o codici in quel file?



  • di Mister_x (utente non iscritto) data: 07/10/2015 00:10:08

    ciao

    stessa funzione di prima, ma con minor parametri da inserire in un modulo di classe e non nel modulo del foglio

    utilizzo i tuoi dati da A1:F1
    =aggiungest(",";A1:F1)

    a b c d e f a,b,c,d,e,f

    ciao
     
    Option Explicit
    Public Function AggiungeST(Stac As String, R_st As Range) As String
    Application.Volatile
    Dim cella As Variant
    Dim Stringa As String
    Stringa = ""
    For Each cella In R_st
       Stringa = Stringa & Stac & cella.Value
    Next
    AggiungeST = Trim(Mid(Stringa, Len(Stac) + 1, 1000))
    End Function