如何基于输入文本值格式验证并将文本插入Excel工作表定义的位置?
我想解析插入的单元格文本,并使用它在相应的工作表中正确填充单元格数据。例如,根据工作表如何基于输入文本值格式验证并将文本插入Excel工作表定义的位置?,excel,vba,excel-formula,excel-2016,Excel,Vba,Excel Formula,Excel 2016,我想解析插入的单元格文本,并使用它在相应的工作表中正确填充单元格数据。例如,根据工作表1.1上单元格B2中的值,我想将文本插入工作表1.2上的指定位置。单元格文本按以下格式指定数据的目标位置: : 在这种情况下,工作表1.2上的相应数据应如下所示,并包含来自源工作表的数据位置: : 你认为不写VBA脚本有可能吗?您能否为非pro Excel用户提出一种实现此目标的方法;-) Alt+F11 双击左侧窗格中的工作簿模块(通常称为“ThisWorkbook”) 粘贴此代码。我试图对重要部分进行评
1.1
上单元格B2
中的值,我想将文本插入工作表1.2
上的指定位置。单元格文本按以下格式指定数据的目标位置:
:
在这种情况下,工作表1.2
上的相应数据应如下所示,并包含来自源工作表的数据位置:
:
你认为不写VBA脚本有可能吗?您能否为非pro Excel用户提出一种实现此目标的方法;-)
Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
Dim s()作为字符串
Dim shTarg As工作表
变暗LNGTARGPANELLOW尽可能长
尺寸lngTargModuleCol尽可能长
将sSourcePanel设置为字符串
将sSourceModule设置为字符串
调光范围
关于错误GoTo EndSub
如果Target.Count=1,则
'检查单元格中的新值(模糊地称为Target)是否有2个冒号
如果Len(目标)-Len(替换(目标“:”,”)=2,则
'使用单元格中由冒号分隔的元素创建数组
s()=拆分(目标“:”)
'按名称将VBA对象与特定图纸关联
设置shTarg=Me.张(s(0))
'查找目标行
集合c=shTarg.Range(“$A:$A”)。查找(s(1))
如果c为空,则转到EndSub Else lngTargPanelRow=c.行
'查找目标列
设置c=目标范围(“1:1”)。查找(替换(s(2),“M”,“模块”))
如果c为空,则转到EndSub Else lngTargModuleCol=c列
'查找源面板
sSourcePanel=Sh.Cells(Target.Row,1).Value
'查找源模块
sSourceModule=Sh.Cells(1,Target.Column).Value
'缩短源模块名称
sSourceModule=替换(sSourceModule,“模块”,“M”)
'将值放入目标单元格
Application.EnableEvents=False
shTarg.Cells(lngTargPanelRow,lngTargModuleCol)=Sh.Name&“:”&sSourcePanel&“:”&sSourceModule
其他的
EndSub:
MsgBox“在任何其他单元格中未进行任何更改”
如果结束
如果错误为0,则MsgBox“Error”&Err&“-”&Err.Description
Application.EnableEvents=True
如果结束
端接头
Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
Dim s()作为字符串
Dim shTarg As工作表
变暗LNGTARGPANELLOW尽可能长
尺寸lngTargModuleCol尽可能长
将sSourcePanel设置为字符串
将sSourceModule设置为字符串
调光范围
关于错误GoTo EndSub
如果Target.Count=1,则
'检查单元格中的新值(模糊地称为Target)是否有2个冒号
如果Len(目标)-Len(替换(目标“:”,”)=2,则
'使用单元格中由冒号分隔的元素创建数组
s()=拆分(目标“:”)
'按名称将VBA对象与特定图纸关联
设置shTarg=Me.张(s(0))
'查找目标行
集合c=shTarg.Range(“$A:$A”)。查找(s(1))
如果c为空,则转到EndSub Else lngTargPanelRow=c.行
'查找目标列
设置c=目标范围(“1:1”)。查找(替换(s(2),“M”,“模块”))
如果c为空,则转到EndSub Else lngTargModuleCol=c列
'查找源面板
sSourcePanel=Sh.Cells(Target.Row,1).Value
'查找源模块
sSourceModule=Sh.Cells(1,Target.Column).Value
'缩短源模块名称
sSourceModule=替换(sSourceModule,“模块”,“M”)
'将值放入目标单元格
Application.EnableEvents=False
shTarg.Cells(lngTargPanelRow,lngTargModuleCol)=Sh.Name&“:”&sSourcePanel&“:”&sSourceModule
其他的
EndSub:
MsgBox“在任何其他单元格中未进行任何更改”
如果结束
如果错误为0,则MsgBox“Error”&Err&“-”&Err.Description
Application.EnableEvents=True
如果结束
端接头
是否可以实现:是。没有VBA。。可能,但会非常麻烦(这可能只是因为我缺乏知识)。问题:如果您不想要基于VBA的方法,为什么要添加VBA标记?此外,为了让我们帮助您,您必须至少尝试解决您的场景。没有VBA,这是不可能的。若你们想要公式方法,你们应该知道你们的源单元格和目标单元格不会改变。在这种情况下,“目标”工作表可以接收来自所有其他工作表的引用,“源”工作表也可以是任何其他工作表。所以,如果你把一个公式写在一张纸上,它应该是固定不变的,但在你的情况下,你似乎会覆盖它,因此破坏所有的逻辑。它是可以实现的:是的。没有VBA。。可能,但会非常麻烦(这可能只是因为我缺乏知识)。问题:如果您不想要基于VBA的方法,为什么要添加VBA标记?此外,为了让我们帮助您,您必须至少尝试解决您的场景。没有VBA,这是不可能的。若你们想要公式方法,你们应该知道你们的源单元格和目标单元格不会改变。在这种情况下,“目标”工作表可以接收来自所有其他工作表的引用,“源”工作表也可以是任何其他工作表。所以,如果你把一个公式写在一张纸上,那应该是固定不变的——但在你的情况下,你似乎会覆盖它,因此破坏所有的逻辑。