程序中如何实现读取ini文件中的公式,然后进行计算!例如
A=A+1我把A+1存储到ini文件中!
然后程序执行时到INI文件中读取公式然后按公式进行计算!

解决方案 »

  1.   

    '复制以下脚本到Form1中,添加一个Command1 按钮
    '执行前,请确保INI文件为"公式文件"(全路径),Section为"公式Section",Key为: "公式Key"
    '即类似:
    '[公式Section]
    '公式Key=A=A+1Option Explicit
    Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Public Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
        ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
    End Function'This function is used to get a key value
    Private Function GetItemString(ByVal sectionname As String, ByVal KeyName As String, ByVal strIniFile As String) As String
        Dim IniString As String
        Dim retval, Status, nullpos As Integer
        IniString = String(255, " ")
        retval = GetPrivateProfileString(sectionname, KeyName, "Not Used", IniString, Len(IniString), strIniFile)
        IniString = Trim(IniString)
        'delete the null char at the end of string
        nullpos = InStr(IniString, Chr$(0))
        If nullpos > 0 Then IniString = Left$(IniString, nullpos - 1)
        If retval And Left(IniString, 8) <> "Not Used" Then
           GetItemString = IniString
        End If
    End Function
    Private Sub Command1_Click()
        Dim strFormula As String
        'Get formula from Ini file
        strFormula = GetItemString("公式Section", "公式Key", "公式文件")
        ExecuteLine "Dim A As Long"  '定义变量
        ExecuteLine strFormula  '执行公式,比如A=A+1等
    End Sub
      

  2.   

    当然,执行脚本除了使用VBA.dll中的EbExecuteLine 外,你还可使用Microsoft Script Control(msscript.ocx)控件来处理,效果是相同的。
      

  3.   

    这个是公式好像不可以啊!
    公式是这样的:
    stra=123
    stra1=456reg=Hex(Int((stra * 100 - 64) / 2 + 4 / 2 + 5)) & "-" & Hex(Int((stra1 * 100 - 64) / 3 + 4 / 2 + 1))请赐教!
      

  4.   

    Hex返回的是字符串,如17ED,两个字符串如何相减,表达式显然有误!
      

  5.   

    字符前面添加&H,才能进行减运算. 代码如下:ExecuteLine "Dim stra As Long"
    ExecuteLine "Dim stra1 As Long"
    ExecuteLine "Dim reg As String"
    ExecuteLine "Dim reg1 As String"
    ExecuteLine "Dim reg2 As String"ExecuteLine "stra = 123"
    ExecuteLine "stra1 = 456"
    ExecuteLine "reg1 =  Hex(Int((stra * 100 - 64) / 2 + 4 / 2 + 5))"
    ExecuteLine "reg1 = ""&H"" & reg1"
    ExecuteLine "reg2 = Hex (Int((stra1 * 100 - 64) / 3 + 4 / 2 + 1))"
    ExecuteLine "reg2 = ""&H"" & reg2"
    ExecuteLine "reg = reg1 - reg2"
    ExecuteLine "Debug.Print reg"
      

  6.   

    喔,早说啊 看下面的:ExecuteLine "Dim stra As Long"
    ExecuteLine "Dim stra1 As Long"
    ExecuteLine "Dim reg As String"
    ExecuteLine "Dim reg1 As String"
    ExecuteLine "Dim reg2 As String"ExecuteLine "stra = 123"
    ExecuteLine "stra1 = 456"
    ExecuteLine "reg1 =  Hex(Int((stra * 100 - 64) / 2 + 4 / 2 + 5))"
    'ExecuteLine "reg1 = ""&H"" & reg1"
    ExecuteLine "reg2 = Hex (Int((stra1 * 100 - 64) / 3 + 4 / 2 + 1))"
    'ExecuteLine "reg2 = ""&H"" & reg2"
    ExecuteLine "reg = reg1 & ""-"" & reg2"
    ExecuteLine "Debug.Print reg"
      

  7.   

    或者是更简单一点,不用reg1,reg2了,在你那-两边再添一对"":
    reg = Hex(Int((stra * 100 - 64) / 2 + 4 / 2 + 5)) & "" - "" & Hex(Int((stra1 * 100 - 64) / 3 + 4 / 2 + 1))即:
    ExecuteLine "reg = Hex(Int((stra * 100 - 64) / 2 + 4 / 2 + 5)) & "" - "" & Hex(Int((stra1 * 100 - 64) / 3 + 4 / 2 + 1))"