Excel作为日常计算器
我正试图在Excel中创建一个简单的“每日计算器”,采用Speedcrunch和Speq等程序的风格。另见 它只是一个简单的代码,并得到了大部分的工作。在C列中,您可以输入数字或计算,B列显示结果背后的公式。例如,只需键入+10、*10、^2等,就可以在上面的单元格结果的基础上进行构建。B列基于查看C列的“FORMULATEXT”函数,如果C列以“=”开头,则显示内容,否则保持为空 我有几个问题:Excel作为日常计算器,excel,vba,excel-formula,Excel,Vba,Excel Formula,我正试图在Excel中创建一个简单的“每日计算器”,采用Speedcrunch和Speq等程序的风格。另见 它只是一个简单的代码,并得到了大部分的工作。在C列中,您可以输入数字或计算,B列显示结果背后的公式。例如,只需键入+10、*10、^2等,就可以在上面的单元格结果的基础上进行构建。B列基于查看C列的“FORMULATEXT”函数,如果C列以“=”开头,则显示内容,否则保持为空 我有几个问题: 当我在B列中使用AutoSum时,如=SUM(C10:C11)结果将显示一个错误,如“#NAME?
=SUM(C10:C11)
结果将显示一个错误,如“#NAME?”=SIN(弧度(45))
时,当=SIN(45*PI()/180)
正常工作时,我遇到了相同的错误NumberFormat=“@”
强制输入文本的,我找不到另一种解决方案将单元格中的输入捕获为“正常”字符,并在使用“/”号或不识别“+”号时避免获取基准
有什么建议吗
Private子工作表\u selection更改(ByVal目标作为范围)
'强制输入列单元格为文本,以确保文本值存在
如果不相交(目标,范围(“C1:C1000”))则为零
'Target.NumberFormat=“0.蓝]0.[品红]
Target.NumberFormat=“@”
如果结束
'防止更改'公式'单元格
如果ActiveCell.Column=2且ActiveCell.Row>1,则ActiveCell.Offset(columnoffset:=1)。选择
端接头
私有子工作表_更改(ByVal目标作为范围)
'如果更改或删除了多个单元格,则不执行任何操作
如果Target.Cells.Count>1或IsEmpty(目标),则退出Sub
如果不相交(目标,范围(“C1:C1000”))则为零
'停止任何运行时错误
出错时继续下一步
'关闭事件,以便更改不会引发无休止的循环
Application.EnableEvents=False
'设置数字格式
Target.NumberFormat=“0.”
'Target.NumberFormat=“0.蓝]0.[品红]
如果Left(Target.Value,2)=“--”则“Typ”--”具有负值
Target.Formula=Replace(Target.Formula,“-”,“-”)
左ElseIf(Target.Value,1)=“+”或_
左(Target.Value,1)=“-”或_
左(Target.Value,1)=“*”或_
左(Target.Value,1)=“/”或_
左(Target.Value,1)=“^”然后
Target.Formula=Chr(61)和Target.Offset(行偏移量=1,列偏移量=0)。地址和Target.Formula
'删除$符号以使公式非相对
Target.Formula=Replace(Target.Formula,“$”,“”)
ElseIf Left(Target.Value,4)=“=SOM”然后
Target.Formula=Target.Formula
ElseIf Left(Target.Value,1)=Chr(61),然后
Target.Formula=Target.Formula
ElseIf IsAlpha(Target.Value)然后
Target.Formula=Target.Formula
ElseIf为数字(Target.Value),则
Target.Formula=Target.Formula
ElseIf Left(Target.Value,1)Chr(61)然后
Target.Formula=Chr(61)&Target.Formula
如果结束
'尝试填写B列中的单元格,该单元格现在已在文档中预先指定
'将值设置为字符串
'Value=“ALS(OF(ISGETAL(VIN.SPEC(“=”;FORMULETEKST(&Target.Address&”;1));FORMULETEKST(&Target.Address&”))”
'Value=Replace(值,“$”,“”)
'MsgBox值
'Target.Offset(行偏移量=0,列偏移量=2)。公式=Chr(61)&值
'将数字格式重置为文本
Target.NumberFormat=“@”
"开启事件",
Application.EnableEvents=True
'再次允许运行时错误
错误转到0
如果结束
端接头
函数IsAlpha作为布尔值
IsAlpha=Len(s)而不是像“*[!a-z a-z]*”那样的s
端函数
你的事情太复杂了
?
并处理特定的错误情况.Formula
属性要求我们使用格式公式。您可以使用.FormulaLocal
和您的本地语言,也可以在美国重写ElseIf
什么也不做。删除它们B
的公式可以简单地为eg=IFERROR(FORMULATEXT(C2)
(在美国,我将把它留给您翻译)Private子工作表\u selection更改(ByVal目标作为范围)
'防止更改'公式'单元格
'还处理包括列B的多个单元格选择
变暗rng As范围
设置rng=Intersect(目标,Me.Range(“B:B”))
如果不是,那么rng什么都不是
rng.偏移量(,1)。选择
如果结束
端接头
私有子工作表_更改(ByVal目标作为范围)
Dim FormulaString作为字符串
'如果更改或删除了多个单元格,则不执行任何操作
'如果更改的单元格位于第1行,也将退出
如果Target.Cells.Count>1或IsEmpty(Target)或Target.Row=1,则退出Sub
关于错误转到EH
如果不相交(目标,Me.Range(“C:C”))则为零
'关闭事件,这样更改就不会引发无休止的l