Note: The other languages of the website are Google-translated. Back to English

Cum se modifică automat dimensiunea formei în funcție de / depinde de valoarea specificată a celulei în Excel?

Dacă doriți să modificați automat dimensiunea formei pe baza valorii unei celule specificate, acest articol vă poate ajuta.

Schimbați automat dimensiunea formei pe baza valorii specificate a celulei cu codul VBA


Schimbați automat dimensiunea formei pe baza valorii specificate a celulei cu codul VBA

Următorul cod VBA vă poate ajuta să modificați o anumită dimensiune a formei pe baza valorii de celulă specificate în foaia de lucru curentă. Vă rugăm să faceți următoarele.

1. Faceți clic dreapta pe fila de foaie cu forma pe care trebuie să o modificați, apoi faceți clic pe Afișați codul din meniul cu clic dreapta.

2. În Microsoft Visual Basic pentru aplicații fereastră, copiați și lipiți următorul cod VBA în fereastra Cod.

Cod VBA: schimbarea automată a dimensiunii formei pe baza valorii de celulă specificate în Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Row = 2 And Target.Column = 1 Then
        Call SizeCircle("Oval 2", Val(Target.Value))
    End If
End Sub
Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

notițe: În cod, „Oval 2”Este numele formei pe care îi veți schimba dimensiunea. Și Rând = 2, Coloană = 1 înseamnă că dimensiunea formei „Oval 2” va fi modificată cu valoarea din A2. Vă rugăm să le schimbați după cum aveți nevoie.

Pentru redimensionarea automată a mai multor forme bazate pe valori de celule diferite, vă rugăm să aplicați codul VBA de mai jos.

Cod VBA: redimensionarea automată a mai multor forme pe baza valorii diferitelor celule specificate în Excel

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xAddress As String
    On Error Resume Next
    If Target.CountLarge = 1 Then
        xAddress = Target.Address(0, 0)
        If xAddress = "A1" Then
            Call SizeCircle("Oval 1", Val(Target.Value))
        ElseIf xAddress = "A2" Then
            Call SizeCircle("Smiley Face 3", Val(Target.Value))
        ElseIf xAddress = "A3" Then
            Call SizeCircle("Heart 2", Val(Target.Value))
        End If
    End If
End Sub

Sub SizeCircle(Name As String, Diameter)
    Dim xCenterX As Single
    Dim xCenterY As Single
    Dim xCircle As Shape
    Dim xDiameter As Single
    On Error GoTo ExitSub
    xDiameter = Diameter
    If xDiameter > 10 Then xDiameter = 10
    If xDiameter < 1 Then xDiameter = 1
    Set xCircle = ActiveSheet.Shapes(Name)
    With xCircle
        xCenterX = .Left + (.Width / 2)
        xCenterY = .Top + (.Height / 2)
        .Width = Application.CentimetersToPoints(xDiameter)
        .Height = Application.CentimetersToPoints(xDiameter)
        .Left = xCenterX - (.Width / 2)
        .Top = xCenterY - (.Height / 2)
    End With
ExitSub:
End Sub

note:

1) În cod, „Oval 1","Fața zâmbitoare 3"Și"Inima 3”Sunt numele formelor, le veți schimba automat dimensiunile. Și A1, A2 șiA3 sunt celulele pe care valorile le veți redimensiona automat pe baza formelor.
2) Dacă doriți să adăugați mai multe forme, vă rugăm să adăugați linii "ElseIf xAddress = "A3" Atunci" și „Dimensiunea apelului Cerc („ Heart 2 ”, Val (Target.Value))"deasupra primului"Final, dacă"linie în cod. Și modificați adresa celulei și numele formei în funcție de nevoile dvs.

3. presa Alt + Q tastele simultan pentru a închide Microsoft Visual Basic pentru aplicații fereastră.

De acum înainte, când modificați valoarea din celula A2, dimensiunea formei Oval 2 va fi modificată automat. Vedeți captura de ecran:

Sau modificați valorile din celula A1, A2 și A3 pentru a redimensiona automat formele corespunzătoare „Oval 1”, „Smiley Face 3” și „Heart 3”. Vedeți captura de ecran:

notițe: Dimensiunea formei nu se va mai modifica atunci când valoarea celulei este mai mare de 10.


