Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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作为日常计算器_Excel_Vba_Excel Formula - Fatal编程技术网

Excel作为日常计算器

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?

我正试图在Excel中创建一个简单的“每日计算器”,采用Speedcrunch和Speq等程序的风格。另见

它只是一个简单的代码,并得到了大部分的工作。在C列中,您可以输入数字或计算,B列显示结果背后的公式。例如,只需键入+10、*10、^2等,就可以在上面的单元格结果的基础上进行构建。B列基于查看C列的“FORMULATEXT”函数,如果C列以“=”开头,则显示内容,否则保持为空

我有几个问题:

  • 当我在B列中使用AutoSum时,如
    =SUM(C10:C11)
    结果将显示一个错误,如“#NAME?”
  • 当使用
    =SIN(弧度(45))
    时,当
    =SIN(45*PI()/180)
    正常工作时,我遇到了相同的错误
  • B列现在已在文档中预先指定,我已尝试按代码添加它,但单元格保持为空,请参见代码,我已对试用进行了注释
  • 请注意,C列中的输入单元格是通过
    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
    端函数
    
    你的事情太复杂了

  • 下一步不要使用常规错误恢复-它只是隐藏错误。如果您的一些代码可能出错,您可以使用OERN紧紧地围绕该代码,紧跟在错误转到上的
    并处理特定的错误情况
  • .Formula
    属性要求我们使用格式公式。您可以使用
    .FormulaLocal
    和您的本地语言,也可以在美国重写
  • 所有的
    ElseIf
    什么也不做。删除它们
  • 根本不需要格式化
  • B
    的公式可以简单地为eg
    =IFERROR(FORMULATEXT(C2)
    (在美国,我将把它留给您翻译)
  • 注意,SelectionChange事件不会阻止某人在B列上粘贴一系列值 你的代码,重构
  • 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