2017-10-11 67 views
3

我正在合并两个电子表格 - 公司列表和与这些公司关联的电子邮件列表的Excel宏。每当公司有多个电子邮件关联时,我需要为该电子邮件创建一个单独的行。在Excel VBA宏中创建一个新行(我在做什么错误?)

一切正常,直到我试图创建新的行,代码Rows(row).Resize(1).Insert朝向宏的末尾。一旦到达这一行,Excel会重复每行的第一列无限期(直到列XEI)。

如何修改我的代码,以便创建一个新行(在我的循环当前所在的行下)而不是一百万列?我的代码如下:

Sub Commandbutton1() 


ThisWorkbook.Sheets("company").Activate 


Sheet2.Range("A1:A10000").Select 

Selection.Copy 


ThisWorkbook.Sheets("Sheet1").Activate 


Sheet1.Range("A1:A10000").Value = Sheet2.Range("A1:A10000").Value 

Sheet1.Range("B1").Value = "First Name" 

Sheet1.Range("C1").Value = "Last Name" 

Sheet1.Range("D1").Value = "Email" 




Dim i As Integer 


i = 1 


Do While i <= 100 

Dim companyName As String 
companyName = Cells(i, 1).Value 
firstname = Cells(i, 2).Value 
lastname = Cells(i, 3).Value 

'Query contacts list 
'Find all rows containing companyName 
'Find the email in those rows 
'Add the email to row i 

Dim slot As Integer 

slot_email = 4 


Dim result As String 
Dim sheet As Worksheet 
Set sheet = ActiveWorkbook.Sheets("contact") 


Dim isFirstInstance As Integer 

isFirstInstance = 0 

Dim j As Integer 

For j = 1 To sheet.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 



    Dim k As Integer 
    For k = 1 To 39 
     Dim cellVal As String 
     cellVal = ActiveWorkbook.Worksheets("contact").Cells(j, k).Value 
      If cellVal = "" Then 
      Exit For 
     ElseIf cellVal = companyName Then 
      Debug.Print ("For company " & companyName & ", found value on row " & j & " col " & k) 
      Cells(i, 4).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 4).Value 
      Cells(i, 2).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 2).Value 
      Cells(i, 3).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 3).Value 

      isFirstInstance = isFirstInstance + 1 
       Debug.Print (isFirstInstance & " on column " & k) 

      If isFirstInstance > 1 Then 
       Debug.Print ("Found a duplicate contact!") 

       Dim row As String 
       row = i 

       Rows(row).Resize(1).Insert 

       i = i + 1 
      End If 

     End If 
    Next k 
Next j 

i = i + 1 


Loop 



End Sub 
+0

当我试图'行(SOME_CONSTANT).Resize(1).Insert',它的工作如预期(它插入行号SOME_CONSTANT一个新行),并没有插入任何列。 尝试用别的东西代替这一行(或注释掉),看看会发生什么。为什么你需要插入这些行呢? –

+0

嗨Maciej,我需要行以反映可能在同一家公司工作的另一个联系人。在这种情况下,公司名称将在下一行中复制,并使用不同的电子邮件地址。 – alpacapaca

+0

但是,您永远不会在代码中访问这些添加的行。您可以突出显示“isFirstInstance> 1”的单元格,例如通过改变它们的颜色,所以你不必插入行。 –

回答

2

我相信列(行).Resize(1).Insert是要你的单柱移动不降反升的整排的(给你,然后插入数据的新行)。我想你想使用:行(5).EntireRow.Insert例如,还可以使用Application.CutCopyMode = false,所以它不会尝试插入您以前复制的数据

+0

谢谢! CutCopyMode是我的错误的来源。现在它工作得很好! – alpacapaca

0
Sub InsertRowAtSecondLine() 
    Dim rowOfInterest As Long 
    rowOfInterest = 2 
    Cells(rowOfInterest, 1).EntireRow.Insert 
End Sub 

将改变

a 
b 
c 
d 

a 
<blank row> 
b 
c 
d