Listează și exportă toate formele din registrul de lucru Excel curent:

Exportați grafică utilitatea Kutools pentru Excel vă ajută să listați rapid toate formele din registrul de lucru curent și le puteți exporta pe toate într-un anumit folder simultan, după cum se afișează imaginea de mai jos. Descărcați și încercați acum! (30- traseu liber de o zi)


Legate de articole:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (16)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum ați executa acest lucru cu mai multe forme, fiecare în funcție de celule diferite?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Jade,
Articolul este actualizat cu o nouă secțiune de cod care vă poate ajuta să executați mai multe forme, fiecare în funcție de celule diferite. Multumesc pentru comentariu.

Salutari,
Cristal
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum îmi denumesc forma? În exemplul tău de mai sus, cum atribui numele Oval 2 cercului pe care l-ai desenat?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Ranjit,
Pentru denumirea unei forme, vă rugăm să selectați această formă, introduceți numele formei în Caseta de nume și apoi apăsați tasta Enter. Vezi imaginea prezentată mai jos.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, cum pot replica același lucru pentru mai multe forme legate la mai multe celule din același modul?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Abhinaya,
Articolul este actualizat cu o nouă secțiune de cod care vă poate ajuta să executați mai multe forme, fiecare în funcție de celule diferite. Multumesc pentru comentariu.

Salutari,
Cristal
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Am încercat să folosesc postarea ta pentru a-mi scrie propriul cod VBA, dar nu se pare că ajung prea departe. În principal pentru că nu înțeleg cu adevărat VBA și încerc doar să vă adaptez. Mă întrebam dacă mă poți ajuta. Vreau să schimb lungimea unui dreptunghi în funcție de valoarea dintr-o celulă. Aș dori ca lățimea dacă dreptunghiul să rămână aceeași, dar lungimea să se schimbe. Aș dori ca ambele vârfuri din stânga să rămână în același loc și să se prelungească la dreapta. Este posibil?
mulțumesc
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dragă Lan,
Sper că următorul cod VBA vă poate rezolva problema. (Vă rugăm să înlocuiți ovalul 1 cu numele formei dvs.)

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
La data de eroare CV următoare
Dacă Target.Row = 2 Și Target.Column = 1 Atunci
Apel SizeCircle(„Oval 1”, Val(Target.Value))
Final, dacă
End Sub
Sub SizeCircle (nume ca șir, diametru)
Dim xCircle ca formă
Dim xDiametru ca singur
La eroare GoTo ExitSub
xDiametru = Diametru
Dacă xDiametru > 10, atunci xDiametru = 10
Dacă xDiametru < 1, atunci xDiametru = 1
Set xCircle = ActiveSheet.Shapes(Nume)
xCircle.ScaleWidth 1.5, msoFalse, msoScaleFromTopLeft
Cu xCircle
.LockAspectRatio = msoFalse
.Width = Application.CentimetersToPoints(xDiameter)
Se termina cu
ExitSub:
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, există o modalitate prin care pot face forma să se extindă pe două dimensiuni (în loc să măresc dimensiunea formei cu 5, măriți-o cu 5 pe orizontală și 3 pe verticală)?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Draga Sam,
Următorul script VBA vă poate ajuta să rezolvați problema. Și cele două dimensiuni sunt celula A1 și B1.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
La data de eroare CV următoare
Dacă Target.Count = 1 Atunci
Dacă nu se intersectează (țintă, interval ("A1:B1")) este nimic, atunci
Apelați SizeCircle(„Oval 2”, Array(Val(Range(„A1”).Value), Val(Range(„B1”).Value)))
Final, dacă
Final, dacă
End Sub
Sub SizeCircle (Nume ca șir, Arr ca variantă)
Dim I As Long
Dim xCenterX ca single
Dim xCenterY ca single
Dim xCircle ca formă
La eroare GoTo ExitSub
Pentru I = 0 La UBound(Arr)
Dacă Arr(I) > 10 Atunci
Arr(I) = 10
ElseIf Arr(I) < 1 Atunci
Arr(I) = 1
Final, dacă
Pagina Următoare →
Set xCircle = ActiveSheet.Shapes(Nume)
Cu xCircle
xCenterX = .Stânga + (.Lățimea / 2)
xCenterY = .Sup + (.Înălțime / 2)
.Width = Application.CentimetersToPoints(Arr(0))
.Height = Application.CentimetersToPoints(Arr(1))
.Stânga = xCenterX - (.Lățimea / 2)
.Sus = xCenterY - (.Înălțime / 2)
Se termina cu
ExitSub:
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Există vreo modalitate de a face asta cu imagini? Se pare că nu am noroc folosind codul postat.

