Получение данных из рабочего листа с помощью пользовательской формы - PullRequest
0 голосов
/ 08 мая 2020

Я не специалист по кодированию и немного потерялся в том, что пытаюсь сделать. У меня есть таблица, в которой нужно заполнить ряд столбцов. Это стало немного неудобно для пользователя, так как вам постоянно нужно прокручивать электронную таблицу, чтобы добавить данные.

Я создал пользовательскую форму, которая упростит обновление электронной таблицы. Легче сказать, чем сделать. У меня есть текстовое поле, в котором пользователь указывает, в какой строке извлекаются данные, но код, похоже, не работает, и я не могу понять, почему.

Еще одна вещь, которую я не могу выяснить, это как использовать это значение для извлечения данных из электронной таблицы. Текущий код показан ниже:

Private Sub UserForm_Initialize()

Dim xGateway As Range
Dim xCCode As Range
Dim xMIC As Range
Dim xCreator As Range
Dim xComplete As Range
Dim xData As Worksheet
Dim xComp As Worksheet
Dim xLine As String

   Set xData = Worksheets("Data")
   Set xComp = Worksheets("Tracker")

   xLine = TB_LineNo.Value

   For Each xGateway In xData.Range("Gateway")
   Me.CB_Gateway.AddItem xGateway.Value
   Next xGateway

   For Each xMIC In xData.Range("MIC")
   Me.CB_VGW.AddItem xMIC.Value
   Next xMIC

   For Each xCCode In xData.Range("Code")
   Me.CB_CCode.AddItem xCCode.Value
   Next xCCode

   For Each xCreator In xData.Range("Creator")
   Me.CB_Creator.AddItem xCreator.Value
   Next xCreator

   For Each xMIC In xData.Range("MIC")
   Me.CB_CBy.AddItem xMIC.Value
   Next xMIC

   For Each xMIC In xData.Range("MIC")
   Me.CB_ABy.AddItem xMIC.Value
   Next xMIC

   For Each xMIC In xData.Range("MIC")
   Me.CB_UpBy.AddItem xMIC.Value
   Next xMIC

   For Each xMIC In xData.Range("MIC")
   Me.CB_PubBy.AddItem xMIC.Value
   Next xMIC

   For Each xComplete In xData.Range("YN")
   Me.CB_Comp.AddItem xComplete.Value
   Next xComplete

   CB_Gateway.Value = xComp.Range(xLine, "k")
End Sub

Последняя строка - это область, в которой у меня возникла проблема, поскольку она не работает, и я не уверен, почему. Значение xLine, опять же, я не уверен, правильно ли я ввел его.

Следующим этапом будет изменение значений там, где это необходимо, и sh значений обратно в электронную таблицу. Я пока не уверен, как это сделать, лучше ли это делать с помощью командной кнопки et c.

1 Ответ

2 голосов
/ 08 мая 2020

Здесь две проблемы:

a) как писал BigBen, вы смешиваете две нотации, обе действительны, но параметры разные - в вашем случае это просто вопрос вкуса, который использовать:

При использовании Range параметр представляет собой имя диапазона, как если бы вы использовали его в формуле Excel: A1 для ячейки A1 или MIC для именованного диапазона. Предполагая, что xLine содержит номер строки 10, вы можете объединить столбец K и переменную xLine, дав вам строку K10.
При использовании Cells вы должны передать строку и столбец как отдельные параметры, поэтому вы должны написать либо xComp.Cells(xLine, "K"), либо xComp.Cells(xLine, 11). Как номер столбца, так и символы столбца действительны в качестве 2-го параметра.

b) вы должны убедиться, что xLine является числом, и что этот номер действителен, иначе вы столкнетесь с ошибкой выполнения. Я предлагаю вам объявить xLine как Long, преобразовать содержимое текстового поля в число и проверить, не превышает ли число 0:

Dim xLine as long
xLine = Val(TB_LineNo.Value)
If xLine > 0 Then 
    CB_Gateway.Value = xComp.Cells(xLine, "K")
Else
    CB_Gateway.Value = "(invalid line)"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...