› Sviluppare funzionalita su Microsoft Office con VBA › formula non calcolata
-
AutoreArticoli
-
In una tabella di database sotto sqlexpress, un campo viene riempito con la stringa
=concatenate("string1)";Char(10);"String2")
la tabella viene quindi esportata in excel con un semplice CopyRecordSet. Tutto ok, ma il campo di cui sopra è riportato fedelmente nella cella corrispondente e NON VIENE calcolato. Non si riesce a farlo calcolare neanche selezionandolo e cliccando F9. L'unico modo per farlo calcolare è editandolo: anche senza modificare nulla, basta entrare col cursore nella stringa e premere Invio e la formula viene correttamente calcolata. Naturalmente, questa non può essere una soluzione: se scrivo quella stringa, è perchè la vorrei eseguita automaticamente. C'è qualche regola per cui stringhe simili importate da sql non vengono interpretate come formule?
Nota: la cella excel è formato General (ho provato anche number, non cambia niente). Ovviamente, excel è configurato per ricalcolo automatico
Grazie per qualunque idea o sughgerimento
Senza vedere il File è difficile , prova a vedere se il calcolo automatico è attivo
Mi sembra di aver scritto nelle note che ovviamente excel è configurato per il calcolo automatico. E comunque, tanto per essere sicuro, ho riscritto la formula pari pari in un'altra cella, e questa vien calcolata subito senza problemi. D'altronde, se solo l'editing causa il ricalcolo, non c'è da stupirsi.
Mi sembra di aver scritto nelle note che ovviamente excel è configurato per il calcolo automatico. E comunque, tanto per essere sicuro, ho riscritto la formula pari pari in un'altra cella, e questa vien calcolata subito senza problemi. D'altronde, se solo l'editing causa il ricalcolo, non c'è da stupirsi.
Quando selezioni la cella clicchi invio , il calcolo viene sempre eseguito anche se è disattivato
Se riesci
Allega il foglio con la formula
Non lo metto in dubbiio, ma se scrivo la formula ed esco senza invio, ma con le frecce (p.es.), il,calcolo viene comunque effettuato.
Per il codice, non saprei bene che cosa intendi. Come dicevo, costruisco la stringa in VBA access e la metto dentro il campo giusto della tabella SQLExpress. Poi la trasferisco su Excel, principalmente perchè lì è più facile pastrugnare sui dati con le pivot. Il trasferimento avviene col codice seguente
SQLStr = "SELECT * FROM LibroSoci" Set Cn = New ADODB.Connection ' Cn.Open "Driver={SQL Server Native Client 11.0};Server=" & Server_Name & ";Database=" & Database_Name & _ ' ";Uid=" & User_ID & ";Pwd=" & Password & ";" Cn.Open "Driver={SQL Server Native Client 11.0};Server=" & Server_Name & ";Database=" & Database_Name & _ ";TRUSTED_CONNECTION=YES;" rs.Open SQLStr, Cn, adOpenStatic ' Dump to spreadsheet With Worksheets("LibroSoci") If Not .ListObjects("TableLibroSoci").DataBodyRange Is Nothing Then .ListObjects("TableLibroSoci").DataBodyRange.Delete ' Enter your sheet name and range here End If .Range("A2").CopyFromRecordset rs Application.CalculateFull Set tbl = .ListObjects("TableLibroSoci") End Withma qui non ci sono problemi. Questo è il codice che crea la stringa, ma è abbastanza banale
If (IsNull(Me.Carta_d_identità_Num)) Or (IsNull(Me.Scadenza_CI)) Then Me.Note = "mancano dati CI" End If If (IsNull(Me.Titolo_di_studi)) Then If IsNull(Me.Note) Then Me.Note = "manca titolo di studi" Else Me.Note = Me.Note & """;char(10)" & ";" & """manca titolo di studi" End If End If If (IsNull(Me.Telefono_casa)) And (IsNull(Me.Telefono_cellulare)) And (IsNull(Me.e_mail)) Then If IsNull(Me.Note) Then Me.Note = "manca almeno un riferimento di contatto" Else Me.Note = Me.Note & """;char(10) & " & ";" & """manca almeno un riferimento di contatto" End If End If If IsNull(Me.Note) Then rsLibroSoci![Colonna1] = Me.Note Else rsLibroSoci![Colonna1] = "=concatenate(""" & Me.Note & """)" End IfComunque il risultato è che nel file excel, nella cella giusta, viene riportata la stringa generata (figura?). La formula è corretta, altrimenti non verrebbe eseguita con l'INVIO, ma non si calcola automaticamente. Forse excel rifiuta di considerare formule le stringhe che gli arrivano dall'esterno? Non saprei che altro dirti, mi aspettavo che la formula venisse calcolata, e invece no. Ti ringrazio per la pazienza e la gentilezza
Allegati:
You must be logged in to view attached files.va formatta in questo modo
non in General
=Format(concatenate("string1)";Char(10);"String2"),"yyyy-mm-dd")
oppure così prova
=Format(concatenate("string1)";Char(10);"String2"),"dd-mm-yyyy")
Così? Ma non funziona lo stesso. Non è general, è number, ma non cambia niente.Sbaglio qualcosa. Ma perchè formattarlo a data?
Poi format non è una funzione, quindi =format ... dà comunque errore.
Allegati:
You must be logged in to view attached files.Puoi salvare in un'altra file Excel ed allegarlo? Senza dati sensibili
Per Raffaele53. Devo assumere che tu intenda il file excel dove vado ad importare la tabella, quindi lo sheet destinazione del CopyRecordSet. Si tratta di uno sheet con circa 1700 righe e oltre 35 colonne, contenente i dati dei soci di un circolo locale.Se ti basta, posso eliminare tutte le righe tranne le ultime che sono comunque fasulle (pinco pallino e paperino). Il resto dello workbook contiene la macro per importare il file da sqlexpress (che ho già trascritto) e una serie di fogli con pivot tables, che non credo interessino.
Grazie dell' attenzione.
Allegati:
You must be logged in to view attached files.Prima o poi, dovrò aggiornare Excel2013 perchè "concatenate" da me non esiste ed il fatto che non sia in MAIUSCOLO mi fà molto pensare... Se Vuoi riprovare usando solo la formula =CONCATENA("mancano dati CI";char(10);"manca titolo di studi")
1) Per caso usi una Function Concatenate(), nel foglio allegato non può funzionare dato che è un XLSX
2) A me risulta che per aggiungere un a-capo, in VBA si usa >>>Chr(10) senza "a". Però non l'ho mai visto fare in una formula. Solo tramite VBA, seleziona una cella vuota e avvia il codiceFunction Concatenate() Dim A As String Dim B As String Dim AB As String A = "mancano dati CI" B = "manca titolo di studi" AB = A & Chr(10) & B ActiveCell = AB End FunctionSe la cosa può consolarti,,ecco che cosa dice l'help di concatenate:
Use CONCATENATE, one of the text functions, to join two or more text strings into one string.
Important: In Excel 2016, Excel Mobile, and Excel for the web, this function has been replaced with the CONCAT function. Although the CONCATENATE function is still available for backward compatibility, you should consider using CONCAT from now on. This is because CONCATENATE may not be available in future versions of Excel.
Poi scopro che in excel 2016 (quello che uso) CONCAT non esiste e non viene riconosciuta (#NAME?).
Comunque, prima di provare col tuo codice (vedi sotto) non c'era differenza fra maiuscole e misuscole, e concatenate funziona benissimo, come avrai potuto vedere o entrando nella stringa col cursore e premendo invio, o riscrivendo pari pari la formula in un'altra cella. Quindim anche CHAR(19) dovrebbe essere ok.
Il file è un xslx perchè ho estratto solo lo sheet che interessava dal file completo xslm. comunque, non ho ridefinito concatenate, se è questo il dubbio.
Ho provato ilò tuo codice, e ho qualche difficoltà di compensione.
1) ho rinominato il file in xlsm
2) ho creato la macro, nome conc(), eliminando ovviamente la riga sub concatenate () e l'ultima end function.
Function Conc() Dim A As String Dim B As String Dim AB As String A = "mancano dati CI" B = "manca titolo di studi" AB = A & Chr(10) & B ActiveCell = AB End Function3) per qualche motivo, la macro non compare nella lista, ma scrivendo calc() e cliccando run, viene eseguita (Mistero)
4) eseguendo la macro su una cella qualsiasi, il risultato è corretto (chr va bene)
5) se invece nella cella scrivo =conc(), il testo rimane lì senza essere eseguito
6) se lascio la macro con nome concatenate (minuscolo) e scrivo =concatenate() il testo rimane lì senza essere eseguito e senza segnalare errori; in questo caso =CONCATENATE in maiuscolo richiama invece la funzione excel, e chiede i parametri
7) se scrivo =CONCATENATE("String1";CHR(19);"String2") ottengo un #NAME?, cHR non viene riconosciuto.
Francamente, sono perplesso, devo rimuginare un po' Grazie comunque. A me pare ci sia un po' di confusione, ma probabilmente sono io che non ho capito qualcosa
Non va scritto così
=CONCATENATE("String1";CHR(19);"String2")
Ma così
=CONCATENATE("String1"&CHR(19)&"String2")
Nella formula Concatenate non si usa (:) ma la congiunzione &
Direi di no. CONCATENATE vuole i parametri separati da ";" o ",", a seconda della versione di excel (Italia o US); l'help della funzione spiega chiaramente che O usi Concatenate O ne fai a meno e usi l'operatore &. Ecco un pezzo dell'help.
=CONCATENATE(B3, " & ", C3)
Joins three things: the string in cell B3, a string consisting of a space with ampersand and another space, and the value in cell C3. The result is Fourth & Pine.
=B3 & " & " & C3
Joins the same items as the previous example, but by using the ampersand (&) calculation operator instead of the CONCATENATE function. The result is Fourth & Pine.
Comunque, ho provato anche senza Concatenate e con &, ma il rfisultato non cambia. Grazie dell'attenzione.
Così la usi come codice in Macro no come formula
hai provato con la , Virgola non i : due Punti
Senza il file originale è difficile anche capire
Il Char(10) oppure Chr(10) è il simbolo dell'acapo
Non sono in grado di creare Function, questa l'ho trovata in rete e per usarla basta scrivere =conc(A1:A5;";"). Con questa non risolvi nulla, ci vorrebbe un'altra Function che elabora le stringhe inserite divise dal ";" tipo >>> =Concatenate2("aaa";"bbb";"ccc"). Premesso che non ho la risposta giusta, secondo me devi solo scrivere
="mancano dati CI" & CODICE.CARATT(10) & "manca titolo di studi"
NB. Devi formattare le celle con "TESTO A CAPO"Ps. Il fatto che i dati arrivano (presumo Access/Query) non sò dirTi altro
Function CONC(Ref As Range, Separator As String) As String Dim Cell As Range Dim Result As String For Each Cell In Ref Result = Result & Cell.Value & Separator Next Cell CONC = Left(Result, Len(Result) - 1) End FunctionOscar, non ho usato i due punti, ma il punto e virgola. Poi, se scrivo con la virgola, vien fuori un errore.
=CONCATENATE ("String1) & CHAR(10) & "String2")
=CONCATENATE("String1";CHAR(10);"String2")
e
="String1" & CHAR(10) & "String2"
danno lo stesso risultato, e occorre il wrap text per vedere le due linee, come giustamente fa notare Raffaele. Il problema rimane: qualunque delle tre mando da sqlexpress a excel, la stringa (peraltro corretta) rimane lì a far nulla.
Ci penserò ancora.
Non so che dire ma vedi esempio
Sinceramente non ho ancora capito cosa devi ottenere
Allegati:
You must be logged in to view attached files.Scusa Oscar, non ho capito che dcosa vuoi dimostrare con il tuo esempio. Che =@CONCATENATE dia errore è evidente, l'altro non dice niente di nuovo.
Il problema, che mi sembra di aver già chiarito, è che la stringa (qualunque delle tre equivalenti) che arriva ad EXcel tramite il dump dalla tabella sotto SQLExpress viene correrttamente recepita nella cella ma non viene riconosciuta come formula, se non andandoci dentro e premendo invio (cioè editandola). Vorrei solo ottenere che venisse elaborata automaticamernte come formula.
A questo punto devo dedurre che excel per qualche motivo rifiuta di considerare formula qualunque stringa gli arrivi dall'esterno. Non si riesce a farla eseguire nemmeno con F9, che potrebbe essere simulato via VBA.
Probabilmente è colpa del CopyRecordSet, potresti provare a copiare i singoli elementi in altre celle libere e poi concatenarli ed inserirli nella cella giusta tramite macro su excel
Scusa Oscar, non ho capito che dcosa vuoi dimostrare con il tuo esempio. Che =@CONCATENATE dia errore è evidente, l'altro non dice niente di nuovo.
Il problema, che mi sembra di aver già chiarito, è che la stringa (qualunque delle tre equivalenti) che arriva ad EXcel tramite il dump dalla tabella sotto SQLExpress viene correrttamente recepita nella cella ma non viene riconosciuta come formula, se non andandoci dentro e premendo invio (cioè editandola). Vorrei solo ottenere che venisse elaborata automaticamernte come formula.
A questo punto devo dedurre che excel per qualche motivo rifiuta di considerare formula qualunque stringa gli arrivi dall'esterno. Non si riesce a farla eseguire nemmeno con F9, che potrebbe essere simulato via VBA.
Credo di aver capito
Ma senza il File originale sarà dura si va sempre solo a tentativi
-
AutoreArticoli