5 Imagini dintr-un clasament, vreau ca Imaginile de pe primul loc sau de la egalitate pentru primul loc să fie mai mari. Prin urmare, am 1 dimensiuni de imagine fixe, fie 1x2 pentru nu primul, fie 1x2 pentru primul loc (de exemplu). Am clasamentul deja configurat, așa că îl pot folosi pentru a crea dimensiuni în anumite celule pentru fiecare imagine (adică utilizați o declarație IF, astfel încât IF RANK este lățimea prima dimensiune este 2). VBA-ul meu este însă destul de slab.

Practic, vreau - la actualizarea foii - să mă uit la celulele de dimensiunea imaginii și să setez fiecare dimensiune a imaginii la rezultatul specific al celulelor de dimensiunea imaginii. Nu pot vedea în VBA de mai sus cum funcționează exact, dar cred că ar trebui să fie ușor!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Crytal,

Aș dori să vă întreb dacă există o modalitate de a selecta culoarea (celula roșie = formă roșie) și numele din anumite celule. ar putea fi, de asemenea, posibil să se creeze formulare automat din VBA?

Multumesc mult anticipat :)

colinda
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Crytal
ce se întâmplă dacă să determinăm latura cubului, triunghiului, cutiei care trebuie determinată în funcție de lungime, lățime? Vă rog să mă ajutați

Va multumesc
chairil
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Chairil,
Îmi pare rău că nu te pot ajuta încă cu asta. Multumesc pentru comentariul tau.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Există vreo modalitate de a funcționa dacă celula pe care o utilizați pentru a seta dimensiunea este rezultatul unei formule, mai degrabă decât doar o valoare statică pe care o introduceți manual?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună mathnz, Codul VBA de mai jos vă poate ajuta să rezolvați problema. Trebuie doar să schimbați celulele de valoare și numele formelor din cod pe baza propriilor date.
Private Sub Worksheet_Calculate()
„Actualizat de Extendoffice 20211105
La data de eroare CV următoare
Apelați SizeCircle(„Oval 1”, Val(Range(„A1”).Valoare)) „A1 este celula valorii, Oval 1 este numele formei
Apelați SizeCircle(„Smiley Face 2”, Val(Range(„A2”).Value))
Apel SizeCircle(„Inima 3”, Val(Range(„A3”).Valoare))

End Sub
Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
Dim xAddress ca șir
La data de eroare CV următoare
Dacă Target.CountLarge = 1 Atunci
xAdresa = Target.Address(0, 0)
Dacă xAdresă = "A1" Atunci
Apel SizeCircle(„Oval 1”, Val(Target.Value))
ElseIf xAddress = "A2" Atunci
Apelați SizeCircle(„Smiley Face 2”, Val(Target.Value))
ElseIf xAddress = "A3" Atunci
Apel SizeCircle(„Inima 3”, Val(Valoare.țintă))

Final, dacă
Final, dacă
End Sub

Sub SizeCircle (nume ca șir, diametru)
Dim xCenterX ca single
Dim xCenterY ca single
Dim xCircle ca formă
Dim xDiametru ca singur
La eroare GoTo ExitSub
xDiametru = Diametru
Dacă xDiametru > 10, atunci xDiametru = 10
Dacă xDiametru < 1, atunci xDiametru = 1
Set xCircle = ActiveSheet.Shapes(Nume)
Cu xCircle
xCenterX = .Stânga + (.Lățimea / 2)
xCenterY = .Sup + (.Înălțime / 2)
.Width = Application.CentimetersToPoints(xDiameter)
.Height = Application.CentimetersToPoints(xDiameter)
.Stânga = xCenterX - (.Lățimea / 2)
.Sus = xCenterY - (.Înălțime / 2)
Se termina cu
ExitSub:
End Sub

Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL