Добавление столбца в таблицу листов Excel на основе условия if else - PullRequest
0 голосов
/ 02 марта 2020

Я использую приведенный ниже код для добавления столбца с именем «Роли».

If WorksheetFunction.CountIf(rngX, "Roles") > 0 Then
    MsgBox "Roles column Already present"
Else
     ESheet.Columns("C:C").Insert Shift:=xlToRight,CopyOrigin:=xlFormatLeftOrAbove
     ESheet.Range("C1").Value = "Roles"
     LastRow1=ESheet.Range("A", & Cells.Rows.Count).End(xlUp).Row
     ESheet.Range("C2:C", & LastRow1).Formula="VLOOKUP(B2, Roles!$A:$B,2,FALSE)"
End IF

Я пытаюсь этот код, есть лист ролей, который я использую для vlookup, и добавляю новый столбец с именем «Роли» "в новой вкладке" Заголовки ". Если столбец уже существует, он показывает msgbox, но изменяет значения Vlookup - vlookup(B2, #Ref!$A:$B,2,FALSE)

В основном я хочу удалить эту ошибку vlookup, чтобы она продолжала ссылаться на вкладку Роли

Ответы [ 3 ]

1 голос
/ 02 марта 2020

Попробуйте этот код, пожалуйста:

Sub ConditInsertColumn()
  Dim ESheet As Worksheet, lastCol As Long, rngRol As Range
  'Set ESheet = ActiveSheet 'use here your definition or skip it
  lastCol = ESheet.Cells(1, Cells.Columns.Count).End(xlToRight).column
   Set rngRol = ESheet.Range(ESheet.Cells(1, 1), ESheet.Cells(1, lastCol)).Find("Roles")
    If rngRol Is Nothing Then
        ESheet.Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatLeftOrAbove
        ESheet.Range("C1").value = "Roles"
    End If
End Sub
1 голос
/ 02 марта 2020

Просто посчитайте, если у вас есть заголовок в строке 1 со значением Roles. Если счетчик равен 0, добавьте столбец, иначе он означает, что столбец уже существует, поэтому ничего не делайте

If Application.WorksheetFunction.CountIf(ESheet.Rows("1:1"), "Roles") = 0 Then
    ESheet.Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatLeftOrAbove
    ESheet.Range("C1").Value = "Roles"
End If
1 голос
/ 02 марта 2020

Этот код должен выполнять работу.

Const Cap As String = "Roles"
Const Clm As Long = 3

With ESheet.Columns(Clm)
    If .Cells(1).Value <> Cap Then
        .Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Cells(1).Offset(0, -1).Value = Cap
    End If
End With

Он проверит, если заголовок столбцов (Clm) - где 3 = "C" - равен Cap (здесь "Роли") , Если это не пустой столбец будет вставлен и получит это имя.

Я принял к сведению, что вы обращаетесь к рабочему листу по CodeName. Мало кто здесь делает, хотя это эффективно и обычно предпочтительнее. Если вы сделали это случайно или из-за ошибки, обратите внимание на чередование, Worksheets("ESheet"), которое обращается к тому же листу по имени вкладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...