+ Reply to Thread
Results 1 to 3 of 3

Inserting a Column - Sometimes Works, Sometimes Not

Hybrid View

  1. #1
    Registered User
    Join Date
    07-09-2008
    Location
    Panama City, FL
    MS-Off Ver
    2007
    Posts
    42

    Inserting a Column - Sometimes Works, Sometimes Not

    I have had every part of this project working at some point, but for some reason Excel seems to decide every so often that it wants a different syntax for inserting a column. Initially, I used this:

    targetCell.Select
    MsgBox "Target Cell Selected", 0, "Got here"
    Selection.EntireColumn.Insert
    MsgBox "Column Inserted", 0, "Got here"
    That worked great for a little while, then after working on some other parts of code, it changed its mind and for some reason decided not to like that syntax. It would select the correct cell, but wouldn't do the column insertion. In desperation, I tried a little re-ordering.

    targetCell.EntireColumn.Select
    MsgBox "Target Cell Selected", 0, "Got here"
    Selection.Insert
    MsgBox "Column Inserted", 0, "Got here"
    This inexplicably worked, but I wasn't asking any questions. I kept working, and now it doesn't like either form, nor will it take

    targetCell.EntireColumn.Insert
    For context, let me explain the whole project. There's a sheet "instruments" that contains four columns: the vendor part number, the internal part number, the vendor name, and the row in the sheet "Sheet1" where the internal part number appears. There's a sheet "pivot" that comtains a column for each vendor and records the maximum number of vendor part numbers that correspond to one internal part number. Finally, there's a sheet "Sheet1" that has all the vendors as column headers and the internal part numbers in the leftmost column.

    What I have to do is fill in Sheet1 - for every vendor-internal part number combination, put the vendor part number in the appropriate cell. In some cases there are duplicates, and in this case, we want to create an additional column for it. For instance,

    ----------- | VendorName
    Internal P/N | ABC123, DEF456

    Becomes

    ----------- | VendorName | VendorName2
    Internal P/N | ABC123---- | DEF456

    Here is all the code in its current form together:

    Sub buildTable()
        Dim instrumentsSheet As Worksheet
        Dim sheet1Sheet As Worksheet
        Dim pivotSheet As Worksheet
        Dim targetCell As Range
        
        Application.ScreenUpdating = False
        Set instrumentsSheet = ThisWorkbook.Sheets("instruments")
        Set sheet1Sheet = ThisWorkbook.Sheets("Sheet1")
        Set pivotSheet = ThisWorkbook.Sheets("pivot")
        On Error GoTo what
        
        'Delete the existing data in all columns so that the macro can be run without
        '   creating extra columns accidentally
        sheet1Sheet.Range("B1:IV8155").Select
        Selection.Value = ""
        
        'Replace vendor headers
        Set targetCell = sheet1Sheet.Cells(1, 2)
        pivotSheet.Range("B1:CX1").Copy Destination:=targetCell
        
        'Go through and create all needed columns for every vendor (2 through 102)
        For i = 2 To 102
        
            'Parse through the maximum number of multiple entries for each vendor
            Vendor = pivotSheet.Cells(1, i).Value
            VendorMax = pivotSheet.Cells(2, i).Value
            
            'Create that number of columns for the vendor
            If (VendorMax > 1) Then
                For j = 1 To (VendorMax - 1)
            
                    'Select the first row in that column
                    VendorCol = Application.Match(Vendor, sheet1Sheet.Range("A1:IV1"))
                    Set targetCell = sheet1Sheet.Cells(1, VendorCol + j)
                
                    'Insert the column
                    targetCell.EntireColumn.Insert
                    MsgBox "Column selected", 0, "Got here"
                    'Selection.Insert
                    MsgBox "Column inserted", 0, "Got here"
                    
                    'Title the column
                    Set targetCell = sheet1Sheet.Cells(1, VendorCol + j)
                    targetCell.Value = Vendor & (j + 1)
                
                Next j
            End If
        Next i
        
        'Go through the vendor item numbers (2 to 38346)
        For i = 2 To 38346
        
            'Get the row that the internal part number is in
            PartRow = instrumentsSheet.Cells(i, 4).Value
            MsgBox PartRow, 0, "PartRow"
            
            'For each vendor item number, make sure that an internal part number exists
            If WorksheetFunction.IsNA(PartRow) = False Then
                
                'Set the target cell as the leftmost cell for the vendor in the internal part
                '   number row
                Vendor = instrumentsSheet.Cells(i, 3).Value
                'MsgBox Vendor, 0, "Vendor"
                VendorCol = Application.Match(Vendor, sheet1Sheet.Range("A1:IV1"))
                'MsgBox VendorCol, 0, "VendorCol"
                Set targetCell = sheet1Sheet.Cells(PartRow, VendorCol)
                
                'While the target cell has something in it, move the target cell one to the right
                Do While ((Len(targetCell.Value) = 0) = False)
                    VendorCol = VendorCol + 1
                    Set targetCell = sheet1Sheet.Cells(PartRow, VendorCol)
                Loop
                
                'Put the vendor part number in the target cell
                targetCell.Value = instrumentsSheet.Cells(i, 1).Value
                
            End If
            If i Mod 100 = 0 Then Debug.Print i
    
        Next i
    
        Application.ScreenUpdating = True
    what:
        Debug.Print i
        
    End Sub
    I tried to comment it well enough that it would be obvious what each part is trying to do. If anyone has any ideas as to what the deuce is going on here, I would really appreciate some help. I just learned to program Excel macros yesterday, and this problem is really confusing the heck out of me.

  2. #2
    Registered User
    Join Date
    07-09-2008
    Location
    Panama City, FL
    MS-Off Ver
    2007
    Posts
    42
    Alright, apparently it's some odd formatting error that was caused by my clearing all of the cells in the first portion by setting their value to empty string. By using the Delete method instead, it works as desired.

  3. #3
    Forum Expert shg's Avatar
    Join Date
    06-20-2007
    Location
    The Great State of Texas
    MS-Off Ver
    2010, 2019
    Posts
    40,689
    Next you need to learn to debug. Did you know you can set breakpoints, monitor variables in the Watch window, single step through code, ...?

    Much easier than all those MsgBox statements.

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1