⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions.bas

📁 本人写的一个垃圾代码,主要是实现简单的打印功能
💻 BAS
字号:
Attribute VB_Name = "Functions"
'从长字符串中分出字符段
Function GetString(ByVal strInput As String, ByVal intIndex As Integer, Optional strIdentify As String = "|", Optional blnBd As Boolean = False) As String
    'Dim intC As Integer
    'Dim intH As Integer
    'Dim intk As Integer
    On Error GoTo err
    Dim nCount As Integer
    Dim nPostion As Integer
    
    nCount = 0
    nPostion = 1
    strInput = strInput & strIdentify
    Do While InStr(nPostion, strInput, strIdentify)
     nPostion = InStr(nPostion, strInput, strIdetify) + 1
     nCount = nCount + 1
    Loop
 '   If nCount < intIndex - 1 Then
  '    GoTo err
   ' End If
    
    nPostion = 1
    '从strInput中去掉intIndex前面的字符串
    For nCount = 1 To intIndex - 1 Step 1
      nPostion = InStr(strInput, strIdentify)
      strInput = Right(strInput, Len(strInput) - nPostion)
    Next
    
    GetString = Left(strInput, InStr(strInput, strIdentify) - 1)
    
    If blnBd Then
        GetString = Right(GetString, Len(GetString) - InStr(1, GetString, ":"))
    End If
    Exit Function
err:
   Select Case err.Number
    Case 5
    Case Else
        MsgBox err.Description
    End Select
End Function

Sub TextPrint(ByVal frmName As Form, Optional BlnOver As Boolean = True)
 ' Dim inti As Integer
  Dim strTemp As String
  Dim strKeyName As String
  Dim obj As Control
   
  On Error GoTo errhandle
  Printer.ScaleMode = 6

  With frmName
    For Each obj In .Controls
    If (TypeOf obj Is TextBox Or TypeOf obj Is ComboBox) And obj.Visible = True Then
         If Trim(obj <> "") Then
           strKeyName = obj.Name & obj.Index & .Name
           strTemp = GetSetting(App.EXEName, "打印坐标设置", strKeyName)
             
             Printer.FontName = IIf(GetString(strTemp, 1, ",") = "", "宋体", GetString(strTemp, 1, ","))
             Printer.FontSize = Val(IIf(GetString(strTemp, 2, ",") = "", "8", GetString(strTemp, 2, ",")))
             Printer.CurrentX = IIf(GetString(strTemp, 3, ",") = "", obj.Left \ 56.7, GetString(strTemp, 3, ","))
             Printer.CurrentY = IIf(GetString(strTemp, 4, ",") = "", obj.Top \ 56.7, GetString(strTemp, 4, ","))
            
           Printer.Print Trim(obj)
          End If
       End If
    Next
   End With
   If Not Bln Then
      Printer.EndDoc
   End If
   Exit Sub
errhandle:
   MsgBox err.Description
  Exit Sub
End Sub

Public Sub ClearFrm(ByVal frm As Form, Optional ByVal kind As String = "")
    On Error GoTo err
    Dim obj As Control
    With frm
        For Each obj In .Controls
            If kind = "" Then
        
                If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then
                    If obj.DataField <> "" Then
                        obj = ""
                    End If
                End If
            ElseIf InStr(1, UCase(obj.Name), UCase(kind)) > 0 Then
                 If TypeOf obj Is TextBox Or TypeOf obj Is ComboBox Then
                    If obj.DataField <> "" Then
                        obj = ""
                    End If
                End If
            End If
         Next
    End With
    Exit Sub
err:
    MsgBox err.Description
End Sub
'限制文本输入
Public Function TextExam(ByVal str As String, ByVal limitstr As String, Optional Bln As Boolean = True) As String
On Error GoTo errhandle
    Dim inti As Integer
    Dim strTemp As String
    For inti = 1 To Len(str)
        If Not Bln And InStr(1, limitstr, Mid(str, inti, 1)) = 0 Then
            strTemp = strTemp & Mid(str, inti, 1)
        End If
        If Bln And InStr(1, limitstr, Mid(str, inti, 1)) <> 0 Then
            strTemp = strTemp & Mid(str, inti, 1)
        End If
    Next inti
    TextExam = strTemp
