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
Vba 基于A2单元格值将数字和字符串值放入B2和C2单元格_Vba_Excel - Fatal编程技术网

Vba 基于A2单元格值将数字和字符串值放入B2和C2单元格

Vba 基于A2单元格值将数字和字符串值放入B2和C2单元格,vba,excel,Vba,Excel,我试图制作一个下拉列表,如果您在单元格“A2”中选择某个员工ID,它将用三位员工数字ID填写单元格“B2”,并用员工全名填写单元格“C2”。这应该是一个相当简单的任务,但是我写的代码根本不起作用。在我运行它之后,它会将一个“0”放在“B2”中,而不管“A2”中的选择是什么,而“C2”中没有任何内容。我试着用.Value/.Text/.Number标识符来处理,并在值周围使用“或no”,但都没有用。知道我做错了什么吗 Sub ind_naming() Dim in_ws As Worksheet

我试图制作一个下拉列表,如果您在单元格
“A2”
中选择某个员工ID,它将用三位员工数字ID填写单元格
“B2”
,并用员工全名填写单元格
“C2”
。这应该是一个相当简单的任务,但是我写的代码根本不起作用。在我运行它之后,它会将一个
“0”
放在
“B2”
中,而不管
“A2”
中的选择是什么,而
“C2”
中没有任何内容。我试着用
.Value/.Text/.Number
标识符来处理,并在值周围使用
或no
,但都没有用。知道我做错了什么吗

Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")

in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)

in_ws.Range("F1").Value = in_ws.Range("A2").Value

If in_ws.Range("A2").Value = "BI08298" Then in_ws.Range("B2").Value = "113" And in_ws.Range("C2").Value = "John Smith"
If in_ws.Range("A2").Value = "GB31446" Then in_ws.Range("B2").Value = "170" And in_ws.Range("C2").Value = "John Bob"
If in_ws.Range("A2").Value = "ZB40049" Then in_ws.Range("B2").Value = "158" And in_ws.Range("C2").Value = "Gary Doe"
If in_ws.Range("A2").Value = "KF14006" Then in_ws.Range("B2").Value = "121" And in_ws.Range("C2").Value = "Mary Jane"
If in_ws.Range("A2").Value = "JT99623" Then in_ws.Range("B2").Value = "167" And in_ws.Range("C2").Value = "Nate Tailor"
If in_ws.Range("A2").Value = "FO07386" Then in_ws.Range("B2").Value = "168" And in_ws.Range("C2").Value = "Jacob Grant"


End Sub

您也可以通过案例陈述来实现这一点,但我可能会选择一个Vlookup,将员工的所有详细信息放在一个单独的表中,您可以查看该表,这样可以减少代码行,如果该表中的任何详细信息发生更改,您的代码也会发生更改,但对于案例陈述,请参见以下内容:

Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")

in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)

in_ws.Range("F1").Value = in_ws.Range("A2").Value

Select Case in_ws.Range("A2").Value
    Case "BI08298"
        in_ws.Range("B2").Value = "113"
        in_ws.Range("C2").Value = "John Smith"
    Case "GB31146"
        in_ws.Range("B2").Value = "170"
        in_ws.Range("C2").Value = "John Bob"
    Case "ZB40049"
        in_ws.Range("B2").Value = "158"
        in_ws.Range("C2").Value = "Gary Doe"
    Case "KF14006"
        in_ws.Range("B2").Value = "121"
        in_ws.Range("C2").Value = "Mary Jane"
    Case "JT99623"
        in_ws.Range("B2").Value = "167"
        in_ws.Range("C2").Value = "Nate Tailor"
    Case "FO07386"
        in_ws.Range("B2").Value = "168"
        in_ws.Range("C2").Value = "Jacob Grant"
End Select

End Sub

您也可以通过案例陈述来实现这一点,但我可能会选择一个Vlookup,将员工的所有详细信息放在一个单独的表中,您可以查看该表,这样可以减少代码行,如果该表中的任何详细信息发生更改,您的代码也会发生更改,但对于案例陈述,请参见以下内容:

Sub ind_naming()
Dim in_ws As Worksheet
Set in_ws = ActiveWorkbook.Sheets("INDIVIDUAL_REPORT")

in_ws.Range("A5:E100").Delete Shift:=xlUp
in_ws.Range("A5:E100").Interior.Color = RGB(224, 245, 250)

in_ws.Range("F1").Value = in_ws.Range("A2").Value

Select Case in_ws.Range("A2").Value
    Case "BI08298"
        in_ws.Range("B2").Value = "113"
        in_ws.Range("C2").Value = "John Smith"
    Case "GB31146"
        in_ws.Range("B2").Value = "170"
        in_ws.Range("C2").Value = "John Bob"
    Case "ZB40049"
        in_ws.Range("B2").Value = "158"
        in_ws.Range("C2").Value = "Gary Doe"
    Case "KF14006"
        in_ws.Range("B2").Value = "121"
        in_ws.Range("C2").Value = "Mary Jane"
    Case "JT99623"
        in_ws.Range("B2").Value = "167"
        in_ws.Range("C2").Value = "Nate Tailor"
    Case "FO07386"
        in_ws.Range("B2").Value = "168"
        in_ws.Range("C2").Value = "Jacob Grant"
