For i = k1 + ks - 1 To k3 Step ks With NewWeek With .Range(.Cells(1, i - 1), .Cells(43, i - 1)) .Copy OldWeek.Range(.Address).Offset(, 1).PasteSpecial End With End With Next i End Sub
[/vba]
как-то так [vba]
Код
Sub zzzz() Dim OldWeek As Worksheet, NewWeek As Worksheet Dim i As Long, Rng1 As Range, Rng2 As Range
Set NewWeek = Sheets("New") Set OldWeek = Sheets("Old")
For i = k1 + ks - 1 To k3 Step ks With NewWeek With .Range(.Cells(1, i - 1), .Cells(43, i - 1)) .Copy OldWeek.Range(.Address).Offset(, 1).PasteSpecial End With End With Next i End Sub
Вариант с ActiveX image и UDF для проверки данных [vba]
Код
Function xx() As Range With [Z2].Resize(9) .Value = [transpose(transpose(Text(Row(R1:R9),"ТО 000")))] Set xx = .Cells End With On Error Resume Next Dim sFolder: sFolder = ThisWorkbook.Path & "\Photo\" With Application.Caller .Parent.OLEObjects("Image1").Object.Picture = LoadPicture(sFolder & .Value & ".jpg") End With End Function
[/vba]
Вариант с ActiveX image и UDF для проверки данных [vba]
Код
Function xx() As Range With [Z2].Resize(9) .Value = [transpose(transpose(Text(Row(R1:R9),"ТО 000")))] Set xx = .Cells End With On Error Resume Next Dim sFolder: sFolder = ThisWorkbook.Path & "\Photo\" With Application.Caller .Parent.OLEObjects("Image1").Object.Picture = LoadPicture(sFolder & .Value & ".jpg") End With End Function
let Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], Grouped = Table.Group( Source, List.RemoveMatchingItems( Table.ColumnNames(Source), {"picture"} ), { { "picture", each Text.Combine(_[picture],", "), type text } } ) in Grouped
[/vba]
Вариант через Power Query [vba]
Код
let Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content], Grouped = Table.Group( Source, List.RemoveMatchingItems( Table.ColumnNames(Source), {"picture"} ), { { "picture", each Text.Combine(_[picture],", "), type text } } ) in Grouped
на ленте Разработчик->Режим конструктора ПКМ по activex контролу -> Свойства установить необходимые свойства, убедиться что имя контрола в свойствах совпадает с именем, прописанном в макросе, добавить имя в диспетчер имен и использовать его в проверке данных
UPD. Если объект невидим, то его можно выделить через Alt+F10
на ленте Разработчик->Режим конструктора ПКМ по activex контролу -> Свойства установить необходимые свойства, убедиться что имя контрола в свойствах совпадает с именем, прописанном в макросе, добавить имя в диспетчер имен и использовать его в проверке данных
UPD. Если объект невидим, то его можно выделить через Alt+F10krosav4ig
Option Explicit #If VBA7 Then Private Declare PtrSafe Function GetForegroundWindow _ Lib "User32" () _ As LongPtr Private Declare PtrSafe Function GetClassName _ Lib "User32" _ Alias "GetClassNameA" ( _ ByVal hWnd As LongPtr, _ ByVal lpClassName$, _ ByVal nMaxCount& _ ) _ As Long #Else Private Declare Function GetForegroundWindow _ Lib "User32" () _ As Long Private Declare Function GetClassName _ Lib "User32" _ Alias "GetClassNameA" ( _ ByVal hWnd&, _ ByVal lpClassName$, _ ByVal nMaxCount& _ ) _ As Long #End If #If VBA7 Then Function ClassName$(ByVal hWnd As LongPtr) #Else Function ClassName$(ByVal hWnd&) #End If Dim windowClass As String Dim retVal As Long windowClass = Space(255) retVal = GetClassName(hWnd, windowClass, 255) ClassName = Left$(windowClass, retVal) End Function Sub FindText(sFilePath$, sText$, Optional timeout = 5) Dim oFile As Object Set oFile = CreateObject("shell.application").Namespace(0).parsename(sFilePath) If oFile Is Nothing Then Err.Raise 53, , "Файл не найден" End If With oFile
.invokeverbex ("open") Dim t#: t = Timer Do While ClassName(GetForegroundWindow) <> "AcrobatSDIWindow" DoEvents If Timer - t > timeout Then MsgBox "TimeOut": Exit Sub End If Loop
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .settext sText$ .putinclipboard End With
Option Explicit #If VBA7 Then Private Declare PtrSafe Function GetForegroundWindow _ Lib "User32" () _ As LongPtr Private Declare PtrSafe Function GetClassName _ Lib "User32" _ Alias "GetClassNameA" ( _ ByVal hWnd As LongPtr, _ ByVal lpClassName$, _ ByVal nMaxCount& _ ) _ As Long #Else Private Declare Function GetForegroundWindow _ Lib "User32" () _ As Long Private Declare Function GetClassName _ Lib "User32" _ Alias "GetClassNameA" ( _ ByVal hWnd&, _ ByVal lpClassName$, _ ByVal nMaxCount& _ ) _ As Long #End If #If VBA7 Then Function ClassName$(ByVal hWnd As LongPtr) #Else Function ClassName$(ByVal hWnd&) #End If Dim windowClass As String Dim retVal As Long windowClass = Space(255) retVal = GetClassName(hWnd, windowClass, 255) ClassName = Left$(windowClass, retVal) End Function Sub FindText(sFilePath$, sText$, Optional timeout = 5) Dim oFile As Object Set oFile = CreateObject("shell.application").Namespace(0).parsename(sFilePath) If oFile Is Nothing Then Err.Raise 53, , "Файл не найден" End If With oFile
.invokeverbex ("open") Dim t#: t = Timer Do While ClassName(GetForegroundWindow) <> "AcrobatSDIWindow" DoEvents If Timer - t > timeout Then MsgBox "TimeOut": Exit Sub End If Loop
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .settext sText$ .putinclipboard End With
function IsColumnVisible(RngRef,dummy) { var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var rng = sh.getRange(RngRef); var col = rng.getColumn(); return [ Array.apply(null, Array(rng.getWidth())). map((_, i) => +!sh.isColumnHiddenByUser(col + i)) ] }
function IsColumnVisible(RngRef,dummy) { var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var rng = sh.getRange(RngRef); var col = rng.getColumn(); return [ Array.apply(null, Array(rng.getWidth())). map((_, i) => +!sh.isColumnHiddenByUser(col + i)) ] }
Функция работает и все правильно считает, вот только она пересчитывается только про изменении ячеек, указанных во 2-м аргументе функции. Принудительный пересчет при скрытии/отображении столбцов невозможен. Если бы скрытие/отображение столбцов/строк считалось изменениями на листе, то можно было бы сделать пересчет с помощью триггера. Даже выделив ячейку с этой формулой и нажав Ctrl+R, функция не пересчитается. Почему так - это вопрос к разработчикам google script api, может когда-нибудь это изменится (лет через 10, например, ибо функцию isColumnHiddenByUser они задеплоили через 9 лет после релиза)
Функция работает и все правильно считает, вот только она пересчитывается только про изменении ячеек, указанных во 2-м аргументе функции. Принудительный пересчет при скрытии/отображении столбцов невозможен. Если бы скрытие/отображение столбцов/строк считалось изменениями на листе, то можно было бы сделать пересчет с помощью триггера. Даже выделив ячейку с этой формулой и нажав Ctrl+R, функция не пересчитается. Почему так - это вопрос к разработчикам google script api, может когда-нибудь это изменится (лет через 10, например, ибо функцию isColumnHiddenByUser они задеплоили через 9 лет после релиза)krosav4ig
Елена, поздавляю с 8 марта, желаю всего и сразу: пусть все хорошее, приятное, доброе и теплое облепит с ног до головы, а все плохое пролетает мимо!
Елена, поздавляю с 8 марта, желаю всего и сразу: пусть все хорошее, приятное, доброе и теплое облепит с ног до головы, а все плохое пролетает мимо!krosav4ig
подумал, с кем не бывает - в глазах двоится, листаю дальше, чем дальше в лес, тем больше по дрова. Прикинул, в чем дело, пошел по ссылке http://www.excelworld.ru/forum/0-0-110-42-8236 Лицезрею следующую картину
подумал, с кем не бывает - в глазах двоится, листаю дальше, чем дальше в лес, тем больше по дрова. Прикинул, в чем дело, пошел по ссылке http://www.excelworld.ru/forum/0-0-110-42-8236 Лицезрею следующую картину