errhandle:
End Function
'查询之后显示出来
Public Sub ShowDB(ByVal frm As Form, ByVal strSQL As String, Optional ByVal strKind As String = "")
'    On Error GoTo err
    
    Dim rst As ADODB.Recordset
    Dim ctl As Control
    Dim str As String
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open strSQL, myDB, adOpenForwardOnly, adLockReadOnly
    If rst.EOF Then
        'MsgBox "没有记录!", vbOKOnly + vbInformation, "提示"
        Call ClearFrm(frm, strKind)
    Else
        With frm
            For Each ctl In .Controls
              If InStr(1, UCase(ctl.Name), UCase(strKind)) > 0 Then
                If (TypeOf ctl Is TextBox) Or (TypeOf ctl Is ComboBox) Or (TypeOf ctl Is DTPicker) Then
                If ctl.DataField <> "" Then
                    str = ctl.DataField
                    If (TypeOf ctl Is TextBox) Or (TypeOf ctl Is ComboBox) Then
                        ctl = "" & rst(str)
                    End If
               
                    If TypeOf ctl Is DTPicker Then
                        If "" & rst(str) = "" Then
                            ctl = "1900-1-1"
                        Else
                            ctl = rst(str)
                        End If
                    End If
                End If
                End If
              End If
            Next
            
        End With
    End If
    rst.Close
    Set rst = Nothing
    Exit Sub
err:
    MsgBox err.Description
    
End Sub
'构造插入表SQL语句
Public Function ConstructInsertSQL(ByVal frm As Form, ByVal TableName As String, ByVal strKind As String) As String
    Dim strField As String
    Dim strValue As String
    Dim ctl As Control
    strField = ""
    strValue = ""
    With frm
        For Each ctl In .Controls
          If InStr(1, UCase(ctl.Name), UCase(strKind)) > 0 Then
            If (TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox) Then
              If (ctl.DataField <> "") Then
                strField = strField & Trim(ctl.DataField) & ","
                If ctl.Tag = "numeric" Then     '注意数值类型的值Tag=numeric
                    strValue = strValue & Val(Trim(ctl.Text)) & ","
                Else
                    strValue = strValue & "'" & Trim(ctl.Text) & "',"
                End If
              End If
            End If
           End If
        Next
    End With
    strField = Trim(strField)
    strValue = Trim(strValue)
    If InStr(Len(strField) - 1, strField, ",") > 0 Then
        strField = Left(strField, Len(strField) - 1)
    End If
    If InStr(Len(strValue) - 1, strValue, ",") > 0 Then
        strValue = Left(strValue, Len(strValue) - 1)
    End If
    ConstructInsertSQL = "insert into " & TableName & "(" & strField & ") values(" & strValue & ")"
    
End Function
Public Function ConstructUpdateSQL(ByVal frm As Form, ByVal TableName As String, ByVal strKind As String, ByVal strKey As String) As String
    Dim strSet As String
    Dim strWhere As String
    Dim ctl As Control
    strSet = ""
    strWhere = " where "
    With frm
        For Each ctl In .Controls
          If InStr(1, UCase(ctl.Name), UCase(strKind)) > 0 Then
            If (TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox) Then
              If (ctl.DataField <> "") Then
                If InStr(1, strKey, Trim(ctl.DataField), vbBinaryCompare) > 0 Then
                    strWhere = strWhere & Trim(ctl.DataField) & "='" & ctl.Text & "',"
                Else
                    If ctl.Tag = "numeric" Then
                        strSet = strSet & Trim(ctl.DataField) & "=" & Val(ctl.Text) & ","
                    Else
                         strSet = strSet & Trim(ctl.DataField) & "=" & "'" & Trim(ctl.Text) & "',"
                    End If
                End If
              End If
            End If
           End If
        Next
    End With
    strSet = Trim(strSet)
    If InStr(Len(strSet) - 1, strSet, ",") > 0 Then
        strSet = Left(strSet, Len(strSet) - 1)
    End If
    If InStr(Len(strWhere) - 1, strWhere, ",") > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 1)
    End If
    ConstructUpdateSQL = "Update " & TableName & " Set " & strSet & strWhere
End Function
'转换函数
Function Up(Dxs As String) As String
'检测为空时
If Trim(Dxs) = "" Then
    MsgBox "没有数字,不能转换!", vbOKOnly + 32
    Exit Function
End If
  Dim Sw As Integer, SzP As Integer, SzUp As Integer, TempStr As String, DXStr As String
    Sw = Len(Trim(Dxs))
    SzP = InStr(1, Trim(Dxs), ".")
