Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
1

Переместить картинки по номеру строки

13.10.2017, 01:05. Показов 1764. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дорогие форумяне! помогите решить задачку - есть страница с изображениями и при перемещении ячейки по строкам, соотв количеству картинок, картинка по номеру строки появляется в нужном месте, а остальные "за кадром"

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub picShift()
'
ct = ActiveSheet.Shapes.Count
 
   If ActiveCell.Column = 1 And ActiveCell.Row <= ct Then
   
   nm = ActiveCell.Row
   
       ActiveSheet.Shapes.SelectAll
       Selection.Cut
       Range("M3").Select
       ActiveSheet.Paste
       
       
       ActiveSheet.Shapes.Range(Array("imm" & nm)).Select
       Selection.Cut
       Range("C3").Select
       ActiveSheet.Paste
       
       Cells(nm, 1).Select
       
       
   End If
 
End Sub
проблема в том что при каждом selecte идет заклинивание, и как его проигнорировать с Shapes неизвестно(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2017, 01:05
Ответы с готовыми решениями:

Заполнить матрицу так, чтобы элемент в нечетной строке был равен номеру столбца, а в четном — номеру строки
Помогите пожалуйста решить задачу. Заполнить целочисленную квадратную матрицу 10х10 так, чтобы...

как переместить картинки в определенное место?
как кроме как прибавляя к лефту и топу значения передвинуть картинки на форме на нужное место?...

Как TLabel переместить поверх картинки?
суть программы такова: тест. есть картинка с изображением мускулатуры на пол окна и есть цифры (...

Как можно картинку переместить на сервер и вписать имя картинки в бд?
Доброго времени суток! Создаю новую новость, прикрепляю к ней фото,как можно картинку переместить...

10
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
13.10.2017, 08:28 2
вроде на форумах не в первой. Файл пример приложите и описание согласно примера.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
13.10.2017, 09:17 3
Оксана33, первая часть вашего макроса работает и перемещает все. На всякий случай, после перемещения шэйпов лучше еще ставить оператор DoEvens. Во всяком случае не помешает.
А вот этот непонятный оператор, естественно, выдает ошибку на моем тесте. Что за ячейку вы хотите выделить? Подозреваю, что Range("imm"& nm). Но при чём тут функция Array? Да и есть ли на вашем компе такая ячейка?
Цитата Сообщение от Оксана33 Посмотреть сообщение
ActiveSheet.Shapes.Range(Array("imm" & nm)).Select
Добавлено через 10 минут
Оксана33, лучше в таких случаях присылать файл с вашими imm, видимо, поиск по названию шэйпа.

Добавлено через 23 минуты
Оксана33, сделал пример с вашими имм, мне кажется, что работает как написано. Сначала все сдвигаются, а потом выделяется одна (Cut) и возвращается назад. Если остальные за кадром, то там и остаются. Если нужно их сдвинуть снова все, то сначала выделить их все. Или я что-то не так понимаю (за кадром)?
0
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
13.10.2017, 15:43  [ТС] 4
извиняюсь за халатность, вот немного переделала и приложила...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub picShift()
'
ct = ActiveSheet.Shapes.Count
 
Cells(1, 1) = ct
 
 
   If ActiveCell.Column = 1 And ActiveCell.Row <= ct Then
   
   ar = ActiveCell.Row
      
       For i = 1 To ct
       ActiveSheet.Shapes("imm" & i).Select
       Selection.Cut
       Range("P3").Select
       ActiveSheet.Paste
       Next
     
 
       ActiveSheet.Shapes("imm" & ar).Select
       Selection.Cut
       Range("C3").Select
       ActiveSheet.Paste
 
'       Cells(ar, 1).Select 'при этой строке идет замыкание
       
       
   End If
 
End Sub
Вложения
Тип файла: rar shiftPic.rar (303.4 Кб, 3 просмотров)
0
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
13.10.2017, 15:53  [ТС] 5
Цитата Сообщение от Burk Посмотреть сообщение
ActiveSheet.Shapes.Range(Array("imm" & nm)).Select
ой! это из макрорекодера и я уже переписала

Добавлено через 1 минуту
Цитата Сообщение от Burk Посмотреть сообщение
ставить оператор DoEvens
можно по подробней, пож) может это и поможет как раз - куда его ставить

Добавлено через 5 минут
Цитата Сообщение от Burk Посмотреть сообщение
Или я что-то не так понимаю
думаю все Вы правильно понимаете) там при выделении всех вместе выходит что они как бы разбрасываются при каждом вызове, так как выделяются массивом, поэтому я написала цикл
но выходит что я не могу перемещаться клавишой по ячейкам - нужно каждый раз клацать мышкой, поскольку идет выделение фигуры, а если вернуться к той же ячейке, то снова идет выделение и бесконечный цикл
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
13.10.2017, 16:48 6
Оксана33, почему ой? У меня и с ой работало, может не так как вам хотелось бы.
Так у вас же в листе три стоит запуск макроса по SelectionChange, а выделенные ячейки постоянно меняются вот и выполняется макрос бесконечное число раз. Cells(ar,1).Select. Опишите переменную Public TF в Module не на листе, а в коде листа сделайте например, как ниже. Когда нужно будет, то в основной программе поставите TF = False
DoEvets, как я понимаю, завершает все действия произведенные макросом (особенно это касается картинок и передает управление системе. Хуже не будет это точно. Это типа Закрой дверь - да она закрыта.

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If not TF then 
 
TF=True
Call picShift
 
End if
End Sub
Добавлено через 13 минут
Оксана33, а TF=False можно поставить после Cells(ar,1).Select
1
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.10.2017, 13:18 7
Лучший ответ Сообщение было отмечено Оксана33 как решение

Решение

Альтернативный вариант,

где все необходимые "картинки" необходимо просто расположить так, как это необходимо для пользователя :

Visual Basic
1
2
3
4
5
6
7
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column > 1 Then Exit Sub
    If Target.Row > DrawingObjects.Count Then Exit Sub
 
    DrawingObjects.Visible = False
    DrawingObjects(Target.Row).Visible = True
End Sub
Вложения
Тип файла: zip visiblePicture.zip (303.2 Кб, 6 просмотров)
1
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
14.10.2017, 19:49  [ТС] 8
pashulka, спасибо!) это идеально, подобно как я уже переделала на 3-го вариант, но там минус, что видны остальные
я кстати думала о том чтоб скрыть но так и вылетело из головы((

Visual Basic
1
2
3
4
5
6
7
If ActiveCell.Column = 1 And ActiveCell.Row <= ct Then
   
   i = ActiveCell.Row
   On Error Resume Next
   ActiveSheet.Shapes.Range(Array("img" & i)).ZOrder msoBringToFront
       
End If
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
14.10.2017, 20:28 9
pashulka, это не альтернативный вариант, я просто нашёл ошибку в коде, о чём и был вопрос. Так что вашему решению всей задачи альтернативы нет
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
14.10.2017, 20:31 10
Лучший ответ Сообщение было отмечено Оксана33 как решение

Решение

Оксана33, На всякий случай : для перемещения картинок(графики) вовсе не нужно использовать их вырезать и вставлять, ибо у этих об'ектов наличествуют свойства Left (и Top)

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column > 1 Then Exit Sub
    If Target.Row > DrawingObjects.Count Then Exit Sub
    
    With ActiveWindow.VisibleRange
         DrawingObjects.ShapeRange.Left = .Columns(.Columns.Count + 1).Left
         DrawingObjects(Target.Row).Left = .Columns(2).Left
    End With
End Sub
VisibleRange используется потому как "за кадром" для каждого монитора разное, к примеру, у меня Ваша ячейка [M3] видна Правда в таком варианте - ничто не мешает пользователю использовать скролл/клавиши и увидеть перемещённые картинки, поэтому я и предлагал скрытие всех ненужных картинок.


Burk, Это именно альтернативный вариант решения поставленной задачи и к Вашим ответам он прямого отношения не имеет.
0
1 / 1 / 0
Регистрация: 03.12.2014
Сообщений: 329
18.10.2017, 17:56  [ТС] 11
Цитата Сообщение от pashulka Посмотреть сообщение
у меня Ваша ячейка [M3] видна
ну естественно я бы ее потом изменила при надобности, меня оба варианта устраивают)

.... классно! спасибо за ответы)
0
18.10.2017, 17:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2017, 17:56
Помогаю со студенческими работами здесь

Переместить вниз строки массива, в которых сумма элементов строки меньше ноля
есть двумерный массив. нужно переставить строки вниз, у которых сумма элементов строк меньше ноля....

Как переместить символ окончания строки /0 в конец строки?
Это мне нужно сделать, чтоб не появлялись кракозябры. Причем сделать для всех строк подключенного к...

Выполнить циклический сдвиг элементов каждой строки матрицы на количество позиций, равное номеру строки
Дана матрица целых чисел X(5х8). Выполнить циклический сдвиг элементов каждой строки матрицы на...

Считывание Определенной Строки Из Файла По Номеру Строки?
Считывание Определенной Строки Из Файла По Номеру Строки? // В БД Слов содержиться в текстовом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru