вот здесь описан макрос который привязывает форму к координатам ячейки по правому клику мыши
Код
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Dim b As CommandBar
dx = 0: dy = 0
For Each b In Application.CommandBars
If b.Visible Then
Select Case b.Position
Case msoBarLeft: dx = dx + b.Width
Case msoBarMenuBar, msoBarTop: dy = dy + b.Height
End Select
End If
Next
With Target.Application.ActiveWindow
UserForm1.Left = (Target.Left - .VisibleRange.Left) * .Zoom / 100 + .Application.Left + dx
UserForm1.Top = (Target.Top - .VisibleRange.Top) * .Zoom / 100 + .Application.Top + dy
UserForm1.Show
End With
End Sub
как его привязать к координатам A:1 на открытие листа макрос рабочий - в файле кликайте правой клавишей мыши по полю и форма будет туда смещаться
вот так получилось вроде все устраивает + всплывающие подсказки есть+макросы к рис на клик привязаны
осталось только сделать так чтобы эта панель при старте позиционировалась в рамках открытого листа excel в левом верхнем углу независимо от разрешения экрана как задать привязку положения формы при старте к ячейке A:1 или другой способ какой есть
вот что получилось с помощью функций - но далее надо доделывать панель которую таскать можно по экрану но это полдела пока надо чтоб при старте прилипала к левому углу открытого Excel-файла и перемещение было в рамках окна Excel а не по всему экрану картинки кнопки с макросами щас введу
форма в немодальном режиме - которая на открытие книги и не закрывается принудительно но как запустить в немодальном режиме и повесить на нее кнопки и рис макросов
Сделал учетную таблицу с несколькими листами На каждом листе есть закрепленная область Кнопки и рисунки под макросы соответственно вверху в закрепленной области чтоб не уходили при прокрутке
Вопрос такой - можно ли средствами Office сделать область для кнопок и рис под макросы чтоб она была по центру - не сдвигалась при прокрутке и редактировалась соответственно Пробовал создать Вставка - Надпись и в свойствах Не перемещать и не изменять размеры - все равно перемещается со скроллом на месте не стоит (думал в нее накидать кнопок макросов) Либо надстройки какие есть которые дополнительную панель могут создать куда можно рис и кнопки вставлять под макросы ? Полазил по интернету но внятного решения не нашел кроме ToolbarToggle но это сторонняя программа а хотелось средствами Office это сделать
With ActiveCell.Characters(Start:=47, Length:=31).Font
если разный текст в ячейках исходный то при наложении своего текста форматируется как попало но с 47 символа а надо полностью форматируемый только свой текст вставлять - пример выложил там видно как получается при разной длине исходного текста
Код
Sub Дополнения_текст()
If Not Application.Intersect(ActiveCell, Range("G2:G1000")) Is Nothing Then
If ActiveCell.Value = "" Then
Exit Sub
End If
If ActiveCell.Value <> "" Then
ActiveCell.Value = ActiveCell.Value & " РЕЗУЛЬТАТ ЗВОНКА И ДОПОЛНЕНИЯ:"
ActiveCell.Select
With ActiveCell.Characters(Start:=47, Length:=31).Font
.Name = "Calibri"
.FontStyle = "полужирный"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.Color = -4165632
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
ActiveCell.Offset(0, 1).Activate
End If
End If
End Sub
все получилось спасибо большое - только в примере отформатированный текст надо вставить как формат вставляемого текста на формат текста в ячейке наложить ?
записал рекодером но ничего не дает кроме формата это
Код
Range("G3").Select
ActiveCell.FormulaR1C1 = _
"Здравствуйте - хотела заказать у вас пылесос РЕЗУЛЬТАТ ЗВОНКА И ДОПОЛНЕНИЯ:"
With ActiveCell.Characters(Start:=1, Length:=46).Font
.Name = "Calibri"
.FontStyle = "обычный"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With ActiveCell.Characters(Start:=47, Length:=31).Font
.Name = "Calibri"
.FontStyle = "полужирный"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.Color = -4165632
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
End Sub
вроде простая проблема но не знаю как решить - как определить конец текста в ячейке макросом и вставить туда свой текст те добавить в активную ячейку в диапазоне G2:G1000 текст " РЕЗУЛЬТАТ ЗВОНКА И ДОПОЛНЕНИЯ: " в конец существующего текста - если текста нет то ничего не добавляется Такто понятно как текст вставить по условию непустой ячейки в диапазоне
Код
Sub Дополнения_текст()
If Not Application.Intersect(ActiveCell, Range("G2:G1000")) Is Nothing Then
If ActiveCell.Value = "" Then
Exit Sub
End If
If ActiveCell.Value <> "" Then
ActiveCell.Value = "РЕЗУЛЬТАТ ЗВОНКА И ДОПОЛНЕНИЯ:"
End If
End If
End Sub
но вот как в конец существующего текста в ячейке поставить это неясно
Необходимо защитить диапазон листа от изменений в определенный промежуток времени Примерная идея решения 1.при открытии книги должна принудительно сработать синхронизация времени компьютера с мировым временем - если процедура успешно завершена то книга открывается (защита от перевода часов) 2.Ставится защита на диапазон листа на определенное время
Как пример нашел макрос по времени на принудительное закрытие книги
Код
Private Sub Workbook_Open()
'если время с 8.30 до 9.00 то
If Time > TimeValue("08:30:00") And Time < TimeValue("09:00:00") Then
Application.Quit 'закрываем приложение
ThisWorkbook.Close False 'закрываем книгу без сохранения
End If
как при этом прописать условие успешного(либо неуспешного) завершения синхронизации по времени и вызвать синхронизацию макросом ?
большое спасибо за ответ - попробовал файл преобразуются в требуемые книги -папки создаются -преобразованные книги складываются по пути правда не туда и копии нет с датами но попробую доделать если получится сейчас так получается
Просмотрел несколько примеров но к сожалению самому не получается доделать Часть вопроса по папкам получилась (спасибо большое)а вот по принципу разделить файл - сформировать из части файла книгу - скопировать в требуемую папку по условиям запутался в For Next If и прочее код макроса кое что сделал в файле - сделал условие копирования и сохранения
мой косяк был - неправильно по заданию сделал - папка Архив вложена в папку Сотрудники рядом с папками сотрудников
Остался один вопрос - а почему в макросе уважаемого Казанский VBA ругается на функцию Declare Function MakeSureDirectoryPathExists Lib "Imagehlp.dll" (ByVal strPath As String) As Long красным ? у меня Office2010 x64 - может из-за этого ?
Код
Sub Создать_папки1()
On Error Resume Next
' название папки,
Const folder$ = "Сотрудники"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & folder$
' создаём папку АРХИВ вложена в папку Сотрудники
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & "Архив"
' создаем подпапки для каждого листа
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Расписание" And sh.Name <> "Норма" And sh.Name <> "Общий" Then 'выбираем только листы сотрудников- остальные исключаем
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & sh.Name
End If
Next sh
End Sub
Сделал так - исключил из создания папок листы не относящиеся к сотрудникам Но при этом вылез другой косяк - папка Архив не создается - что не так сделал ?
Код
Sub Создать_папки()
On Error Resume Next
' название папки,
Const folder$ = "Сотрудники"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & folder$
' создаём папку АРХИВ
MkDir ThisWorkbook.Path & "\" & "Архив"
' создаем подпапки для каждого листа
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> "Расписание" And sh.Name <> "Норма" And sh.Name <> "Общий" Then 'выбираем только листы сотрудников- остальные исключаем
MkDir ThisWorkbook.Path & "\" & folder$ & "\" & sh.Name
End If
Next sh
End Sub
Запутался как правильно прописать MkDir ThisWorkbook.Path
В общем нужно создать папку и подпапки в тойже директории где лежит файл при этом 1.Создать общую папку "Сотрудники" в этой папке 2.Создать подпапки с именами сотрудников (по имени листов сотрудников) - причем листы сотрудников будут дополнятся потом листами новых сотрудников 3.Отдельная подпапка "Архив" рядом
Файл мой прилагаю - частично только папку Сотрудники сделал-подпапки не получается
Как исключить некоторые листы от выполнения макроса Кусок кода прилагаю - макрос не выполняет условие что неправильно здесь
Код
Private Sub Workbook_Open()
Dim z
For z = 1 To Sheets.Count
If Sheets(z).Name = "План занятости" And Sheets(z).Name = "Исходные данные" Then Exit Sub
z.Columns(7).ColumnWidth = 118 'устанавливаем требуемую ширину столбца G кроме листов "Исходные данные" и "План занятости"
Next
End Sub
Как лучше прописать макрос на перенос текста только заполненные ячейки в диапазоне Сделал на открытие книги макрос
Код
Private Sub Workbook_Open()
Dim wsSh As Worksheet
For Each wsSh In Sheets
Application.ScreenUpdating = False
If wsSh.Rows("6:5000", 7).WrapText = False Then
wsSh.Rows("6:5000", 7).WrapText = True
End If
Next wsSh
Application.ScreenUpdating = True
End Sub
но так как диапазон большой как сделать чтоб перенос текста был только в заполненных ячейках 7 столбца всех листов книги ?
не катит - фигуры так сгруппированы что с ячейкой не получится вариант - думал уже об этом может макрос какой есть с гиперссылкой для подсказок или чтото подложить под фигуру чтоб подсказку сделать .. просто мысли
Можно ли сделать примечание или всплывающую подсказку на фигуру в Excel2010 - (в 2003 было с этим тяжело) Есть ли какие приемы через гиперссылку подсказкой например или еще как ?
У меня на листе 10 фигур вверху- на каждую закреплен макрос - как к фигуре сделать подсказку или примечание ?
поможет кто доделать ? + еще проблема - если автофильтр отключен то по запуску фильтрации по макросу он появляется вверху и сбивает строки - как его можно выровнять чтоб в диапазоне A5:L5 появлялся (если по какойто причине отключен) по запуску макроса
Private Sub CommandButton1_Click()
Worksheets("Общая база").Range("$B$5").AutoFilter _
field:=2, _
Criteria1:=ComboBox1.Text
Worksheets("Общая база").Range("$C$5").AutoFilter _
field:=3, _
Criteria1:=ComboBox2.Text
End Sub
но не все конечно как надо работает - тк в поле выбора ComboBox1 и Combobox2 есть запись без фильтра тк существует возможность от одного фильтра отказаться и задействовать только 2 и тд - это как сделать вопрос
ну вот опять 25 за смысл - это ваше мнение - у меня другое я все эти автофильтры закрою - будет только UserForm - c фильтрами геморой тк их протягивать на смежных диапазонах на всю страницу это раз - второе играться с этими фильтрами по 5 раз галки снимать одевать - так проще и лучше с выпадающей формой + фильтры только по критериям которые нужны идут иконки на макрос только упрощают действие и дают фильтрацию по требуемым критериям - глаза не разбегаются от обилия фильтров штатных
Есть книга - в ней 2 листа - на первом собственно таблица для фильтрации значений + кнопка вызова макроса+UserForm для фильтрации на втором листе исходные данные - собственно UserForm сделал с 2-мя Combobox (заполняемые со 2 листа) токо как фильтрацию по строкам сделать по кнопке на UserForm