VBA代码做匹配处理



Public Sub DoFilter2()
' 按照发票号码做匹配,重新生成一个明细的表格,本例子的模板是Sheet9 和 Sheet13
'Sheet9  是明细,Sheet13 是汇总的, 需要从这个两个Sheet里重新提取数据到一个新的Sheet14里


    'If Workbooks(1).Worksheets("sheet1") Is Nothing Then
       'MsgBox "sheet1不存在"
    'Else
       'MsgBox "sheet1存在"
    'End If
   
   
   ' Sheets("1").Cells.Clear
   ' Sheets3.Cells.Clear
    'Sheets4.Cells.Clear
   ' Sheets5.Cells.Clear
  
   '第一步:分别对两个sheet按照发票号码进行从小到大排序
    Sheet9.Activate
    Sheet9RowCount = Sheet9.UsedRange.Rows.Count
    Sheet9.Range("A1:U" & Sheet9RowCount).Sort Key1:=Range("D2:D" & Sheet9RowCount), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
    'Sheet5.Range("A1:O" & Sheet5RowCount).Sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
  
    Sheet13.Activate
    Sheet13RowCount = Sheet13.UsedRange.Rows.Count
    Sheet13.Range("A1:I" & Sheet13RowCount).Sort Key1:=Range("H2:H" & Sheet13RowCount), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
    'Sheet5.Range("A1:O" & Sheet5RowCount).Sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
   
   
   

   
   
  
   '第二步:Copy Sheet13到 Sheet14里
  
    For i = 1 To Sheet13RowCount
        Sheet13.Rows(i).Copy Sheet14.Rows(i)
    Next
   
   
   '第三步:循环Sheet14,按照发票号码到Sheet9里去取相关的信息
   Sheet9.Activate
   Sheet9ColumnCount = Sheet9.UsedRange.Columns.Count
   Sheet13.Activate
   Sheet13RowCount = Sheet13.UsedRange.Rows.Count
  
   Sheet14.Activate
   Sheet14RowCount = Sheet14.UsedRange.Rows.Count
  
   '如何在excel中把撇号去掉:数据-分列-文本标识符:无,确定即可。
  
   nTitleStartPos = 10   'Sheet14的开始黏贴标题列的位置
   For i = 1 To Sheet14RowCount
        If i = 1 Then
            For j = 1 To Sheet9ColumnCount
                Sheet14.Cells(i, nTitleStartPos).Value = Sheet9.Cells(i, j).Value            '把Sheet9的抬头拷贝到Sheet14里
                nTitleStartPos = nTitleStartPos + 1
            Next
        Else
            strFph = Sheet14.Cells(i, 8).Value
            nTitleStartPos = 10
            For x = 2 To Sheet9RowCount
                If strFph = Sheet9.Cells(x, 4).Value Then   '如果有匹配的的发票号码,在从Sheet9里拷贝到Sheet14里
                    For k = 1 To Sheet9ColumnCount
                        Sheet14.Cells(i, nTitleStartPos).Value = Sheet9.Cells(x, k).Value            '把Sheet9的抬头拷贝到Sheet14里
                        nTitleStartPos = nTitleStartPos + 1
                    Next
                End If
            Next
        End If
   Next
  
  
  '第四步:如果在Sheet9里而不在Sheet14里,在Sheet9highlight颜色
  '
 
  For k = 2 To Sheet9RowCount
    strSheet9Fph = Sheet9.Cells(k, 4).Value
    flag = 0
    For q = 2 To Sheet14RowCount
        If Sheet14.Cells(q, 8).Value = strSheet9Fph Then
            flag = 1
        End If
    Next
    If flag = 0 Then
        Sheet9.Rows(k).Interior.ColorIndex = 3  ' 背景的颜色为3 红色
    End If
  Next
 
 
  
   '第五步:把金额不等的highlight,如何判断多个相同的发票号来做合计呢
  'For i = 2 To Sheet14RowCount
  i = 2
  Do While (i <= Sheet14RowCount)
    j = i + 1
        Do While (1)
             If Sheet14.Cells(i, 8).Value <> Sheet14.Cells(j, 8).Value Then
                'If Sheet14.Cells(i, 6).Value <> Sheet14.Cells(i, 20).Value + Sheet14.Cells(i, 22).Value Then
                    'Sheet14.Rows(i).Interior.ColorIndex = 3  ' 背景的颜色为3 红色
                'End If
               
               
                '从i到j-1的发票号都是相等的,做求和
                myValue = 0
                For k = i To j - 1
                    myValue = myValue + Sheet14.Cells(k, 6).Value
                Next
                SourceValue = Sheet14.Cells(i, 20).Value + Sheet14.Cells(i, 22).Value
                If Val(myValue) <> Val(SourceValue) Then
                    Sheet14.Rows(i).Interior.ColorIndex = 3  ' 背景的颜色为3 红色
                End If
                Exit Do
            Else
                j = j + 1
            End If
        Loop
        i = j
  Loop
  'Next
 
 
 '第六步: 把Sheet14里的20列和22列变成明细的值,本来是合计的值
 '改成成本价格
 For q = 2 To Sheet14RowCount
    Sheet14.Cells(q, 20).Value = Sheet14.Cells(q, 6).Value / 1.17  '改成成本价格
    Sheet14.Cells(q, 22).Value = Sheet14.Cells(q, 20).Value * 0.17  '用上面的成本价乘以0.17
    Sheet14.Cells(q, 16).Value = "'" + CStr(Sheet14.Cells(q, 16).Value) '处理数据的类型,变成字符串
    Sheet14.Cells(q, 10).Value = Sheet14.Cells(q, 3).Value
    Sheet14.Cells(q, 19).Value = Replace("'" + CStr(Sheet14.Cells(q, 19).Value), "/", "-")
 Next
 
 '第七步:删除[作废]行
 For q = 2 To Sheet14RowCount
    If Sheet14.Cells(q, 9).Value = "作废" Then
        Sheet14.Rows(q).Delete
    End If
 Next
  '第八步:删除J列之前全部列

