使用用户表单从工作表获取数据

问题描述 投票:0回答:1

我不是编码专家,对自己要做的事情有些迷茫。我有一个电子表格,其中有许多列需要完成。由于你需要不断地在电子表格中滚动以添加数据,这变得有点不友好。

我已经创建了一个用户表单,这将使电子表格更容易更新。这说起来容易做起来难。我有一个文本框,用户可以在文本框中输入数据,但代码似乎失败了,我无法找出原因。

另一件我似乎找不到的事情是如何使用这个值从电子表格中检索数据。目前的代码如下图所示。

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的值,同样我也不知道我输入的是否正确。

下一阶段将是修改所需的值,并将其推送回sreadsheet。我还不知道如何做,是否从命令按钮中做更好,等等。

excel vba validation userform insert-update
1个回答
2
投票

这里有两个问题。

a)正如BigBen所写的,你混合了两种符号,两种符号都是有效的,但参数不同--在你的情况下,这只是一个品味问题。

当使用 Range参数是一个范围名称,就像你在Excel公式中使用的那样。A1 对于A1单元格,或 MIC 对于一个命名的范围。假设 xLine 持有行号 10,你可以将列中的 K 和变量 xLine 给你一串 K10. 当使用 Cells你必须把行和列作为单独的参数传递,所以你可以写一个 xComp.Cells(xLine, "K")xComp.Cells(xLine, 11). 列号或列字符作为第二个参数都是有效的。

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
© www.soinside.com 2019 - 2024. All rights reserved.