Страницы: 1
RSS
изменение размера шрифта в ячейке
 
как будет выглядеть макрос на лист изменение размера шрифта в заданной ячейке  
то есть если шрифт влезает в 1 строку в видимую часть ячейки то его размер 13  
если только в 2 строки влезает - то 12  
если в 3 строки -то 10
 
"если шрифт влезает в одну строку" - без примера совсем непонятно, что хотите
 
Формат ячеек-вкладка Выравнивание-Автоподбор ширины  это получается слово в одну строку и мелко будет при увеличении слов в тексте  
 а при  
Формат ячеек-вкладка Выравнивание-Переносить по словам    
както можно сделать?
 
1. Откуда машине знать, на сколько строк нужно разбить Ваш текст?  
2. Текст может и войти по ширине, но не войти по высоте. Как быть?
 
Парочка макросов:  
1 - пусковик. Запускает второй, передает туда диапазон, который Вам нужно обработать.  
2 - проверяет количество символов в каждой ячейке из переданного диапазона. В зависимости от этого ставит размер шрифта.  
 
Количество символов под нужный размер шрифта оттюнингуйте самостоятельно.  
 
Sub Starter()  
   Call Check_Font_Size(Range("F2:F4"))  
End Sub  
 
 
Sub Check_Font_Size(Rng As Range)  
   Dim cell As Range  
     
   For Each cell In Rng  
   Select Case Len(cell.Value)  
       Case 0 To 25  
           cell.Font.Size = 16  
       Case 26 To 45  
           cell.Font.Size = 13  
       Case Else  
           cell.Font.Size = 11  
   End Select  
   Next cell  
     
End Sub
 
макрос работает    
Bond тысяча благодарностей  
 
только по событиям    
Private Sub Worksheet_Activate()  
Private Sub Worksheet_Change(ByVal Target As Range)  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
 
почемуто не срабатывает  что неправильно сделала ?
 
Не соблюден синтаксис VBA.  
Надо писать    
Call Starter
 
Совсем необязательно писать Call (но желательно). Не исключено, что отключены события. Попробуйте выполнить этот макрос:  
Sub EVents_On()  
Application.EnableEvents = True  
End Sub
 
юрий вы были правы  
сейчас работает  
а почему могли отключится события ?
 
Трудно сказать... Возможно, запускали какой-то макрос, который или не закончил свою работу, или в нём забыли "вернуть на родину" отслеживание событий.
 
\немного извращений : )  
 
Private Sub io(ByRef objRange As Object)  
Dim x As Object  
For Each x In objRange.Cells  
   With x.Font  
       Select Case Len(.Parent.Value)  
           Case Is <= 22: .Size = 16  
           Case Is <= 45: .Size = 13  
           Case Else: .Size = 11  
       End Select  
   End With  
Next  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
А в чем извращение-то? Len(.Parent.Value) вместо Len(x), что ли?
 
Или так  
 
Private Sub io(ByRef objRange As Object)  
Dim x As Object  
For Each x In objRange.Cells  
   x.Font.Size = Switch(Len(x) <= 22, 16, Len(x) <= 45, 13, True, 11)  
Next  
End Sub
 
{quote}{login=Казанский}{date=05.11.2011 10:58}{thema=\офф}{post}А в чем извращение-то? Len(.Parent.Value) вместо Len(x), что ли?{/post}{/quote} Ну да. Плюс неявное объявление (и уничтожение судя по  всему) объектной переменной на каждой стадии цикла ^_^
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Наверх