Office中国论坛/Access中国论坛

标题: [求助]请帮忙改动Excel上使用的模块为Access使用 [打印本页]

作者: wssf    时间: 2007-6-16 06:46
标题: [求助]请帮忙改动Excel上使用的模块为Access使用
各位老大:这是在论坛上看到过的一段在Excel中 提取字符串中数据的自定义模块,

如:单元格A1=“≥0.25个百分点”      FLW(A1)=0.25

怎样改动代码使之能在Access中使用?谢谢!

Function FLW(X As Range, Y As Integer)
If Y = 1 Then
  For i = 1 To Len(X)
     If Val(Mid(X, i, 1)) > 0 Or Mid(X, i, 1) = "0" Or Mid(X, i, 1) = "." Then
        FLW = FLW & Mid(X, i, 1)
     End If
  Next i
ElseIf Y = 2 Then


  For M = 1 To Len(X)

         A = Application.WorksheetFunction.Substitute(X.Value, 0, "")
         B = Application.WorksheetFunction.Substitute(A, 1, "")
         C = Application.WorksheetFunction.Substitute(B, 2, "")
         D = Application.WorksheetFunction.Substitute(C, 3, "")
         E = Application.WorksheetFunction.Substitute(D, 4, "")
         F = Application.WorksheetFunction.Substitute(E, 5, "")
         G = Application.WorksheetFunction.Substitute(F, 6, "")
         H = Application.WorksheetFunction.Substitute(G, 7, "")
         i = Application.WorksheetFunction.Substitute(H, 8, "")
         J = Application.WorksheetFunction.Substitute(i, 9, "")
Next M
  
  
  FLW = J

End If


End Function

作者: andymark    时间: 2007-6-16 06:51
还需加一些ACCESS操控EXCEL的语句
作者: wssf    时间: 2007-6-16 07:06
谢谢版主,请版主费心给改一改,在这个论坛上没有搜索到提取数据的帖子,只搜索到提取1-9数字的帖子(见下面),“≥0.25个百分点”提取成了25。

Function MyGet(Srg As String, Optional n As Integer = False)

    Dim i As Integer
    Dim s, MyString As String
    Dim Bol As Boolean
   
    For i = 1 To Len(Srg)
        s = Mid(Srg, i, 1)
            Bol = s Like "#"
        If Bol Then MyString = MyString & s
    Next
   
    MyGet = IIf(n = 1 Or n = 2, MyString, Val(MyString))
   
End Function


[此贴子已经被作者于2007-6-15 23:09:25编辑过]


作者: andymark    时间: 2007-6-16 07:26
其实到现在我还没弄明白你的真正意图.


作者: wssf    时间: 2007-6-16 07:52
啊啊!是在寻找一个自定义函数,此函数能够将字符串中的数据提取出来:

如  字符串“>0.05小时”   提取出0.05

    字符串 “我有2.53kg苹果” 提取出:2.53

谢谢!
作者: andymark    时间: 2007-6-16 08:00
在ACCESS直接用VAL()

Val 函数



<OBJECT><ARAM><ARAM><ARAM></OBJECT>   

<OBJECT><PARAM><PARAM><PARAM></OBJECT>   

<OBJECT><PARAM><PARAM><PARAM></OBJECT>

返回包含于字符串内的数字,字符串中是一个适当类型的数值。

语法

Val(string)



必要的 string 参数可以是任何有效的字符串表达式.

说明

Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号
  1. &O
复制代码
(八进制)和
  1. &H
复制代码
(十六进制)。空白、制表符和换行符都从参数中被去掉。

下面的返回值为 1615198:
  1. [b]Val[/b]("    1615 198th Street N.E.")

复制代码

在下面的代码中,Val 为所示的十六进制数值返回十进制数值 -1。
  1. [b]Val[/b]("&HFFFF")

复制代码

注意 Val 函数只会将句点(.)当成一个可用的小数点分隔符。当使用不同的小数点分隔符时,如在国际版应用程序中,代之以 CDbl 来把字符串转换为数字。
作者: wssf    时间: 2007-6-16 14:45
谢谢版主 ,Val函数也试过,可以返回第一个出现的数据,如Val(“0.25(2个月)个百分点”) 可以返回 0.25,但该函数在数据前面有字符时它返回“0”("<0.25"返回”0“),不符合我的要求,我的希望是:

“<0.25” 返回:0.25  

“增长了0.5(1-10月)百分点”  返回:0.5

“≥1.38(25度)直至3.56”    返回 1.38

即返回第一个出现的数据,不知可否实现?谢谢!
作者: glw    时间: 2007-6-17 08:27
第二个数据与第一个数据有什么区别,第二个数据是否一定在()中,如以上成立

Private Sub Command0_Click()
Call Separate("“≥1.38(25度)直至3.56”    ", temp2)
Debug.Print temp2
End Sub
Sub Separate(MyNo As String, temp2)
                        Dim Temp1, B
                        MyRef = Trim(MyNo): Temp1 = temp2 = ""

                            For I = 1 To Len(MyRef)
                                B = Mid$(MyRef, I, 1)
                                Select Case B
'
                                    Case "0", "1" To "9", "."
                                        temp2 = temp2 & B
                                    Case "(", "("
'
                                        Exit Sub
                                        Case Else
                                       Temp1 = Temp1 & B
                                End Select
                            Next I

                        End Sub


作者: wssf    时间: 2007-6-17 21:52
谢谢glw老师,我很菜,您的代码我不会用啊,您能给我编成自定义函数吗?这样我就可以在查询中使用它把表中一列中的数据一次提取出来了,谢谢您了。
作者: glw    时间: 2007-6-18 05:29
先插

入模块,COPY如下函数

Option Compare Database

Public Function Separate(MyNo As String) As String
                        Dim Temp1, B
                        MyRef = Trim(MyNo): Temp1 = temp2 = ""

                            For I = 1 To Len(MyRef)
                                B = Mid$(MyRef, I, 1)
                                Select Case B
'
                                    Case "0", "1" To "9", "."
                                        temp2 = temp2 & B
                                        Separate = temp2
                                    Case "(", "("
'
                                        Exit Function
                                        Case Else
                                       Temp1 = Temp1 & B
                                End Select
                            Next I

                        End Function

然后再查询中调用:

表达式1:Separate([你要查询的字段])


作者: wssf    时间: 2007-6-18 06:46
谢谢glw老师,真是诲人不倦哪!谢谢!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3