Если строки просто скрыты, то такая же проблема. Скопировать только видимые можно, если строки скрыты автофильтром. Но для вашей задачи это не подойдет, т.к. скопированные ячейки будут вставлены все вместе, а не в соответствующие видимые ячейки.
solnce60, нет, никак нельзя сделать - так устроен Excel, нигде галочку поставить нельзя, чтобы копировались только видимые, если используется группировка.
У конструкции If .. End If несколько способов написания. Об этом написано в любом справочнике по VBA.
Цитата
Fsociety_ написал: Даже если эту строку убрать (она в принципе лишняя), то будет все так же:
Макрос
Код
Private Sub Worksheet_Change(ByVal Target As Range)
del_space ' - тут все нормально, этот код никак не воздействует
If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
Dim arrA(), I&, J&, splitA
On Error Resume Next
arrA = Range("A9:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(arrA)
splitA = Split(arrA(I, 1))
For J = 0 To UBound(splitA)
If Not IsEmpty(splitA(J)) Then
iTemp = .Item(splitA(J))
End If
Next
Next
Application.EnableEvents = False
Application.ScreenUpdating = False
Range("B9:C9").Resize(UBound(.Keys) + 1) = Application.Transpose(.Keys)
End With
With Me.Sort
.SortFields.Add Key:=Range("B:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Apply
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A9:A10000"), Target) Is Nothing Then Exit Sub
del_space ' - тут все нормально, этот код никак не воздействует
If Not Intersect(Target, Columns(1)) Is Nothing Then
Dim arrA(), I&, J&, splitA
On Error Resume Next
arrA = Range("A9:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(arrA)
splitA = Split(arrA(I, 1))
For J = 0 To UBound(splitA)
If Not IsEmpty(splitA(J)) Then
iTemp = .Item(splitA(J))
End If
Next
Next
Application.EnableEvents = False
Application.ScreenUpdating = False
Range("B9:C9").Resize(UBound(.Keys) + 1) = Application.Transpose(.Keys)
End With
With Me.Sort
.SortFields.Add Key:=Range("B:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Apply
End With
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
У меня есть папка "SysWOW64". У Вас именно "WOW64"?
У меня нет этих файлов: comctl32.ocx и MSCOMCTL.OCX. У меня чистая винда, я на ней не программирую. Предположу, что Вы занесли к себе на компьютер эти библиотеки при каких-то действиях, о которых уже могли забыть, если винду установили давно. Возможно проводили какие-то эксперименты и уже не помните деталей.
JeyCi, ни в каком виндоусе и ни в каком офисе этой библиотеки нет и не было никогда. Эта библиотека заносится при определенных условиях, например, при установке VB6. Кажется эту библиотеку можно скачать из интернета.
Alemox, его по идее вообще нет в виндоусе, он устанавливается отдельно при каких-то условиях, например, при установке VB6 (это старый язык программирования, сейчас вместо него VB .Net).
Sandri написал: Почему не работает очистка диапазона?
В Вашем коде очень много ненужного, поэтому придется много писать. Я поэтому не буду описывать, почему у Вас не работало, а просто выкладываю свой код:
Макрос
Код
Sub Кнопка3_Щелчок()
Dim Value, r As Long
Const limit As Integer = 0
For r = 4 To 30
If Cells(r, 12).Value = limit Then
Range(Cells(r, 12), Cells(28, 12)).ClearContents
Exit For
Else
Value = Cells(r, 5).Value
End If
Next r
End Sub
Макрос для перемещения выбранных фото по указанному пути с записью этого пути, Решить задачу перемещения выбранных фото по заданному в ячейке пути с сохранением этих путей в таблице
А это действие достаточно сделать один раз и потом оно так и будет. По умолчанию это действие и так имеет значение True, в Excel'е это: кнопка "Office" - Параметры Excel - Дополнительно - Экран - Показывать все окна на панели задач:
Автоматически не протягивается формула в умной таблице, При вводе формулы в первую строку умной таблицы, она автоматически не протягивается на нижние ячейки.
После ввода формулы в C6, справа появляется контекстная кнопка. Если ее щелкнуть, то появится пункт "Заполнить все ячейки...". Щелкните этот пункт и возможно проблема будет решена.
Файл "PERSONAL" находится в специальной папке. Файл "PERSONAL" запускается автоматически при запуске Excel'я. Вручную файл "PERSONAL" пользователь никогда не запускает. Сделайте по той инструкции, что я написал.
Создайте личную книгу макросов, если у Вас ее еще нет. Для этого начните записывать макрос: вкладка "Вид" - Макросы - Запись макроса - в списке "Сохранить в" выберите "Личная книга макросов" - OK. Сразу остановите запись макросов: вкладка "Вид" - Макросы - Остановить запись. Перейдите в VBA: Alt+F11. Здесь найдите PERSONAL, затем щелкните два раза левой кн. мыши по ЭтаКнига и справа вставьте Ваш код из поста 1. Щелкните "Сохранить". Закройте Excel и снова откройте. Макрос должен запуститься. Макрос будет запускаться при каждом запуске Excel'я.
На листе "Таблица" Свиридов В.Л., на листе "Инфа" Свиридовым В.Л. Excel, VBA не умеют склонять. Вам надо или самим разработать макрос, который будет склонять, или искать готовые решения.
bedvit написал: пользователь будет настырный он в интернете все равно найдет способ сломать VBA проект
За бесплатно пользователь вряд ли найдет способ взломать, а платить деньги хакеру не всякий захочет. Одно дело за бесплатно найти, другое дело - за деньги. Сейчас есть два способа взлома макроса в интернете. От одного найдена защита. Осталось от Libre Office. Если найти от Libre Office, то задача решена - макрос защищен от пользователя.
bedvit написал: Чем вас не устраивает обычный пароль на проект в таком случае от пользователя?
Обычный пароль взламывается. Об этом есть статьи в интернете, я сам видел. Поэтому и была создана эта тема.
Цитата
bedvit написал: А если пользователь скачает кряк, ничего не соображая в коде и сломает вашу программу, это пользователь или хакер?
В этом случае пользователь - это пользователь. Он ведь не сам сделал кряк.
Цитата
bedvit написал: Поэтому, вам нужно определиься от какого вида взлома вы хотите зашиту, и мы, возможно, сможем вам помочь.
Нужна защита от тех способов, которые есть в интернете. Осталась проблема с Libre Office - с помощью Libre Office можно увидеть код макроса в полностью рабочем состоянии (без искажений).
Anchoret написал: Придумать алгоритм создания массива из отдельных кодов символов обработанных XOR , из которых будут собираться имена пользователей. И алгоритм считывания данных из такого массива.
В коде же будет проверка с помощью If - Then. Пользователь удалит фрагмент кода, где есть If - Then - Exit Sub или End и защита взломана.
То есть надо значит не просто скрывать код, а что-то в него добавить такого, чтобы макрос в какой-то момент неправильно работал. Программы по защите создают exe-файлы и не каждый пользователь захочет запускать у себя какой-то exe-файл, в этом есть недостаток программ по защите макроса от взлома.
bedvit написал: 1.Ломается все, это вопрос стоимости. Если стоимость взлома будет дороже вашей программы, никто ее не будет ломать, ну если только на спор или с другими, не прагматичными целями.
В этой теме обсуждается взлом пользователем, а не хакерами. Изначально в первом посте я об этом написал, сделав акцент на "пользователя", поэтому Вы уходите в сторону и Вам нужно создать тему: как защитить макрос от хакеров.
Anchoret написал: Для корпоративных проектов - список имен пользователей допущенных к использованию файла с проектом.
А список имён файлов откуда будет браться? Из кода? Если человек увидит код, то внесет туда свои данные. Если будет браться из листа, то человек увидит лист и добавит в него свое имя.