Sub checkValidation()
Dim cell As Range, v As Long
For Each cell In Selection.Cells
v = 0
On Error Resume Next
v = cell.SpecialCells(xlCellTypeSameValidation).Count
On Error GoTo 0
If v = 0 Then
Debug.Print cell.Address & ": no validation"
Else
Debug.Print cell.Address & ": has validation"
End If
Next
End Sub
Нашел и немного допилил код, который реагирует на выделение/вставку картинки на лист. В данном файле-примере при вставке или выделении картинки, картинка "переносится" с лист1 на лист2.
Код в модуль книги
Код
Option Explicit
Private WithEvents cmbrs As CommandBars
Private Sub Workbook_Activate()
Set cmbrs = Application.CommandBars
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Set cmbrs = Application.CommandBars
End Sub
Private Sub cmbrs_OnUpdate()
Call ManipulateImage
End Sub
Private Sub ManipulateImage()
Dim shp As Shape, shpPosition As String, shpName As String, shpCheck As Shape
Set shp = GetShape
If Not shp Is Nothing And ActiveSheet.Index = 1 Then
shpName = shp.Name
For Each shpCheck In Worksheets(2).Shapes
If shpCheck.Name = shpName Then
End
End If
Next shpCheck
Let shpPosition = shp.TopLeftCell.Address(0, 0)
shp.Copy
shp.Delete
Worksheets(2).Activate
Worksheets(2).Paste Range(shpPosition)
Worksheets(1).Activate
'Worksheets(2).Shapes(Worksheets(2).Shapes.Count).Name = shpName
End If
End Sub
Private Function GetShape() As Shape
If TypeName(Selection) = "Picture" Then Set GetShape = Application.Selection.ShapeRange.Item(1)
End Function
Или думается нужно выделять картинки, а не диапазон, первую выделяем через правый клик, потом можно Ctrl+A, или с зажатым Ctrl выделять нужные. _______ UPD: Кодом удаляется, а через выделение нет.
Sub Insert_tab3_1()
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 2).Value = Range("J32").Value
End Sub
Sub Clear_Insert_tab3_1()
ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, -2).Value = ""
End Sub
А как? На чем проверять? От Вас файла примера нету(согласно 2.3)...
Цитата
Sanja написал: Удаление строк нужно производить от конца к началу
Код
Sub DeleteRows()
Dim lastRow As Long, i As Long
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = lastRow To 1 Step -1
If Cells(i, 1).Value = "x" Then Cells(i, 1).EntireRow.Delete Shift:=xlShiftUp
Next i
End Sub
В версиях Excel старше 2010 работает только системный вариант двух окон рядом. А именно: открываем два файла, находясь в одном из них нажимаем Win + стрелка вправо и потом выбираем другое доступное окно.
Все дело было в дополнительном параметре Type:=xlFillCopy
Код
Sub UnMergeAndFillCells()
Dim cell As Range, tempRange As Range, firstCellAddress As String
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Cells
If cell.MergeCells And cell.MergeArea.Columns.Count = 1 Then
firstCellAddress = cell.Address(0, 0)
Set tempRange = cell.MergeArea
cell.UnMerge
Range(firstCellAddress).AutoFill Destination:=tempRange, Type:=xlFillCopy
ElseIf cell.MergeCells And cell.MergeArea.Columns.Count > 1 Then
cell.UnMerge
cell.WrapText = False
If Not IsNumeric(cell.Value) Then
cell.HorizontalAlignment = xlLeft
End If
End If
Next cell
End Sub
Sub UnMergeAndFillCells()
Dim cell As Range, tempRange As Range, firstCellAddress As String
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Cells
If cell.MergeCells And cell.MergeArea.Columns.Count = 1 Then
firstCellAddress = cell.Address(0, 0)
Set tempRange = cell.MergeArea
cell.UnMerge
Range(firstCellAddress).AutoFill Destination:=tempRange
End If
Next cell
End Sub
Alisa103, приложите два файла-примера, согласно правилам, т.е. книгу для ввода данных и ту другую книгу в которую данные копируются, чтобы структура файлов соответствовала реальным файлам, может с помощью макросов что и получится решить...
Без имён книг, макрос должен быть в книге-исходнике. Т.е., исходник нужно пересохранить с поддержкой макросов и поместить туда этот макрос:
Код
Sub CopyTable()
Dim wbSource As Workbook, wbDestination As Workbook
Dim myTable As Range, myNewTable As Range, Cell As Range
Application.ScreenUpdating = False
Set wbSource = ThisWorkbook
Set myTable = wbSource.Worksheets(1).Range("A2").CurrentRegion
Set wbDestination = Workbooks.Add
myTable.Copy
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteColumnWidths
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteValues
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats
Set myNewTable = wbDestination.Worksheets(1).Range("A2").CurrentRegion
For Each Cell In myTable
myNewTable.Range(Cell.Address).Interior.Color = Cell.DisplayFormat.Interior.Color
Next Cell
myNewTable.Cells(1, 1).Select
Application.CutCopyMode = False
End Sub
В результате получаем новую книгу, которую нужно вручную сохранить в нужном Вам месте. Хотя и это можно автоматизировать.
Sub CopyTable()
Dim wbSource As Workbook, wbDestination As Workbook
Dim myTable As Range, myNewTable As Range, Cell As Range
Application.ScreenUpdating = False
Set wbSource = Workbooks("Так есть.xlsx")
Set myTable = wbSource.Worksheets(1).Range("A2").CurrentRegion
Set wbDestination = Workbooks("Destination Book.xlsm")
myTable.Copy
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteColumnWidths
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteValues
wbDestination.Worksheets(1).Range("A1").PasteSpecial xlPasteFormats
Set myNewTable = wbDestination.Worksheets(1).Range("A2").CurrentRegion
For Each Cell In myTable
myNewTable.Range(Cell.Address).Interior.Color = Cell.DisplayFormat.Interior.Color
Next Cell
myNewTable.Cells(1, 1).Select
Application.CutCopyMode = False
End Sub
От фонаря, чтобы не было пусто, пока разбирался что куда там копируется временно написал, чтобы видеть будут ли изменения. ___ Перекачал файл проверил, вроде работает нормально без потерь колонок.
Sub Макрос1()
A = Sheets("Лист1").Cells(2, 1).Value
Set Rng = Sheets("Sheet1").Columns(2).Find(A, LookIn:=xlValues, LookAt:=xlWhole)
If Not Rng Is Nothing Then
myRow = Rng.Row
End If
For i = 2 To Sheets("Лист1").Cells(2, Columns.Count).End(xlToLeft).Column
B = Sheets("Лист1").Cells(2, i).Value
Set Rng1 = Sheets("Sheet1").Rows(1).Find(B, LookIn:=xlValues, LookAt:=xlWhole)
If Rng1 Is Nothing Then
Set Rng1 = Sheets("Sheet1").Rows(1).Find(Split(B, " ")(0), LookIn:=xlValues, LookAt:=xlPart)
If Not Rng1 Is Nothing Then
Sheets("Sheet1").Columns(Rng1.Column + 1).Insert
Sheets("Sheet1").Cells(1, Rng1.Column + 1) = Sheets("Лист1").Cells(2, i)
Sheets("Sheet1").Cells(2, Rng1.Column + 1) = Sheets("Лист1").Cells(3, i)
Sheets("Sheet1").Cells(3, Rng1.Column + 1) = Sheets("Лист1").Cells(4, i)
Else
x = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column
Columns(x + 1).Insert
Sheets("Sheet1").Cells(1, x + 1) = Sheets("Лист1").Cells(2, i)
Sheets("Sheet1").Cells(2, x + 1) = Sheets("Лист1").Cells(3, i)
Sheets("Sheet1").Cells(3, x + 1) = Sheets("Лист1").Cells(4, i)
End If
Else
myColumn = Rng1.Column
Sheets("Sheet1").Cells(myRow, myColumn) = Sheets("Лист1").Cells(4, i)
End If
Next i
End Sub
Sub HideRibbon()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", False)"
Call FitTable
End Sub
Sub ShowRibbon()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
DoEvents
Call FitTable
End Sub
Sub FitTable()
Range("B1").CurrentRegion.Select
ActiveWindow.Zoom = True
Range("B1").Select
End Sub
Как с помощью макроса сохранить и закрыть книгу Excel, Макрос открывает все книги, но не закрывает и не сохраняет изменения, не хватает знаний грамотно дописать код
А Вы про файл(ы)-пример(ы) читали 2.3? Я не могу протестировать код без файлов. Приложите 2-3 файла согласно правилам форума тогда будет работать, но полюбому путь к файлам Вы сами должны будете прописать в коде.
Доработанный вариант, будет работать только при включенных макросах. Весь код внутри формы. WorkBook_Open только открывает форму. Пароль 4, на случай если сразу включите макросы. ___ UPD: Вот обновленный файл с письма:PasswordSheet.xlsm(31.91 КБ) ___ UPD: Тест открытия.xlsm(38.71 КБ)
Как с помощью макроса сохранить и закрыть книгу Excel, Макрос открывает все книги, но не закрывает и не сохраняет изменения, не хватает знаний грамотно дописать код
Sub Create()
Dim i As Integer, sFolder As String, sFiles As String
sFolder = "путь к папке"
sFiles = Dir(sFolder & x & "extr_*")
Do While sFiles <> ""
Workbooks.Open sFolder & sFiles
sFiles = Dir
For i = 1 To Sheets.Count
If Sheets(i).Name Like "extr_*" Then
Sheets(i).Name = "Лист1"
End If
Next i
ActiveWorkbook.Close SaveChanges:=True
Loop
End Sub
Помогите: Как сконвертировать из 10-ой системы в ieee 754 ?, Нужно чтобы так же было и в exel - в одну строчку ввожу цифру - из другой выходное значение.
Назар Скалат написал: добавить 18 и поменять 98 на 116?
В одной строке помещается 4-е матча. Если добавить 18, то получим 3(18/6) строки в каждой по 4-е и того получится 12 свободных мест для записей. Все происходит точно также, как Вы делали вручную, берем одну строку с матчами(в Екселье это группа из 5-ти строк) и идем слева на право, дошли до конца строки, опускаемся ниже на 6 екселевских строк и.т.д... То есть добавив 1 раз 6, мы получаем место для 4-х матчей.
Число 98 меняете на свое, с шагом 6, типа: 104, 110, 116... Это строки, каждая цифра это только одна строка, в одной строке у Вас 4 результата, посчитаете сами сколько нужно добавить...
Интересно почему у hury не работает, проверял на Win10/Office 2010 и 2021 все отрывается. При написании кода была мысль поставить расширение, как в сообщении №1, но как-то подумал, что когда мы сохраняем файл Excel вручную, мы ведь не указываем расширение, вот и решил попробовать без расширения, проверил оба варианта, все работает ок... UPD:
Цитата
Alex написал: У меня тоже не сработал макрос win10/365
Понятно, буду писать с расширением. _______ hury, можно избавиться от этих строк кода:
Код
ActiveWindow.ScrollColumn = ...
они, можно сказать, мусорные, только раздувают код. В VBA можно управлять объектами не выделяя их, т.е., можно поубирать все Select(ы) и Selection(ы) или б0льшую их часть. Например показать скрытые столбцы:
Код
Columns("N:Y").EntireColumn.Hidden = False
Также с Range("X2").Select, можно сразу:
Код
Range("X2").Copy' И дальше аналогично без Select и Selection
Range("X2").PasteSpecial Paste:=xlPasteValues '...
Ну и докопируете недостающие строки кода в правильном порядке.
P.S. Ну, а делать все вместо Вас лень, попробуйте сами, а если что не получится, пишите сюда же...
Изменено: DANIKOLA - 20.06.2024 17:38:16(Добавил ответ Alex)