При запуске макроса, который удаляет и тут же вставляет код в ThisWorkbook/ЭтаКнига, выскакивает окно VBA. И показывается код только что внедрённый в ThisWorkbook/ЭтаКнига. Программно закрыть его можно, но это вызывает дёргание окон:
Код
SendKeys "%{F4}"
или
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
Возможно ли подавить переключение в окно VBA?
процедура вставляющая код в ThisWorkbook/ЭтаКнига.
Скрытый текст
Код
Sub CreateEventProcedure()
Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
Dim lLineNum As Long
On Error Resume Next
Set objVBProj = ActiveWorkbook.VBProject
Set objVBComp = objVBProj.VBComponents(ActiveWorkbook.CodeName)
Set objCodeMod = objVBComp.CodeModule
'вставляем код
With objCodeMod
lLineNum = .CreateEventProc("BeforeClose", "Workbook")
lLineNum = lLineNum + 1
.InsertLines lLineNum, "Application.AskToUpdateLinks = False"
End With
End Sub
Есть макрос вставляющий в ThisWoorkbook/ЭтаКнига код событийной процедуры. у меня это Workbook_AfterSave.
Код
Sub CreateEventProcedure()
'https://www.excel-vba.ru/chto-umeet-excel/kak-dobavit-kod-procedury-programmno-skopirovat-modul/
Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
Dim lLineNum As Long
'добавляем новую книгу
Workbooks.Add
'получаем ссылку на проект и модуль книги
Set objVBProj = ActiveWorkbook.VBProject
Set objVBComp = objVBProj.VBComponents("ЭтаКнига")
Set objCodeMod = objVBComp.CodeModule
'вставляем код
With objCodeMod
lLineNum = .CreateEventProc("Open", "Workbook")
lLineNum = lLineNum + 1
.InsertLines lLineNum, " MsgBox ""Hello World"""
End With
End Sub
Есть нюанс: "для русской версии используется ссылка на ЭтаКнига. Для английской ThisWorkbook"
Код
Set objVBComp = objVBProj.VBComponents("ThisWorkbook")
??? КАК организовать проверку для активной книги - в ней ThisWorkbook или ЭтаКнига ??? Файлы все однотипные, но одни созданы на MSO2007 EN, а другие в MSO2010 RU...
При старте файла требуется указать время простоя для xTime As String через Application.InputBox. Хотелось бы обойти этот запрос и "зафиксировать" значение xTime, скажем в 3 минуты. Не смог найти как указать значение переменной.
Set xTime = "00:03:00" Set xTime = #12:03:00 AM# - оба эти варианта приводят к ошибке Object Requered.
Dim xTime As String
Dim xWB As Workbook
Private Sub Workbook_Open()
'Updated by Extendoffice 2019/1/20
On Error Resume Next
xTime = Application.InputBox("Please specify the idle time:", "KuTool For Excel", "00:00:20", , , , , 2)
Set xWB = ActiveWorkbook
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If xTime = "" Then Exit Sub
Reset
End Sub
Sub Reset()
Static xCloseTime
If xCloseTime <> 0 Then
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork1", , False
End If
xCloseTime = Now + TimeValue(xTime)
ActiveWorkbook.Application.OnTime xCloseTime, "SaveWork1", , True
End Sub
Есть 2 файла с макросами: - personal.xlsb (находится в папке по умолчанию - XLSTART) - MACROS.xlsb (находится в другой папке и путь прописан в альтернативную автозагрузку при старте Excel). Есть один ньюанс - файл MACROS.XLSB сохраняется в облачную папку для доступности дома и на работе.
Так вот этот MACROS.XLSB постоянно просит сохранить при выходе из EXCEL. Даже если я с ним не проделывал никаких действий. При этом изредка позволяет сохранить по нажатию "ОК", а чаще всего не позволяет сохранить и тогда я жму "Отмена" и Excel вылетает...
Что может быть не так? Сам файл испорчен или что-то с настройками Excel'a?
Private Sub UserForm_Initialize()
' positioning http://www.vbaexpress.com/kb/getarticle.php?kb_id=382#instr
Me.StartUpPosition = 0
Me.Top = Application.Top + Application.Height - Me.Height - 45
Me.Left = Application.Left + Application.Width - Me.Width - 45
Dim p As String, f As String: Application.ScreenUpdating = False
p = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\": f = "ALL.xlsb"
If Dir(p & f) = "" Then
MsgBox "== File is missing ==": Exit Sub
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Extr p, f, "all", "A1:E30000"
With ThisWorkbook.Sheets(1)
.Columns(2).Replace 0, Empty, xlWhole
z = .Range("A2:E" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
.[A:E].ClearContents
End With
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
tmp
End Sub
Посоветуйте, плиз, как можно было бы изменять значение переменнойp=... каким-либо из Control'ов на UserForm? CheckBox, ControlButton, ToggleButton, CommandButton. Смысл такой, что сейчас, при инициализации формы UserForm, ListBox заполняется данными из файла %desktop% / ALL.xlsb. У меня на Рабочем столе 2 идентичных файла - ALL.xlsb и ALL2.xlsb - с разными данными.
Хотелось бы реализовать переключение файла-источника из UserForm.
Есть два макроса, которые последовательно (вручную) запускаются в одной книге.
macros1 - общая и основная настройка листа macros2 - удаление и назначение именованных диапозонов и выпадающих списков
Если запустить macros2 - всё ОК. Если запустить macros1 и потом macros2, то macros2 не вносит изменений.
Нашёл часть кода, после которой запуск macros2 не даёт результата. Удаление Shapes на листе. По факту удаляются только Shapes Линии.
Код
Dim MyShape As Shape
For Each MyShape In ActiveWorkbook.Worksheets("ppr").Shapes
MyShape.Delete
Next
Почему этот код не позволяет работать этому коду:
Скрытый текст
Код
Sub NamesDropsX()
' clear all Names Удаление ВСЕХ именованных диапозонов
For Each IName In ActiveWorkbook.Names
IName.Delete ' delete ALL named areas !!!
Next
' set Print Area Устанока Области Печати
ActiveSheet.PageSetup.PrintArea = "$A$2:$AD$55"
' add "agents" and "pay" - заполнение диапозонов данными
Sheets("izsniedzeji").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "RK"
Range("A2").Select
ActiveCell.FormulaR1C1 = "VM"
Range("A3").Select
ActiveCell.FormulaR1C1 = "JP"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Parskait" ' unicode
Range("B2").Select
ActiveCell.FormulaR1C1 = "Skaidra nauda" ' unicode
Range("B3").Select
ActiveCell.FormulaR1C1 = "Karte" ' unicode
' set Names - pay | agent - Назначение именованных диапозонов
Sheets("izsniedzeji").Select
Range("A1:A3").Select
ActiveWorkbook.Names.Add Name:="agent", RefersToR1C1:="=izsniedzeji!R1C1:R3C1"
Range("B1:B3").Select
ActiveWorkbook.Names.Add Name:="pay", RefersToR1C1:="=izsniedzeji!R1C2:R3C2"
' clear All Drops - удаление всех выпадающих списков
Sheets("PPR").Select
ActiveCell.SpecialCells(xlCellTypeAllValidation).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Range("A18").Select
' set Drop - pay and agent = methode nr.2 - назначение ячеек с выпадающими списками
Sheets("PPR").Select
Range("J17:O17").Select ' pay name
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=pay"
.IgnoreBlank = False
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "ERROR"
.InputMessage = ""
.ErrorMessage = "ERROR!!!"
.ShowInput = False
.ShowError = True
End With
Range("G46:P46").Select ' agent name
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=agent"
.IgnoreBlank = False
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "ERROR"
.InputMessage = ""
.ErrorMessage = "ERROR!!!"
.ShowInput = False
.ShowError = True
End With
Range("A1").Select
End Sub
К множеству иных файлов уже был применён макрос1, а значит во всех этих файлах НЕВОЗМОЖНО применить макрос2!!! Как сделать эти "испорченные" файлы/книги редактируемыми макросом2 снова???
Есть текст записанный таким образом (файл приложен). Никак не могу найти/сообразить - как этот ТЕКСТ преобразовать в yyyy.mm.dd
Текст на латышском. 2017. gada 11. septembris 2017. gada 15. jūnijs 2017. gada 27. novembris 2017.gada 20. janvāris
p.s. Допустим, по Ctrl+H заменю слова и получу в виде текста - 2017.11.09. Но в этом случае месяц mm и день dd поменяны местами -> yyyy.dd.mm Может хоть эту запись можно переделать в yyyy.mm.dd?
Хочу применить последовательно к каждому файле *.xls в папке какой-либо макрос. Файл в результате сохраняется с тем-же именем.
Код
ActiveWorkbook.Close True
Возможно ли сделать, что бы для файла, при сохранении, НЕ МЕНЯЛИСЬ даты открытия, сохранения, изменения, создания? Вот что-бы изменить эти данные, вроде, есть решения. А как их вообще не трогать?
Пытался допилить код. Что-то получилось, что-то нет.
У меня вот так получилось: - сканирует заданную (фиксированную) в коде папку (очень долго собирает в папке на сервере. 1800 файлов.) - вставляет только имя (без расширения) и даты в указанный диапазон AP1:AR1/ колонки 42, 43, 44. - Вставка в ActiveWorksheet. / В Активный Лист /. Путь не выводит. Я его и так знаю. А вложенных папок нету.
Скрытый текст
Sub FileListNumbersH() ' Список файлов в папке Dim V As String Dim BrowseFolder As String BrowseFolder = "X:\BACKUP\PPR2017" 'BrowseFolder = CStr(V)
'добавляем лист и выводим на него шапку таблицы 'ActiveWorkbook.Sheets.Add With ActiveSheet.Range("AP1:AR1") .Name = "Calibri" .Font.Bold = True .Font.Size = 10 End With Range("AP1").Value = "Name" Range("AQ1").Value = "Created" Range("AR1").Value = "Modiefed"
'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, True End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long
Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getfolder(SourceFolderName)
r = Range("A65536").End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files ' вставка в столбец 42, 43, 44 Cells(r, 42).Formula = Left(FileItem.Name, InStrRev(FileItem.Name, ".") - 1) ' имя файла БЕЗ расширения Cells(r, 43).Formula = FileItem.DateCreated Cells(r, 44).Formula = FileItem.DateLastModified r = r + 1 X = SourceFolder.Path Next FileItem
Columns("AQ:AR").AutoFit
Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing
Помогите с кодом, плиз. Что надо подправить, что бы выводить только последние 10 файлов? Последние по времени редактирования. Modified. Идеально, если это количество можно будет менять редактированием кода. Не могу найти мне понятных примеров в сети.
p.s. Отсекать лишнюю инфу в названии файла буду с помощью записанного макроса: "Ctr+H" + формула "=правсимв()"
Есть 2 компа. Дом и работа. win8.1x64ru + office2016 | win8.1x64en + office2007 Хочется, чтобы PERSONAL.XLSB на обоих компах синхронизировался. Для этого положил XLSB в облако, соответственно прописав путь для автозагрузки.
Могут ли быть проблемы из-за этого? Непонятно по какой причине PERSONAL.XLSB то загружается, то не загружается при старте EXCEL.
Добрый день! Нашёл в архиве Удобный поискот GIGant.
По клику по позиции из списка в форме поиска, она добавляется в выделенную ячейку листа. Вопрос. 1. Как реализовать, что бы в форме поиска присутствовали ещё 2..3 колонки с данными? 2. И, соответственно, чтобы по клику в списке формы поиска добавлялась позиция и соседние значения в определённые (возможно, не соседние) ячейки в листе?
Office 2010 и Office 2007. Список на 2000 строк. p.s. Это всё для наполнения формы счёта или накладной... Хотя бы 1ый вопрос.
Office 2010 и Office 2007. Список на 2000 строк.
p.s. Это всё для наполнения формы счёта или накладной... Хотя бы 1ый вопрос.