If SzP = 0 Then
   Dim i As Integer
     For i = 1 To Sw
         TempStr = Right(Trim(Dxs), i)
         TempStr = Left(TempStr, 1)
         TempStr = Converts(TempStr)
         Select Case i
           Case 1
               If TempStr = "零" Then
                  TempStr = "" ' "元"
                   Else
                  TempStr = TempStr '+ "元"
               End If
           Case 2
               If TempStr = "零" Then
                  TempStr = "零"
                Else
                  TempStr = TempStr + "拾"
               End If
           Case 3
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "佰"
               End If
            Case 4
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "仟"
               End If
            Case 5
               If TempStr = "零" Then
                  TempStr = "万"
                   Else
                  TempStr = TempStr + "万"
               End If
            Case 6
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "拾"
               End If
            Case 7
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "佰"
               End If
            Case 8
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "仟"
               End If
            Case 9
               If TempStr = "零" Then
                  TempStr = "亿"
                   Else
                  TempStr = TempStr + "亿"
               End If
         End Select
    Dim TempA As String
        TempA = Left(Trim(DXStr), 1)
    If TempStr = "零" Then
      Select Case TempA
       Case "零"
            DXStr = DXStr
       Case "元"
            DXStr = DXStr
       Case "万"
            DXStr = DXStr
       Case "亿"
            DXStr = DXStr
       Case Else
            DXStr = TempStr + DXStr
      End Select
      Else
       DXStr = TempStr + DXStr
    End If
     Next
  Else
    For i = 1 To SzP - 1
         TempStr = Right(Trim(Dxs), i + (Sw - SzP + 1))
         TempStr = Left(TempStr, 1)
         TempStr = Converts(TempStr)
         Select Case i
           Case 1
               If TempStr = "零" Then
                  TempStr = "点" '"元"
                   Else
                  TempStr = TempStr + "点" ' "元"
               End If
           Case 2
               If TempStr = "零" Then
                  TempStr = "零"
                Else
                  TempStr = TempStr + "拾"
               End If
           Case 3
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "佰"
               End If
            Case 4
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "仟"
               End If
            Case 5
               If TempStr = "零" Then
                  TempStr = "万"
                   Else
                  TempStr = TempStr + "万"
               End If
            Case 6
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "拾"
               End If
            Case 7
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "佰"
               End If
            Case 8
               If TempStr = "零" Then
                  TempStr = "零"
                   Else
                  TempStr = TempStr + "仟"
               End If
            Case 9
               If TempStr = "零" Then
                  TempStr = "亿"
                   Else
                  TempStr = TempStr + "亿"
               End If
            Case Else
              '超过999999999时自动删除
              TempStr = ""
         End Select
        TempA = Left(Trim(DXStr), 1)
    If TempStr = "零" Then
      Select Case TempA
       Case "零"
            DXStr = DXStr
       Case "元"
            DXStr = DXStr
       Case "万"
            DXStr = DXStr
       Case "亿"
            DXStr = DXStr
       Case Else
            DXStr = TempStr + DXStr
      End Select
      Else
       DXStr = TempStr + DXStr
    End If
     Next
'计算小数
   Dim DxstrX As String, XStr As String
      XStr = Right(Trim(Dxs), Sw - SzP)
        For i = 1 To Sw - SzP
         TempStr = Left(XStr, i)
         TempStr = Right(TempStr, 1)
         TempStr = Converts(TempStr)
         Select Case i
           Case 1
            If TempStr = "零" Then
               TempStr = "零"
               Else
               TempStr = TempStr '+ "角"
            End If
           Case 2
            If TempStr = "零" Then
               TempStr = ""
               Else
               TempStr = TempStr '+ "分"
               End If
            Case Else
              '超过两位小数时,自动删除
              TempStr = ""
         End Select
        DxstrX = DxstrX + TempStr
     Next
     DXStr = DXStr + DxstrX
End If
    Up = DXStr
End Function

Function Converts(NumStr As String) As String
    Select Case Val(NumStr)
      Case 0
        Converts = "零"
      Case 1
        Converts = "壹"
      Case 2
        Converts = "贰"
      Case 3
        Converts = "叁"
      Case 4
        Converts = "肆"
      Case 5
        Converts = "伍"
      Case 6
         Converts = "陆"
      Case 7
         Converts = "柒"
      Case 8
         Converts = "捌"
      Case 9
         Converts = "玖"
    End Select
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -