Vba 在Excel中基于一个单元格更改另一个单元格的值
我是Excel和VBA新手。我正在制作一个项目列表,其中我有两个状态栏,Vba 在Excel中基于一个单元格更改另一个单元格的值,vba,excel,Vba,Excel,我是Excel和VBA新手。我正在制作一个项目列表,其中我有两个状态栏,Status和Status in Words。在前者中,我需要以数字形式输入状态,例如50%或80%,在后者中,我需要以文字形式输入项目状态,例如打开、关闭、进行中等。我的问题是,当我在第一列中写入50%时,另一列中的状态应自动更改为in Progress,反之亦然。如果我在第二列中键入Closed,则第一列中的状态应更改为100%。谁能告诉我如何在Excel vba中处理此问题。这可能会奏效。将1更改为较低的列号,将2更改
Status
和Status in Words
。在前者中,我需要以数字形式输入状态,例如50%或80%,在后者中,我需要以文字形式输入项目状态,例如打开、关闭、进行中等。我的问题是,当我在第一列中写入50%时,另一列中的状态应自动更改为in Progress
,反之亦然。如果我在第二列中键入Closed
,则第一列中的状态应更改为100%
。谁能告诉我如何在Excel vba中处理此问题。这可能会奏效。将1更改为较低的列号,将2更改为较大的列号。我不知道如何告诉Excel检查它是否等于“100%”或“50%”,所以我不得不使用1和.5。如果有人知道,请随意编辑或发表评论
'This is a global variable, prevents endless loops in worksheet change.
Dim running As Boolean
'When any change is made on the worksheet, sends target as the changed cell
Private Sub Worksheet_Change(ByVal Target As Range)
'Checks to see if a worksheet change is already running, if it is, then it quits
If running = True Then Exit Sub
'We are running code now, so prevent endless loops
running = True
Dim YourFirstColumn, YourOtherColumn As Integer
'Set to your values
YourFirstColumn = 1
YourOtherColumn = 2
'If this is a column you want to change
If Target.Column = YourFirstColumn Then
'Change values
If Target.Value = "In Progress" Then
Target.Offset(0, Abs(YourFirstColumn - YourOtherColumn)).Value = "50%"
ElseIf Target.Value = "Closed" Then
Target.Offset(0, Abs(YourFirstColumn - YourOtherColumn)).Value = "100%"
End If
'If this is the other column you want to change
ElseIf Target.Column = YourOtherColumn Then
'Change values
If Target.Value = 0.5 Then
Target.Offset(0, -Abs(YourFirstColumn - YourOtherColumn)).Value = "In Progress"
ElseIf Target.Value = 1 Then
Target.Offset(0, -Abs(YourFirstColumn - YourOtherColumn)).Value = "Closed"
End If
End If
running = false
End Sub
在没有VBA的情况下,仅使用2个单元格无法进行“反之亦然”的单元格更改。如果在单元格中手动键入值,它将覆盖用于检查其他单元格的任何公式。您的非VBA选项是使用4列-其中2列为“输入”,2列为“输出”。这样,您可以在前2个字段中输入数据,第2个字段将选择正确的值。我很乐意使用VBA。你能指导我如何进行VBA吗@除非你能读懂你正在运行的代码,否则不要使用VBA。如果你能阅读VBA代码,请先自己尝试,因为这个网站是为特定的问答服务,而不是代码编写服务。如果您对如何使代码正常工作有疑问,我们很乐意提供帮助。事实上,这个问题太宽泛了,无法回答。@Grade'Eh'Bacon我完全同意!请只在你明白你在做什么的情况下使用这个。我写代码,但我做了很多调试。你不需要vba!一个公式就足够了。非常感谢代码,我想这就是我想要的。我有一个问题,我应该把它作为一个新的模块,然后尝试修改并运行它吗?啊,对不起,不。这应该进入工作表的代码,因为它是特定于工作表的,否则,是的。然而,我会在第一行放一个断点,并用“F8”逐行遍历它,以确保它不会弄乱工作表中的任何其他内容。您甚至可能希望在运行它之前保存。在单元格中使用vba代码更改值的一个缺点是,您将无法再执行撤消操作。@seadogie01该代码似乎工作得很好。但是Excel在实现代码后崩溃。有什么想法吗<代码>“方法‘对象范围’\u工作表失败”这是我得到的错误。如果愿意,您可以删除它,但问题可能会因为太宽而结束@Nikky我的意思是,如果您需要VBA解决方案,您不必为此而生气,只是为了鼓励您自己学习如何使用VBA编写代码。否则,您将面临很大的风险,要么运行在不知情的情况下在线发现的恶意代码,要么由于无法修复他人所做的工作而使自己无法完成工作。如果您遇到编码问题时有特定的问题,那么这绝对是解决这些问题的正确地方。