Расположение электронной таблицы ссылок для проверки данных Excel в сравнении со статическим списком - PullRequest
2 голосов
/ 20 марта 2012

У меня проблемы с проверкой данных Excel.На одном листе у меня есть список значений, который содержит список, который заполняет раскрывающийся список проверки, например:

A1 |1.)   New Item
A2 |2.)  Miscellaneous
A3 |3.)  Change Order
A4 |4.)  Choose the item being broken out:
A5 |          Caulk NP-1
A6 |          Safety signs
A7 |          Warning lines
A8 |          Snow fence
A9 |          Drain Lead 4 lb 30"x30" 
A10 |          Cant Strip
A11 |          Screws 1 5/8" 
A12 |          SS Sheet Metal 24 gauge
A13 |          Sheet Metal Aluminum 040 mill finish 
A14 |          Sheet Metal Aluminum .050 mill finish
A15 |          Termination Bar
A16 |          Lead Boots 2"
A17 |          Lead Boots 3" 
A18 |          Modified Bitumen Smooth APP
A19 |          TREMCO ELS Mastic
A20 |          TREMCO Polyroof SF
A21 |          TREMCO Base sheet fasteners
A22 |          TREMCO BURmastic Composite
A23 |          TREMCO PowerPly Standard
A24 |          TREMCO BURmastic SF
A25 |          TREMCO PowerPly HD Base Sheet
A26 |          TREMCO PowerPly Standard FR
A27 |          TREMCO Burmesh 6"
A28 |          TREMCO Site visits
A29 |          TREMCO Reglet Sealant
A30 |          TREMCO WB Primer
A31 |          TREMCO Ice Coating
A32 |          TREMCO Tremflash tape
A33 |          TREMCO Warranty
A34 |          1/4" x 1 1/2" drive pins
A35 |          SS Roof Nails 1 1/4"
A36 |          Freight
A37 |          Auto Fuel
A38 |          PA Direct Labor Supervisor
A39 |          PA Direct Labor Sheet Metal
A40 |          PA Direct Labor Roof Coating
A41 |          Equipment Crane 45 ton
A42 |          Equipment Crane 70 ton
A43 |          Platform Hoist R&G 400 28'
A44 |          Sqeegies 24" Notched
A45 |          Dumpsters
A46 |          Porta John
A47 |          Permit
A48 |          Subcontractor RK Hydro Vac 
A49 |          Subcontractor Roofing ICG
A50 |          Subcontractor Lightning Protection
A51 |          Misc
A52 |          Subtotal

Когда у меня есть другой лист, ссылающийся на этот список, проверка работает должным образом.Однако у меня есть макрос VBA, который в какой-то момент копирует этот другой лист в рабочую книгу для отправки по электронной почте.По этой и другим причинам мне нужно, чтобы раскрывающийся список проверки в этом столбце не зависел от другого листа, поэтому у меня есть макрос цикла по всем ячейкам, и я создаю строку проверки, которая выглядит следующим образом:

  1.)   New Item,2.)  Miscellaneous,3.)  Change Order,4.)  Choose the item being broken<br> out:,          Caulk NP-1 ,          Safety signs,         Warning lines

Как видите, это точно такой же список, но это текстовая строка, каждый выбор которой разделен запятыми.Это работает почти так, как мне нужно, но есть проблема - 10 ведущих пробелов не работают так, как они должны работать во втором сценарии.У меня они есть там, чтобы эти выделения были выделены в выпадающем списке, чтобы сделать его более интуитивным.10 ведущих пробелов находятся в фактической «формуле списка проверки», но не отображаются, когда я щелкаю раскрывающийся список или делаю выбор!

Есть идеи?

РЕДАКТИРОВАТЬ: В соответствии с запросом, вот фактический код:

Range("A1").Value = "1.)   New Item"
Range("A2").Value = "2.)  Miscellaneous"
Range("A3").Value = "3.)  Change Order"
Range("A4").Value = "4.)  Choose the item being broken out:"
Range("A5:A350").Formula = "=""          ""&INDIRECT(""'Buy Out'!B""&MATCH(""Description"",'Buy Out'!$B:$B,0)+ROW()-3)"
Application.Calculate

' build ValidationList string for later use (this will also have to happen when misc section isn't built, so this isn't the best place for it)
Range("A1").Select
ValidationList = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Do Until ActiveCell.Row = 350
    If ActiveCell.Value = "          Subtotal" Or ActiveCell.Offset(3, 0).Value = "          Subtotals" Then 'end of the loop
        Exit Do
    End If

    If ActiveCell.Value <> "" Then
        ValidationList = ValidationList & "," & vbTab & ActiveCell.Value
    End If
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Row = 349 Then 'this shouldn't ever happen
        ValidationListMessedUp = True
        'MsgBox ("There appears to be a problem creating the drop-down list for the ""Addon Category/Item to Break Out"".")
    End If
Loop


'back to buy out and populate validation as dynamic formula
Sheets("Buy Out").Select
Cells.Find(What:="Addon Category/Item to Break Out", after:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate '* EH and message? "Is this job on the most recent MBO template? It does not appear to have the words "Release #" anywhere on the Buy Out tab

With Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(TotalRow - ActiveCell.Row - 2, 0)).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:= _
        "=INDIRECT(""reference!$A$1:$A$""&IFERROR(MATCH(""          Subtotal"",reference!$A:$A,0)-1,IFERROR(MATCH(""          Grand Total"",reference!$A:$A,0)-1,MATCH(""          Subtotals"",reference!$A:$A,0)-3)))"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

Таким образом, последний раздел этого кода, который заполняет проверку косвенной формулой, это тот, которыйработает правильно.Позже в коде я заполняю «статический» список проверки, используя строку.Вот еще одна часть:

    With Range(ActiveCell.Offset(MiscStartRow - ActiveCell.Row + 1, 0), ActiveCell.Offset(TotalRow - ActiveCell.Row + 5, 0)).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=ValidationList
    .IgnoreBlank = False
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

Большое спасибо за помощь.Это действительно расстраивает.

1 Ответ

2 голосов
/ 20 марта 2012

Используйте vbTab

Например

With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="1,2,3," & vbTab & "          4,5"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

СНАПШОТ

enter image description here

Надеюсь, это то, что вы хотели?

СЛЕДУЙТЕ ЗА

Использование вышеуказанного метода имеет недостаток. Список DV не может содержать более 255 символов.

АЛЬТЕРНАТИВА

Скопируйте список в крайний левый столбец ( Столбец XFD (Excel 2007/2010) или Столбец IV (Excel 2003) ) листа, чтобы он был скрыт, а затем используйте его в DV

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