Excel中的VBA代码与非常简单的代码不一致

时间:2018-06-27 05:32:34

标签: excel vba

我写了一些非常简单的VBA(excel宏)代码来管理我的音频许可excel体验。该代码应该在第3列的excel工作表中查找,在其列中查找任何包含“ AMC”的代码,然后将行复制并粘贴到工作表2中,然后继续搜索整个excel文档。该代码非常简单,在停止正确运行之前就可以运行一次。它只采用最后一个AMC值,并将其放在工作表2上,而不是将其他5行的AMC放在其第3列值中。

请帮助!我会非常感激:)

-杰里米

VBA代码:

  StaticJsonBuffer<300> JSONbuffer;   //Declaring static JSON buffer
  JsonObject& JSONencoder = JSONbuffer.createObject();

  JSONencoder["val"] = data;
  char JSONmessageBuffer[300];
  JSONencoder.prettyPrintTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));


  HTTPClient http;    //Declare object of class HTTPClient

  http.begin(SERVER_IP);      //Specify request destination
  http.addHeader("Content-Type", "application/json");  //Specify content-type header

  int httpCode = http.POST(JSONmessageBuffer);   //Send the request
  String payload = http.getString();

  http.end(); 
  delay(1000);

2 个答案:

答案 0 :(得分:1)

您可以使用InstrUnion

  1. Union非常有效,因为您将所有符合条件的范围存储在内存中,然后仅将一次写出到工作表中。与连续写出工作表相比,操作成本要低得多。
  2. Instr允许您使用vbBinaryCompare,这意味着您要进行区分大小写的匹配,即仅匹配AC而不匹配ac
  3. 下面的代码避免使用.Activate,这也是不需要的昂贵操作。
  4. UsedRange意味着您可能循环了比所需更多的行。您只想循环到工作表1列C的最后一个填充行,因为这是您要测试的列。因此,我使用.Cells(.Rows.Count, C").End(xlUp).Row找到最后一行。
  5. 使用Option Explicit-研究原因!它将使您的VBA生活变得更加美好。

代码:

Option Explicit    
Sub CommandButton1_Click()

    Dim lastRow As Long, sSht As Worksheet, tSht As Worksheet, loopRange As Range
    Set sSht = ThisWorkbook.Worksheets("Sheet1")
    Set tSht = ThisWorkbook.Worksheets("Sheet2")

    With sSht
        Set loopRange = .Range("C2:C" & .Cells(.Rows.Count, C").End(xlUp).Row)
    End With

    Dim rng As Range, unionRng As Range
    For Each rng In loopRange
        If InStr(1, rng.Value, "AC", vbBinaryCompare) > 0 Then
            If Not unionRng Is Nothing Then
                Set unionRng = Union(unionRng, rng)
            Else
                Set unionRng = rng
            End If
        End If
    Next rng
    If Not unionRng Is Nothing Then unionRng.EntireRow.Copy tSht.Cells(1, 1)    
End Sub

答案 1 :(得分:0)

这应该可以解决您的问题:

  If Worksheets("Sheet1").Cells(i, 3).Value = "AMC" Then    
        Worksheets("Sheet1").Rows(i).Copy  
        Worksheets("Sheet2").Activate   
        Worksheets("Sheet2").Cells(b + 1, 1).Select    
        b = b + 1    
        ActiveSheet.Paste   
        Worksheets("Sheet1").Activate        
  End If