मैं पावरपॉइंट वीबीए का उपयोग करके कोडिंग कर रहा हूं और टेक्स्ट को आयताकार आकार के अंदर रखने की कोशिश कर रहा हूं, लेकिन सुनिश्चित करें कि टेक्स्ट फिट बैठता है (इसलिए कोई अतिप्रवाह नहीं है)। मैं नहीं चाहता कि आकार का आकार स्वयं बदल जाए, लेकिन पाठ का आकार बदलना है।

मैंने देखा है कि मैं उपयोग कर सकता हूँ

oShp.TextFrame2.AutoSize = msoAutoSizeTextToFitShape

हालाँकि, इसके साथ समस्या यह है कि टेक्स्ट का आकार तभी बदलेगा जब उपयोगकर्ता ने टेक्स्टबॉक्स पर क्लिक किया होगा जब पावरपॉइंट सामान्य मोड में होगा। जब PowerPoint चल रहा हो तो मुझे यह कार्यक्षमता चाहिए!

मैं यह जानकर आभारी रहूंगा कि टेक्स्ट को स्वचालित रूप से आकार देने का कोई तरीका है या क्या मुझे वैकल्पिक विधि खोजने की ज़रूरत है?

किसी भी टिप्पणी के लिए धन्यवाद!

0
Alec Armstrong 22 जुलाई 2020, 01:17

2 जवाब

सबसे बढ़िया उत्तर

मैंने सोचा कि मैं अपने प्रश्न का उत्तर दूंगा और सूत्र बंद कर दूंगा। बहुत शोध करने के बाद मैंने पाया कि पावरपॉइंट शो चलने पर टेक्स्ट को स्वतः आकार बदलने के लिए कोई स्पष्ट तरीका नहीं था। मैंने कई दृष्टिकोणों की कोशिश की उदा। टेक्स्ट सम्मिलित करना, टेक्स्ट को ट्रिम करना और वर्ड रैप को बंद और चालू करना - हालांकि, इनमें से किसी ने भी काम नहीं किया। मैं ध्यान देता हूं (भावेश) मैं पूरी तरह से जानता था कि पावरपॉइंट के जीयूआई के माध्यम से ऑटो-साइज टेक्स्ट सेटिंग्स का चयन कैसे करें।

अंत में मेरा समाधान डू लूप बनाना और टेक्स्ट का आकार बदलना था।

नीचे मैंने अपनी प्रमुख पंक्तियों को इस उम्मीद में चिपकाया है कि यह किसी और की मदद कर सकता है जो ऐसा करने की कोशिश कर रहा है। मैंने एक चर अतिप्रवाह बनाया है जो यह आकलन करने का प्रयास करता है कि आकृति के टेक्स्टबॉक्स की ऊंचाई आयत के आकार से बड़ी है या नहीं।

Dim overflow As Integer
Dim counter As Integer    

counter = 0

With ActivePresentation.Slides(i).Shapes(stringToTest)
                    
overflow = CInt((.TextFrame.TextRange.BoundHeight) - (.Height - .TextFrame.MarginTop - .TextFrame.MarginBottom))
                    
Do While overflow > 16 And counter < 50
'*** I note that the shape is overflowing when its value is >0 but I found 16 to be the most "aesthetically pleasing" number!
'*** Also using a counter prevents the code from potentially getting stuck in an infinite loop

If .TextFrame.TextRange.Font.Size > 20 Then                                
.TextFrame.TextRange.Font.Size = .TextFrame.TextRange.Font.Size - 1
Else
.TextFrame.TextRange.Font.Size = .TextFrame.TextRange.Font.Size - 0.5
End If
'**** By reducing the font size by 0.5 this provided a better fit for the text _
'**** (even better than using on PowerPoint's auto-size function!)

counter = counter + 1
overflow = CInt((.TextFrame.TextRange.BoundHeight) - (.Height - .TextFrame.MarginTop - .TextFrame.MarginBottom))
Loop

End With
1
Alec Armstrong 22 जुलाई 2020, 22:20

enter image description here

आकृति प्रारूप में, पाठ विकल्पों के अंतर्गत, अतिप्रवाह पर पाठ को सिकोड़ने का विकल्प चुनें।

फिर, .Shapes("Title 1").TextFrame.TextRange का उपयोग करके हम VBA के माध्यम से टेक्स्ट इनपुट करते हैं।

पाठ स्वचालित रूप से अपने फ़ॉन्ट आकार को बदल देता है।

0
Bhavesh Shaha 22 जुलाई 2020, 10:13