For i = 1 To 9
    Sheet14.Columns(1).Delete
Next


End Sub

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VBA账号密码登录代码需要连接数据库和设置账户和密码的输入框。在VBA中,可以使用ADODB库来连接数据库,ADODB库提供了大量的基于ADO的对象和方法,因此可以用它来构建一个可靠的连接。接着,需要设置表单上的用户名输入框和密码输入框,以便用户能够输入自己的用户名和密码。 在VBA中,可以使用InputBox函数或者使用一个UserForm来获取这些输入。如果使用InputBox函数,则需要添加一些代码来检查输入的用户名和密码是否存在于数据库中。而使用UserForm可以更好地定制登录框的样式和布局,并且可以使用Control对象来直接与表单上的输入框交互。 在以下的代码中,我们使用了ADODB库,首先连接了一个名为“myDB”的数据库,然后使用UserForm来获取用户名和密码。用输入的用户名和密码查询数据库中的User表,如果用户名和密码正确,则显示一个确认框。如果用户名和密码错误,则显示一个警告框。 ``` Private Sub LoginButton_Click() Dim con As ADODB.Connection Dim rs As ADODB.Recordset Dim strSQL As String Dim username As String Dim password As String Set con = New ADODB.Connection ' Connect to database con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=myDB.mdb" con.Open ' Get username and password from UserForm username = Me.UserNameInputBox.Value password = Me.PasswordInputBox.Value ' Build SQL query strSQL = "SELECT * FROM Users WHERE Username = '" & username & "' AND Password = '" & password & "'" ' Execute query and fetch results Set rs = con.Execute(strSQL) ' Check if username and password are correct If Not rs.EOF Then MsgBox "Login successful!" Else MsgBox "Incorrect username or password!", vbExclamation End If ' Close recordset and connection rs.Close con.Close End Sub ``` 这个代码可以很好地实现基本的账号密码登录功能,并且可以通过修改SQL语句来支持不同的数据库。 ### 回答2: VBA(Visual Basic for Applications)是一种用于编程的宏语言,可以在Microsoft Office中进行自动化和自定义操作。下面是一个示例VBA代码,用于账号密码登录。 首先,我们需要在VBA编辑器中创建一个表单,包含账号和密码的输入框,以及一个登录按钮。然后,在登录按钮的点击事件中编写以下代码: ```vba Private Sub btnLogin_Click() Dim userInput As String ' 用户输入的账号 Dim passwordInput As String ' 用户输入的密码 Dim correctUser As String ' 正确的账号 Dim correctPassword As String ' 正确的密码 userInput = txtUserInput.Value passwordInput = txtPasswordInput.Value correctUser = "admin" correctPassword = "123456" ' 检查账号和密码是否正确 If userInput = correctUser And passwordInput = correctPassword Then MsgBox "登录成功!" ' 弹出成功提示框 ' 在这里添加其他想要执行的代码 Else MsgBox "账号或密码错误!" ' 弹出错误提示框 ' 在这里添加其他想要执行的代码 End If End Sub ``` 上述代码中,我们创建了两个字符串变量`userInput`和`passwordInput`,用于存储用户在输入框中输入的账号和密码。同时,我们还创建了两个字符串变量`correctUser`和`correctPassword`,用于存储正确的账号和密码。 然后,我们将用户输入的账号和密码与正确的账号和密码进行比较。如果账号和密码匹配,则弹出登录成功的提示框;否则,弹出账号或密码错误的提示框。 你可以根据自己的需要进一步修改和优化这段代码,例如将正确的账号和密码保存在数据库中,或者添加其他的登录验证方式。希望对你有帮助! ### 回答3: VBA是一种用于Microsoft Office应用程序的编程语言,可以用于自动化执行各种任务。以下是一个简单的VBA代码示例,用于实现账号密码登录功能: 1. 首先,在VBA编辑器中打开您想要添加代码的工作簿或模块。 2. 在代码模块中创建一个名为“Login”的过程(Procedure): ``` Sub Login() Dim username As String Dim password As String ' 获取用户输入的账号和密码 username = InputBox("请输入用户名") password = InputBox("请输入密码") ' 检查账号密码是否匹配,可以根据实际需求自定义检查逻辑 If username = "admin" And password = "admin123" Then ' 登录成功 MsgBox "登录成功!" Else ' 登录失败 MsgBox "登录失败!" End If End Sub ``` 3. 保存并关闭VBA编辑器。 4. 在Excel表格中添加一个按钮或链接,或者使用快捷键Alt + F8打开宏窗口。 5. 在宏窗口中选择名为“Login”的宏,并点击运行。 6. 输入您预设的用户名和密码,点击确定。 7. 程序将会检查您输入的账号密码是否匹配,并给出相应的提示信息。 请注意,上述代码只是一个简单示例,实际使用时可能需要根据具体情况相应的修改和完善。同时,建议在实际应用中使用更安全的方法来处理账号和密码,例如使用加密算法进行存储和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值