【问题标题】:VBA make if cell contains word insensitive如果单元格包含不敏感的单词,VBA会生成
【发布时间】:2020-09-04 21:01:05
【问题描述】:

我对此比较陌生,但我能够编写我的第一个代码,它实际上完成了一些有用的事情。该代码的目的是打开一个电子表格,从名称给定的行中提取值并将其复制到主电子表格等中。

不幸的是,当单元格中的间距发生变化时,代码并不是特别健壮。有没有办法将此“总运营费用”更改为如下所示:“*总运营费用*”,目的是间距不重要,只有单元格中的单词重要

        If Cells(i, 1).Value = "      Total Operating Expenses" Then
        Range("B" & i, "M" & i).Copy
        TargetWb.Sheets("T-12 Drop").Range("E" & 9 + (k - 1) * 9).PasteSpecial Paste:=xlPasteValues 

整个代码如下:


Sub ImportData()

    Dim filePath As String
    Dim SourceWb As Workbook
    Dim TargetWb As Workbook
    Dim Cell As Range
    Dim i As Integer
    Dim k As Integer
    Dim Lastrow As Long
    Dim Lastrow2 As Long
    
    'SourceWb - Workbook were data is copied from
    'TargetWb - Workbook were data is copied to and links are stored
    
Application.ScreenUpdating = False
    
    Set TargetWb = Application.Workbooks("APC Refi Tracker.xlsm")
    Lastrow = Range("E100").End(xlUp).Row - 6

    
    For k = 1 To Lastrow
    
        filePath = TargetWb.Sheets("Import").Range("E" & 6 + k).Value
        Set SourceWb = Workbooks.Open(filePath)
        
        On Error Resume Next
        
    Lastrow2 = Range("A500").End(xlUp).Row - 2
    
        For i = 1 To Lastrow2
        
        If Cells(i, 1).Value = "          Total Rental Income" Then
        Range("B" & i, "M" & i).Copy
        TargetWb.Sheets("T-12 Drop").Range("E" & 4 + (k - 1) * 9).PasteSpecial Paste:=xlPasteValues
    
            End If
            
        If Cells(i, 1).Value = "        Total Other Income" Then
        Range("B" & i, "M" & i).Copy
        TargetWb.Sheets("T-12 Drop").Range("E" & 5 + (k - 1) * 9).PasteSpecial Paste:=xlPasteValues
        
           End If

        If Cells(i, 1).Value = "      Total Operating Expenses" Then
        Range("B" & i, "M" & i).Copy
        TargetWb.Sheets("T-12 Drop").Range("E" & 9 + (k - 1) * 9).PasteSpecial Paste:=xlPasteValues
        
           End If
              
        Next
    SourceWb.Close
        Next

 
Application.ScreenUpdating = True

Worksheets("Import").Activate

    MsgBox "All done!"

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以在单元格的值上使用Application.Trim(这只是WorksheetFunction.Trim 的最新版本):

    If Application.Trim(Cells(i, 1).Value) = "Total Rental Income" Then
    

    对于其他提取值也是如此。


    旁注:

    • On Error Resume Next 只是隐藏了潜在的错误。最佳做法是避免使用它。
    • Application.TrimTrimTrim$ 的行为略有不同。 Application.Trim 将删除单词之间的空格,而 TrimTrim$ 将仅删除整个字符串上的前导或尾随空格。是否使用其中一种取决于偏好和您的数据。
    Debug.Print Application.Trim("  Total   Rental   Income ") '<~ returns "Total Rental Income"
    Debug.Print Trim$("  Total   Rental   Income ")    '<~ returns "Total   Rental   Income"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多