2012-03-06 16 views
11

Come posso interrompere un ridimensionamento del pulsante? Ogni volta che clicco sul pulsante, cambia la dimensione del pulsante o la dimensione del carattere.Il pulsante VBA Excel si ridimensiona dopo aver fatto clic su di esso (pulsante di comando)

Nota: non riesco a bloccare il mio foglio perché la mia macro scriverà sul foglio.

L'autosize è disattivato. Eseguo Excel 2007 su Windows 7 (64 bit).

+0

Perché non riesci a bloccare il foglio? Dovresti essere in grado di utilizzare VBA per eseguire questa attività. Sheet.Protect/Sheet.Unprotect (esiste anche una variabile password opzionale che è possibile passare) – Gaffi

+1

I problemi non vengono risolti bloccando poiché Windows sembra non eccellere. Vedere le risposte a domande simili qui: http://stackoverflow.com/q/1573349/1047635 –

risposta

0

utilizzare un pulsante Forme piuttosto che un ActiveX uno, controlli ActiveX casualmente si comportano male su fogli

+0

Sta usando un pulsante ActiveX? Ho visto questo problema una volta prima (ho finito per spostare tutto su un nuovo foglio, credo) senza usare il pulsante ActiveX. – Gaffi

6

Uso quanto segue per ListBoxes. Lo stesso principio per i pulsanti; adattarsi come appropriato.

Private Sub myButton_Click() 
    Dim lb As MSForms.ListBox 
    Set lb = Sheet1.myListBox 

    Dim oldSize As ListBoxSizeType 
    oldSize = GetListBoxSize(lb) 

    ' Do stuff that makes listbox misbehave and change size. 
    ' Now restore the original size: 
    SetListBoxSize lb, oldSize 
End Sub 

Questo utilizza il seguente tipo e le procedure:

Type ListBoxSizeType 
    height As Single 
    width As Single 
End Type 

Function GetListBoxSize(lb As MSForms.ListBox) As ListBoxSizeType 
    GetListBoxSize.height = lb.height 
    GetListBoxSize.width = lb.width 
End Function 

Sub SetListBoxSize(lb As MSForms.ListBox, lbs As ListBoxSizeType) 
    lb.height = lbs.height 
    lb.width = lbs.width 
End Sub 
0

Avete un comando di selezione nella macro bottoni?

Poco dopo aver rinominato alcune celle in un foglio di lavoro, incluso uno che viene selezionato dal pulsante di attivazione dopo la sua attivazione, la dimensione del carattere viene ridotta. Ho risolto questo problema assicurandomi che Range ("..."). Seleziona incluso il nome della nuova cella, non le coordinate.

0

Accade quando la risoluzione dello schermo/le impostazioni cambiano dopo che Excel è stato aperto.

Ad esempio:

  1. Aprire una cartella di lavoro che ha un pulsante su di esso
  2. Entra con Desktop remoto da un computer dotato di schermo diverso
  3. Fare clic sul pulsante => le dimensioni del pulsante sarà cambia

L'unica soluzione che ho trovato è chiudere Excel e riaprirlo con le nuove impostazioni dello schermo. Tutte le istanze di Excel devono essere chiuse, inclusa l'istanza invisibile eseguita da altri processi senza che l'interfaccia debba essere eliminata.

+0

Nel mio caso, sebbene sia almeno in parte correlato all'utilizzo di schermate con risoluzioni diverse, questo problema non richiede la modifica della risoluzione _dopo che Excel è stato aperto_. Excel 2007 su Windows 10, questo problema è iniziato quando ho iniziato a utilizzare un monitor esterno con il mio portatile, ma non cambio mai il monitor o cambio risoluzione comunque dopo l'apertura di Excel. Monitor esterno collegato (e Windows impostato su "Solo schermo esterno", quindi utilizzato solo monitor esterno), accendere il PC, aprire Excel, consentire macro, fare clic su qualsiasi pulsante, si riduce sia in termini di dimensioni che di carattere. – SantiBailors

0

Vecchio problema, ma sembra ancora essere un problema per quelli di noi bloccati su Excel 2007. Avevo lo stesso problema su ActiveX Listbox Object e avrebbe espanso le sue dimensioni su ogni ricalcolo. La proprietà LinkCells stava cercando un intervallo dinamico (offset) per i suoi valori. Ristrutturare in modo che fosse alla ricerca di un intervallo normale ha risolto il problema.

3

ho aggiunto un po 'di codice alla fine del onClick così:

