просто решение немного другим путем.. Элементы, кроме SpinButton и других элементов, которые не должны прокручиваться, помещаются внутри объекта Frame, задается параметр Frame.ScrollHeight. на SpinButton1 вешаем
Код
Private Sub SpinButton1_Change()
Frame1.ScrollTop = SpinButton1.Value
End Sub
Добрый вечер! При прокрутке формы, один из объектов должен оставаться на своем месте. Объект остается, но дерганый, чем его успокоить, чтобы не дергался во время прокрутки? Вот форма
Код
Sub форма_макр()
Dim Line As Integer, i As Byte
Dim кнопка As Object, скролл As Object, модуль As Object, форма As Object
Set форма = ThisWorkbook.VBProject.VBComponents.Add(3)
With форма
.Properties("Width") = 300
.Properties("Height") = 400
.Properties("Caption") = ""
.Properties("ScrollHeight") = 1500
End With
Set скролл = форма.Designer.Controls.Add("forms.SpinButton.1", "SpinButton1", True)
Set кнопка = форма.Designer.Controls.Add("forms.CommandButton.1", "кнопка")
With скролл
.Height = 379
.Width = 40
.Left = 255
.Top = 0
.Delay = 1
.SmallChange = 10
.Max = 0
.Min = -1000
.BackColor = &H80000003
.ForeColor = &H0&
End With
With кнопка
.Height = 60
.Width = 100
.Left = 154
.Top = 319
.Caption = "должна стоять здесь и не рыпаться"
.WordWrap = True
.Font.Size = 12
.BackColor = &H80000003
.ForeColor = &H0&
End With
For i = 0 To 50
Set кнопка = форма.Designer.Controls.Add("forms.CommandButton.1", "кнопка" & i, True)
With кнопка
.Height = 30
.Width = 100
.Left = 0
.Top = i * 40
.Caption = i
.Font.Size = 14
.BackColor = &H80000003
.ForeColor = &H0&
End With
Next
With форма.CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Private Sub SpinButton1_Change()"
.InsertLines Line + 2, "Me.ScrollTop = -SpinButton1.Value"
.InsertLines Line + 3, "SpinButton1.Top = -SpinButton1.Value"
.InsertLines Line + 4, "'DoEvents"
.InsertLines Line + 5, "кнопка.Top = Me.Height - кнопка.Height - SpinButton1.Value - 20 '20 - высота шапки формы"
.InsertLines Line + 6, "End Sub"
End With
VBA.UserForms.Add(форма.Name).Show
For Each модуль In ActiveWorkbook.VBProject.VBComponents
On Error Resume Next
If модуль.Name = "Module1" Then модуль.Collection.Remove модуль
Next
End Sub
vikttur написал: Посмотреть в сторону ListBox? Разрешить выделение множества записей...
Я делал с ListViev, так как там можно прокручивать пальцем на экране планшета, но все же не очень юзабельно. В данном случае на каждой кнопке фото блюда, что упрощает процесс принятия заявки. Должно получится что то типа этого:
нет, просто у меня изначально форма создает порядка 30 кнопок - групп, кликнув любую из них, отображаются до 100 кнопок - подгрупп на месте предыдущих, потом опять открываешь начальные кнопки и т.д.) это электронное меню. Мне проще удалять и создавать кнопки
Добрый день! как удалить вызванный с методом add объект с формы? не скрыть а именно удалить, имитация delete
Код
Sub создать_форму()
Dim форма As Object, Line As Integer
Dim кнопка As CommandButton, рисунок As Image
Set форма = ThisWorkbook.VBProject.VBComponents.Add(3)
With форма
.Properties("Width") = 200
.Properties("Height") = 160
.Properties("Caption") = ""
End With
Set рисунок = форма.Designer.Controls.Add("forms.image.1", "Pic1", True)
Set кнопка = форма.Designer.Controls.Add("forms.CommandButton.1", "кнопка1")
With рисунок
.Height = 50
.Width = 176
.Left = 10
.Top = 10
.BackColor = &H80FF80
End With
With кнопка
.Height = 60
.Width = 100
.Left = 48
.Top = 70
.Caption = "нажать, чтобы объект сверху удалился"
.WordWrap = True
.Font.Size = 10
End With
With форма.CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Private Sub кнопка1_Click()"
.InsertLines Line + 2, "msgbox ""сюда макрос"""
.InsertLines Line + 3, "End Sub"
End With
VBA.UserForms.Add(форма.Name).Show
ThisWorkbook.VBProject.VBComponents.Remove форма
End Sub
теперь вопрос следующего плана, на форме 504 кнопки с датами. Надо чтобы каждая реагировала на клик. Что можно сделать, чтобы не прописывать код каждой кнопке? Может цикл типа for each в каком нибудь неизвестном науке событии userform, который будет отлавливать клики по всем объектам на форме?
Dima S, почитал, Все_просто, переписал, понял что зря связался с листбоксами. Получилось что то вроде этого. За то что разбирались в моих каракулях, все будет оплачено
если столбцов немного, то можно в А4 ставить формулу: =ЕСЛИ(A3=A1;A2;ЕСЛИ(A3=B1;B2;ЕСЛИ(A3=C1;C2;ЕСЛИ(A3=D1;D2;ЕСЛИ(A3=E1;E2;ЕСЛИ(A3=F1;F2;ЕСЛИ(A3=G1;G2;ЕСЛИ(A3=H1;H2;ЕСЛИ(A3=I1;I2;"")))))))))
Добрый день! Надо зайти в почту через браузер, как нажать на кнопку "войти"?
Код
Dim oIE As Object, sHTML As String
Dim tmp, i As Long
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = 1
s = "https://mail.yandex.ru/"
oIE.Navigate (s)
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop
Set maPageHtml = oIE.Document
Set NodeList = oIE.Document.getElementsbyTagname("Input")
NodeList(0).Value = "логин"
NodeList(1).Value = "пароль"
imya = Sheets("Price ").Range(Cells(selection.Row, 3).Address) 'имя позиции
On Error Resume Next
With Sheets("Price ").Pictures.Insert("Z:рисунки\" & imya & ".jpg")
.ShapeRange.Height = 28 'ставим высоту рисунка
.name
End With
Добрый день. Проблема следующая: Программа формирует прайс лист и добавляет фото к позициям. Когда сохраняю в пдф проблем нет, но клиенты просят в эксель, но в итоге вместо рисунков видят "не удается отобразить связанный рисунок и т.д...". Вот макрос добавления рисунков:
Код
For i = 4 To Sheets("Price").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Price ").Range(Cells(i, 2).Address).Select
Dim x As Range
Set x = Selection 'Sheets("Price ").Range(Cells(Selection.Row, 3).Address)
Sheets("Price ").Range(Cells(i, 3).Address).Replace What:="""", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
imya = Sheets("Price ").Range(Cells(x.Row, 3).Address) 'имя позиции
If imya <> "" Then
On Error Resume Next
With Sheets("Price ").Pictures.Insert(путь_к_папке_с_рисунками\" & imya & ".jpg")
.ShapeRange.Height = 28 'ставим высоту рисунка
ширина = .ShapeRange.Width
.Name = imya
End With
If Err Then
With Sheets("Price ").Pictures.Insert(путь_к_папке_с_рисунками/рисунок_отсутствует .jpg")
.ShapeRange.Height = 28 'ставим высоту рисунка
ширина = .ShapeRange.Width
.Name = imya
End With
End If
Sheets("Price ").Shapes.Range(Array(имя)).IncrementTop 2 'ставим рисунок чуть ниже, чтобы было видно границу ячейки
Sheets("Price ").Shapes.Range(Array(имя)).IncrementLeft (x.Width - ширина) / 2 'определяем ширину столбца и ставим рисунок посередине
End If
Next i
Это не помогло:
Код
On Error Resume Next
Set Pic = RangePhoto.Worksheet.Shapes.AddPicture(FlName, msoFalse)