Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用Userform从工作表中获取数据_Excel_Vba_Validation_Userform_Insert Update - Fatal编程技术网

Excel 使用Userform从工作表中获取数据

Excel 使用Userform从工作表中获取数据,excel,vba,validation,userform,insert-update,Excel,Vba,Validation,Userform,Insert Update,我不是一个编码专家,我已经有点迷失在我试图做的事情中。我有一个电子表格,其中有许多列需要完成。这变得有点不便于用户使用,因为您经常需要在电子表格中滚动以添加数据 我已经创建了一个用户表单,它将使电子表格更容易更新。这说起来容易做起来难。我有一个文本框,用户在其中声明了检索数据的行,但代码似乎失败了,我无法找出原因 另一件我似乎找不到的事情是如何使用这个值从电子表格中检索数据。当前代码如下所示: Private Sub UserForm_Initialize() Dim xGateway As

我不是一个编码专家,我已经有点迷失在我试图做的事情中。我有一个电子表格,其中有许多列需要完成。这变得有点不便于用户使用,因为您经常需要在电子表格中滚动以添加数据

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

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

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。我还不确定如何做到这一点,通过命令按钮等是否更好。

这里有两个问题:

a) 正如BigBen所写,您混淆了两种符号,它们都是有效的,但参数是不同的——在您的情况下,使用哪种符号只是口味的问题:

使用
Range
时,参数是一个范围名称,就像您在Excel公式中使用它一样:
A1
表示单元格A1,或
MIC
表示命名范围。假设
xLine
保存行号
10
,则可以将列
K
和变量
xLine
连接起来,从而得到一个字符串
K10

使用
单元格时
,必须将行和列作为单独的参数传递,因此可以编写
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
这里有两个问题:

a) 正如BigBen所写,您混淆了两种符号,它们都是有效的,但参数是不同的——在您的情况下,使用哪种符号只是口味的问题:

使用
Range
时,参数是一个范围名称,就像您在Excel公式中使用它一样:
A1
表示单元格A1,或
MIC
表示命名范围。假设
xLine
保存行号
10
,则可以将列
K
和变量
xLine
连接起来,从而得到一个字符串
K10

使用
单元格时
,必须将行和列作为单独的参数传递,因此可以编写
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

您正在尝试使用
单元格
表示法,而不是
范围
表示法。。。使用
xComp.Range(“K”&xLine)
。感谢您的回复。从你最初答案的内容来看,我几乎已经成功了。使用trigger.Range(“K”&xLine)。因为xLine是一个用户输入,所以我有一个新的AfterUpdate Sub,它正在工作。虽然xLine的初始值为,但应返回活动行。有什么建议吗?您正在尝试使用
单元格
表示法,而不是
范围
表示法。。。使用
xComp.Range(“K”&xLine)
。感谢您的回复。从你最初答案的内容来看,我几乎已经成功了。使用trigger.Range(“K”&xLine)。因为xLine是一个用户输入,所以我有一个新的AfterUpdate Sub,它正在工作。虽然xLine的初始值为,但应返回活动行。有什么建议吗?