Это мой первый пост. Я пытался найти похожую тему, но не смог найти.
Я довольно новичок в VBA, и я учусь, пытаясь создать файл, который помогает планировать вырезание частей основного куска.
Поскольку Excel VBA не позволяет рисовать фигуры или линии, я использую метки с рамками для создания прямоугольников.
Прямоугольники представляют собой разрезы, которые должны быть сделаны.
Моя основная форма выглядит так:
Основная форма
Как вы можете видеть на изображении, в области, обозначенной красным прямоугольником, большой кусок с 1600 мм (в этом примере) будет иметь семь срезов по 60 мм.
Моя проблема началась, когда я попытался добавить различные разрезы в мое планирование резки.
Когда я принимаю разрез, он отправляется в очередь на резку, и можно определить новый разрез, как показано на рисунке ниже:
Второй срез
Проблема в том, что первый срез должен остаться там. Я понял, что для этого мне нужно использовать Коллекции и, скорее всего, Классы .
Это особенно важно, поскольку я хочу, чтобы в очереди можно было перемещать каждую линию вверх и вниз по очереди или даже стирать линию (и отражать ее в моем «чертеже»).
Код на данный момент слишком обширен, чтобы добавить его сюда, но мне удалось добавить некоторые функции, которые будут описаны ниже. Некоторые имена на португальском, но я не думаю, что это представляет проблему.
Здесь я создаю срезы, определяемые Largura: и Cortes reais:
Option Explicit
Public iCuts As Integer
Public Labels As Collection
Public newLabel As Object
Public bRecalculate As Boolean
Sub DrawCuts(NCuts As Integer, CutWidth As Double, TotalWidth)
Dim OriginX, OriginY As Integer
Dim labelCounter As Long
Dim labelCollection As New Collection
OriginX = 372
OriginY = 24
CutWidth = Multiplier(CutWidth, TotalWidth)
For labelCounter = 0 To NCuts - 1
Set newLabel = frmPlanning.Controls.Add("Forms.Label.1", "Corte" & labelCounter, True)
With newLabel
.ControlTipText = .Name 'labelCounter + 1
.Left = OriginX + CutWidth * labelCounter
.Width = CutWidth
.Height = 48
.Top = OriginY
.BackColor = &HFFFFFF
.BorderStyle = 1
.TextAlign = 2
.Font.Size = 6
.Caption = iCuts
End With
iCuts = iCuts + 1
Next
iCuts = iCuts - 1
End Sub
И в следующем СУБЕКЕ я адаптирую разрезы к размеру основной части, определенной Larg. Bobine:
Sub Dim_Labels(Cuts As Integer, CutWidth As Double, RollWidth As Double, RollLeft As Double)
With frmPlanning.lCutWidth
.Caption = CutWidth * Cuts
.Width = Cuts * Multiplier(CutWidth, RollWidth)
End With
With frmPlanning.lCutLeft
.Caption = RollLeft
.Left = 372 + Cuts * Multiplier(CutWidth, RollWidth)
.Width = 320 - Cuts * Multiplier(CutWidth, RollWidth)
End With
frmPlanning.lRollWidth = RollWidth
End Sub
Я пытался поместить это в коллекцию, но я не только получаю всевозможные ошибки, но также не могу создавать разные коллекции для каждого набора разрезов, чтобы перемещать каждый набор независимо.
Я знаю, что это связано с моим непониманием того, как работают коллекции и классы, но я действительно застрял и не могу идти дальше и нуждаюсь в некоторой помощи, если вы можете это дать.
Я не смог найти способ, но могу предоставить файл excel, чтобы помочь вам лучше понять проблему, если есть способ.
Спасибо.
Жулио