Condividi tramite

Problema con Macro VBA su Forme con Testo in Excel

Anonimo
2025-04-27T16:18:35+00:00

Sto riscontrando un problema con una macro VBA in Excel che interagisce con una forma (un rettangolo con angoli arrotondati) su un foglio di lavoro. La macro deve nascondere o mostrare delle colonne in base al testo contenuto nella forma quando questa viene cliccata.

La macro funziona correttamente se utilizzata in modo tradizionale, ma quando applicata alla forma, non sembra rilevare né cambiare il testo della forma come previsto. Inoltre, le colonne non vengono nascoste o mostrate come indicato dal codice.

il nome della forma è esattamente "Rettangolo con angoli arrotondati 27" e che il testo della forma può essere "Mostra V" o "Mostra M".

Ho tentato di utilizzare TextFrame2.HasText e TextFrame2.TextRange.Text per rilevare e modificare il testo all'interno della forma. Tuttavia, nonostante la forma sia visibile e il testo leggibile, il codice non rileva il testo e non modifica il comportamento delle colonne.

Ho implementato il codice per cambiare il testo della forma utilizzando TextFrame2.TextRange.Text per accedere e modificare il testo. Inoltre, abbiamo cercato di attivare l'interazione con la forma tramite la macro, ma nulla è cambiato: né il testo della forma né le colonne sono stati modificati.

Ho anche verificato che la protezione del foglio fosse correttamente gestita, sbloccando e proteggendo nuovamente il foglio con una password (presente nel foglio "Gestione"). Anche in questo caso, il problema persiste.

Nonostante le modifiche e le verifiche effettuate, il testo della forma non viene rilevato correttamente dal codice VBA, e le colonne non vengono nascoste o mostrate come previsto. Inoltre, gli errori riscontrati sono stati:

l elemento corrispondente al nome specificato non è stato trovato.

proprieta' o metodo non supportati dall oggetto.

( DEBUG: If forma.TextFrame.HasText Then ' Verifica se la forma contiene testo )

MACRO:

Sub GestioneColonneForma() 

    Dim ws As Worksheet 

    Dim wb As Workbook 

    Dim correctpassword As String 

    Dim gestioneSheet As Worksheet 

    Dim forma As Shape 

    ' Disattiva aggiornamento schermo per maggiore fluidità 

    Application.ScreenUpdating = False 

    ' Definisce il foglio attivo e la cartella di lavoro 

    Set ws = ActiveSheet 

    Set wb = ThisWorkbook 

    ' Recupera la forma attiva (la forma che ha generato l'evento) 

    Set forma = ws.Shapes(Application.Caller) 

    ' Protezione e sblocco del foglio 

    On Error Resume Next 

    Set gestioneSheet = wb.Sheets("Gestione") 

    On Error GoTo 0 

    If gestioneSheet Is Nothing Then 

        MsgBox "Foglio 'Gestione' non trovato.", vbExclamation 

        Exit Sub 

    End If 

    correctpassword = gestioneSheet.Range("E4").Value 

    ws.Unprotect Password:=correctpassword 

    ' Gestione delle colonne sulla base del testo della forma 

    If forma.TextFrame2.TextRange.Text = "Mostra V" Then 

        ' Nasconde colonne C, F, I, M, O, Q, U, W 

        ws.Columns("C").Hidden = True 

        ws.Columns("F").Hidden = True 

        ws.Columns("I").Hidden = True 

        ws.Columns("M").Hidden = True 

        ws.Columns("O").Hidden = True 

        ws.Columns("Q").Hidden = True 

        ws.Columns("U").Hidden = True 

        ws.Columns("W").Hidden = True 

        ' Scopre colonne D, G, J, N, P, R, V, X 

        ws.Columns("D").Hidden = False 

        ws.Columns("G").Hidden = False 

        ws.Columns("J").Hidden = False 

        ws.Columns("N").Hidden = False 

        ws.Columns("P").Hidden = False 

        ws.Columns("R").Hidden = False 

        ws.Columns("V").Hidden = False 

        ws.Columns("X").Hidden = False 

        ' Cambia il testo della forma 

        forma.TextFrame2.TextRange.Text = "Mostra M" 

    ElseIf forma.TextFrame2.TextRange.Text = "Mostra M" Then 

        ' Scopre colonne C, F, I, M, O, Q, U, W 

        ws.Columns("C").Hidden = False 

        ws.Columns("F").Hidden = False 

        ws.Columns("I").Hidden = False 

        ws.Columns("M").Hidden = False 

        ws.Columns("O").Hidden = False 

        ws.Columns("Q").Hidden = False 

        ws.Columns("U").Hidden = False 

        ws.Columns("W").Hidden = False 

        ' Nasconde colonne D, G, J, N, P, R, V, X 

        ws.Columns("D").Hidden = True 

        ws.Columns("G").Hidden = True 

        ws.Columns("J").Hidden = True 

        ws.Columns("N").Hidden = True 

        ws.Columns("P").Hidden = True 

        ws.Columns("R").Hidden = True 

        ws.Columns("V").Hidden = True 

        ws.Columns("X").Hidden = True 

        ' Cambia il testo della forma 

        forma.TextFrame2.TextRange.Text = "Mostra V" 

    End If 

    ' Riprotegge il foglio 

    ws.Protect Password:=correctpassword 

    ' Riattiva aggiornamento schermo 

    Application.ScreenUpdating = True 

End Sub
Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

1 risposta

Ordina per: Più utili
  1. Anonimo
    2025-04-28T05:52:18+00:00

    Ciao,

    ho fatto una prova e a me l'utilizzo di ".TextFrame2.TextRange.Text" consente di leggere il testo inserito (e anche di modificarlo).

    L'utilizzo di ".HasText" restituisce 0 se non è presente testo e -1 se presente testo.

    Con ".TextFrame" per avere il testo va utilizzata l'istruzione ".TextFrame.Characters.Text" che se presente testo lo restituisce.

    Il problema, credo, dipenda da "Application.Caller" che, se utilizzi il nome assegnato in automatico del rettangolo senza abbreviarlo, non restituisce tutto il nome.

    Ho fatto una prova è questo il testo restituito: "Rettangolo con angoli arrotond".

    La conseguenza che il "set" non va a buon fine.

    Prova a modificare in nome con "Forma27" o altro nome breve.

    La risposta è stata utile?

    0 commenti Nessun commento