End Select

End Sub

我想你应该用Vlookup。我想你们在某处有(或者你们应该有)张桌子,比如说在纸上写着“EMP”。此表应类似于:

Emp_ID    Emp_Number    Emp_Name
BI08298   113           John Smith
然后您可以将以下公式放入B2中:

=IFERROR(VLOOKUP(A2,Emps!A:C, 2, 0),"")
在C2中:

=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"")
也可以通过VBA插入公式。我会在工作表下做一个宏(不是在模块中),类似这样

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$2" Then Exit Sub

    Dim sFormulaB As String, sFormulaC As String
    sFormulaB = "=IFERROR(VLOOKUP(A2,Emps!A:C,2, 0),"""")"
    sFormulaC = "=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"""")"

    With Target
        .Offset(, 1).Formula = sFormulaB
        .Offset(, 2).Formula = sFormulaC
    End With

    Call RestOfCode_procedure
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标地址为“$A$2”,则退出Sub
Dim sFormulaB作为字符串,sFormulaC作为字符串
sFormulaB=“=IFERROR(VLOOKUP(A2,Emps!A:C,2,0),”)
sFormulaC=“=IFERROR(VLOOKUP(A2,Emps!A:C,3,0),”)
有目标
.偏移量(,1).公式=s公式b
.偏移量(,2).公式=s公式
以
调用RestOfCode_过程
端接头

您可以将代码的其余部分存储在sub中的普通模块中,并通过上面的过程调用它。

我认为您应该使用Vlookup。我想你们在某处有(或者你们应该有)张桌子,比如说在纸上写着“EMP”。此表应类似于:

Emp_ID    Emp_Number    Emp_Name
BI08298   113           John Smith
然后您可以将以下公式放入B2中:

=IFERROR(VLOOKUP(A2,Emps!A:C, 2, 0),"")
在C2中:

=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"")
也可以通过VBA插入公式。我会在工作表下做一个宏(不是在模块中),类似这样

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$2" Then Exit Sub

    Dim sFormulaB As String, sFormulaC As String
    sFormulaB = "=IFERROR(VLOOKUP(A2,Emps!A:C,2, 0),"""")"
    sFormulaC = "=IFERROR(VLOOKUP(A2,Emps!A:C, 3, 0),"""")"

    With Target
        .Offset(, 1).Formula = sFormulaB
        .Offset(, 2).Formula = sFormulaC
    End With

    Call RestOfCode_procedure
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标地址为“$A$2”,则退出Sub
Dim sFormulaB作为字符串,sFormulaC作为字符串
sFormulaB=“=IFERROR(VLOOKUP(A2,Emps!A:C,2,0),”)
sFormulaC=“=IFERROR(VLOOKUP(A2,Emps!A:C,3,0),”)
有目标
.偏移量(,1).公式=s公式b
.偏移量(,2).公式=s公式
以
调用RestOfCode_过程
端接头

您可以将sub中的其余代码存储在普通模块中,并从上面的过程调用它。

您也可以通过A2中的下拉菜单,以及
B2中的
VLOOKUP
C2
引用包含数据的表来执行此操作。我尝试了VLOOKUP,但它不起作用,即使语法正确。如果语法正确,且值相同,
VLOOKUP
也可以工作。但是您没有提供任何信息来帮助您解决该问题。您也可以通过A2中的下拉菜单,以及
B2
C2
中的
VLOOKUP
来实现这一点。我尝试过VLOOKUP,但它不起作用,即使语法正确。如果语法正确,且值相同,
VLOOKUP
将起作用。但是你没有提供任何信息来帮助你解决这个问题。我已经尝试了
VLOOKUP
,但它对我不起作用。我在工作表
“个人报告”
单元格
A2
中有一个员工ID下拉列表,它引用了工作表
“审阅者”
范围
“A2:A8”
。我在
REVIEWERS
范围
“B2:B8”
中有员工的数字id,在
REVIEWERS“C2:C8”
中有全名。我在
“个人报告”
表单元格
“B2”
=VLOOKUP(A2,审阅者!A2:A8,2,FALSE)
上有以下公式,但它只是把
!REF#
Yep刚刚尝试粘贴您建议的VLOOKUP公式,用数据切换了列和表名,现在效果非常好。非常感谢。我99%的时间都在使用VBA,虽然我对公式几乎一无所知,但这是一个更优雅的解决方案,我尝试过
VLOOKUP
,但它对我不起作用。我在工作表
“个人报告”
单元格
A2
中有一个员工ID下拉列表,它引用了工作表
“审阅者”
范围
“A2:A8”
。我在
REVIEWERS
范围
“B2:B8”
中有员工的数字id,在
REVIEWERS“C2:C8”
中有全名。我在
“个人报告”
表单元格
“B2”
=VLOOKUP(A2,审阅者!A2:A8,2,FALSE)
上有以下公式,但它只是把
!REF#
Yep刚刚尝试粘贴您建议的VLOOKUP公式,用数据切换了列和表名,现在效果非常好。非常感谢。我99%的时间都在使用VBA,虽然我对公式几乎一无所知,但这是一个更加优雅的解决方案