CommandButton1.Width = 150 
CommandButton1.Height = 33 
CommandButton1.Font.Size = 11 

sembra funzionare.

Ho ottenuto il problema in un modo leggermente diverso. Aprendo la cartella di lavoro sul display del mio portatile principale, quindi spostandola sul mio grande monitor. Stessa causa della radice, direi.

+0

Questa è una buona idea. Il mio problema è che, dato che il problema dei clic si accumula, devo impostare 'Font.Size = 200' per vedere il testo. Non sono * impressionato * da Microsoft, poiché questo problema sembra esistere già da diversi anni. – Holene

+0

Se utilizzo un controllo ActiveX il tuo codice funziona. Al contrario, se utilizzo una forma (ad esempio, un cerchio, un quadrato) e assegno una macro, il tuo codice non funziona. Ho sostituito CommandButton1 con il nome della forma (ad esempio, rettangolo2) ma non funziona. Mi puoi aiutare? Grazie. – Marco

0

Ho avuto questo problema con Excel 2013. Tutto per funzionare bene per un lungo periodo di tempo e all'improvviso, quando ho fatto clic sul pulsante (ActiveX), è diventato più grande e il font è diventato più piccolo allo stesso tempo.

Senza salvare il file, ho riavviato il mio computer e ho riaperto lo stesso file Excel e tutto va bene.

0

miniera ridimensionata dopo la stampa e cambiando lo zoom ridisegnato lo schermo e ha risolto il tutto

ActiveWindow.Zoom = 100 
ActiveWindow.Zoom = 75 
0

visto questo problema in Excel 2007, 2010 e il 2013

Questo codice impedisce il problema di manifestarsi. Il codice deve essere eseguito ogni volta che viene attivato un oggetto X attivo.

Sub Shared_ObjectReset() 

    Dim MyShapes As OLEObjects 
    Dim ObjectSelected As OLEObject 

    Dim ObjectSelected_Height As Double 
    Dim ObjectSelected_Top As Double 
    Dim ObjectSelected_Left As Double 
    Dim ObjectSelected_Width As Double 
    Dim ObjectSelected_FontSize As Single 

    ActiveWindow.Zoom = 100 

    'OLE Programmatic Identifiers for Commandbuttons = Forms.CommandButton.1 
    Set MyShapes = ActiveSheet.OLEObjects 
    For Each ObjectSelected In MyShapes 
     'Remove this line if fixing active object other than buttons 
     If ObjectSelected.progID = "Forms.CommandButton.1" Then 
      ObjectSelected_Height = ObjectSelected.Height 
      ObjectSelected_Top = ObjectSelected.Top 
      ObjectSelected_Left = ObjectSelected.Left 
      ObjectSelected_Width = ObjectSelected.Width 
      ObjectSelected_FontSize = ObjectSelected.Object.FontSize 

      ObjectSelected.Placement = 3 

      ObjectSelected.Height = ObjectSelected_Height + 1 
      ObjectSelected.Top = ObjectSelected_Top + 1 
      ObjectSelected.Left = ObjectSelected_Left + 1 
      ObjectSelected.Width = ObjectSelected_Width + 1 
      ObjectSelected.Object.FontSize = ObjectSelected_FontSize + 1 

      ObjectSelected.Height = ObjectSelected_Height 
      ObjectSelected.Top = ObjectSelected_Top 
      ObjectSelected.Left = ObjectSelected_Left 
      ObjectSelected.Width = ObjectSelected_Width 
      ObjectSelected.Object.FontSize = ObjectSelected_FontSize 

     End If 
    Next 

End Sub 
+1

Sembra che tu abbia dimenticato di formattare tutto il codice nel tuo esempio. A partire da 'Sub Shared_ObjectReset()' e termina con 'EndSub'. – nicorellius

0

(Excel 2003)

Mi sembra ci sono due questioni diverse: - il ridimensionamento del testo di un pulsante quando si fa clic su di esso (anche se non sempre, non so perché), e - modifica della dimensione dei pulsanti TUTTI, quando si apre la cartella di lavoro su un display con una risoluzione diversa (che sussiste anche quando si ritorna al display iniziale).

Per quanto riguarda il problema di ridimensionamento individuale: ho scoperto che è sufficiente modificare una dimensione del pulsante per "ringiovanire". Come ad esempio:

myButton.Height = myButton.Height + 1 
myButton.Height = myButton.Height - 1 

Si può mettere in clic sub di ogni pulsante ("MyButton_Click"), oppure implementarlo un costume Classe per l'evento "onClick".

Problemi correlati