Newsgroup: it.comp.appl.access
Titolo: Concatenazioni di stringhe

Un saluto a tutti i partecipanti al NG.
Ho un problema di questo genere.
Premetto che ho un'infarinatura di VBA come autodidatta.
Data una stringa "ABC", avrei bisogno di una funzione che mi creasse tutte
le possibili concatenazioni :
ACB
BAC
BCA
CAB
CBA
e le elencasse in una Casella di riepilogo.
Grazie per qualsiasi consiglio che mi indirizzi sulla strada giusta.
Saluto tutti.
Daniele

 e le elencasse in una Casella di riepilogo.
Per questo, una volta che hai una routine che ti crei l'elenco, puoi creare
una tabella temporanea o caricare la casella di riepilogo con l'apposita
procedura di Access:
(Dall'help)
La funzione definita dall'utente riportata di seguito restituisce un elenco
dei quattro lunedì successivi alla data odierna. Per chiamare tale funzione
dal controllo di una casella di riepilogo, immettere ElencoLunedì come
impostazione della proprietà TipoOrigineRiga e lasciare vuota l'impostazione
della proprietà OrigineRiga.
Function ElencoLunedì(campo As Control,id As Variant,riga As Variant,col As
Variant,codice As Variant) As Variant
 Dim intOffset As Integer
 Select Case code
  Case acLBInitialize   ' Inizializza.
   ElencoLunedì = True
  Case acLBOpen     ' Apre.
   ElencoLunedì = Timer ' ID univoco.
  Case acLBGetRowCount   ' Ottiene righe.
   ElencoLunedì = 4
  Case acLBGetColumnCount ' Ottiene colonne.
ElencoLunedì = 1
  Case acLBGetColumnWidth ' Larghezza colonne.
   ElencoLunedì = -1   ' Usa larghezza             ' predefinita.
  Case acLBGetValue    ' Ottiene i dati.
   intOffset = Abs((9 - GiornoSettimana(Ora))Mod 7)
   ElencoLunedì = Format(Ora() + intOffset + 7 * riga,"mmmm d")
 End Select
End Function
Strutturanto una function come questa si puo' riempire dinamicamente una
casella di riepilogo.
Sib


Sib ti ringrazio per l'aiuto.
Ciao - Daniele


Vedi l'altro thread
Michele Amato

 CBA
Guarda, ho trovato il tempo di riflettere sul tuo problema, ne e' venuto
fuori questo modulo (che potrai chiamare "Permutazioni") che fa il calcolo,
a te resta da adattare l'output alle tue esigenze:
##############################################################
Option Compare Database
Option Explicit
Function Permuta(Parola() As String) As String
Dim intI, intJ, intN, intL As Integer
Dim stPrima, stDopo As String
Dim stParola() As String
    intL = Len(Parola(1))
    intN = Fact(intL - 1)
    ReDim stParola(intN)
    stParola(1) = Right(Parola(1), intL - 1)
    If Len(stParola(1)) > 1 Then Permuta stParola()
    For intJ = 1 To intL
        For intI = 1 To intN
            stPrima = Left(stParola(intI), intJ - 1)
            stDopo = Right(stParola(intI), intL - intJ)
            Parola(intJ + (intI - 1) * intL) = stPrima & Left(Parola(1), 1)
& stDopo
        Next intI
    Next intJ
End Function
Function Fact(intI As Integer) As Long
Dim intJ As Integer
Fact = 1
    For intJ = 1 To intI
        Fact = Fact * intJ
    Next intJ
End Function
Function CalcPerm(ByVal a As String) As String
Dim p() As String
Dim i As Integer
    If Len(a) > 7 Then
        MsgBox "Parola troppo lunga!", vbCritical, "Attenzione"
        Exit Function
    End If
    ReDim p(Fact(Len(a)))
    p(1) = a
    Permuta p()
    For i = 1 To Fact(Len(a))
        Debug.Print p(i)
    Next i
End Function
###############################################################

 Option Explicit
cut
Dimenticavo, per capire come funziona, apri la finestra "Immediata" e
scrivi:
calcperm "ABCD"
Non accetta piu' di 7 caratteri se no va in over e oltretutto avrebbe poco
senso calcolare migliaia e migliaia di combinazioni per una casella di
riepilogo.
Sib