Добрый день, подскажите пожалуйста как зафиксировать изображение в Excel 2003. Надо зафиксировать изображение чтобы при прокрутке оно находилось в верхнем правом углу, закрепление области не подходит.
ikki: ... а как таскать по экрану такое чудо? только через меню по Alt+Space?
Таскать можно так:
1. С API:
Код
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
ReleaseCapture
SendMessage FindWindow("ThunderDFrame", Me.Caption), 161&, 2&, 0&
End If
End Sub
2. Без API:
Код
Private MeX!, MeY!
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
MeX = X
MeY = Y
End If
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
Me.Left = X + Me.Left - MeX
Me.Top = Y + Me.Top - MeY
End If
End Sub
Владимир, может по сохранению подскажете. Проверил вариант без API. Таскается мышкой отлично, но как сохранить координаты, чтобы в следующий раз форма открылась в последней своей позиции.
Да, можно запомнить, например, в скрытых именах книги:
Код
Private Sub UserForm_Initialize()
' ... Здесь то, что было раньше ...
' Восстановить положение формы
On Error Resume Next
Me.StartUpPosition = 0
Me.Left = [MyForm.Left]
Me.Top = [MyForm.Top]
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' Запомнить положение формы
ThisWorkbook.Names.Add "MyForm.Left", Me.Left, False
ThisWorkbook.Names.Add "MyForm.Top", Me.Top, False
End Sub
Вот спасибо! Поставил запоминание координат на UserForm_MouseUp. По аналогии сделал запоминание для картинки. Интересно, иногда при смене картинки происходит приличная задержка, а в другой раз нет. Тем не менее, с Вашей помощью, считаю эту задачу для себя решенной.
Сделано, конечно очень здорово. Но картинка не меняется при переходе на другой лист.
Это нельзя реализовать?
То есть чтобы положение картинки не менялось при прокрутке на одном листе, а при переходе на другой лист она бы исчезала. А при возврате на лист со скриптом - снова бы появлялась. Иными словами - можно ли картинку привязать к одному конкретному листу, а не книге в целом ?
Юрий М написал: У картинки есть свойство Visible - вот его и менять при активации/деактивации листа.
Просмотрел свойства формы (Picture_Form Properties). Там одно единственное упоминание Visible - это параметр KeepScrollBarsVisible - но он в общем-то ничего не меняет.
Нигде в макросе параметр Visible больше не встречается.
Юрий М написал: Вы уж определитесь, в какой теме будет обсуждение. И я не говорил про конкретный код (файл не смотрел даже) - я говорил ТОЛЬКО про свойства картинки.
Обсуждать тогда лучше не в этой теме. Только вот последнее сообщение напишу.... Насчет свойств картинки - при включении Режима конструктора - эта картинка вообще исчезает, поэтому какие-либо свойства выбрать - становится вообще невозможно. Редактировать форму картинки (изменять свойства, размер и т.д.) можно - в редакторе Visual Basic. И там я не нашел такого параметра как Visible.