2016-07-26 2 views
1

Я работаю над программой, в которой пользователь будет предоставлять информацию о длине стены в ячейке D3 и E3 из приглашения InputBox.Excel VBA InputBox и MsgBox Output

Public Sub dimensionInput() 

Dim wallWidth As Double 'Get Wall Width Input 
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallWidth = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth 
End If 

Dim wallLen As Variant 'Get Wall Length Input 
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallLen = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth 
End If 

End Sub 

Как только это будет сделано, появятся подсказки радиуса, длины, ориентации и смещения. Значения будут вводиться с запятой и пробелом, например. N1, N2, N3, ... Мне сложно записывать макрос VBA для разделения входов на основе запятой, а затем вводить в ячейки. Все записи должны находиться в соответствующем столбце. E.G.

Rad: 40, 30, 26, 23, 24, 20 < --- Ввод пользователем

Len: 60, 40, 96, 82, 72, 48 --- < ввода пользователем

Востока: Н, Н, V, V, V, V, Н < --- Ввод пользователем

смещение: 2, 2, 4, 1, 2, 1 < --- Ввод пользователем

Затем, согласно этому VBA, он заполнит ячейки, как показано ниже.

Любая помощь очень ценится!

Image of the problem

+0

Если вы хотите, чтобы пользователь вводил несколько значений, либо они были введены в определенные ячейки [named] на листе, либо сделали для него выделенный «UserForm». Попадание нескольких полей ввода становится раздражающим. –

ответ

1

Симметричных разделить вход вы можете использовать функцию Split()

Split (text_string, разделитель, предел, сравнение)

Например:

Dim xarray() As String 
Dim RAD As Variant 'Get Rad Input 
RAD = Application.InputBox("Input Desired RAD", "RAD", 1) 
xarray() = Split(RAD, ",") 
For i = LBound(xarray) To UBound(xarray) 
    Cells(6, i + 1).Value = xarray(i) 
Next i 

Это будет вставить значение в 6-й строке, начиная с 1-го столбца. Если вы хотите, чтобы начать с 3-го столбца, а затем

Cells(6, i + 3).Value = xarray(i) 
1

почему не у попробовать это:
-Создание один ДОПОЛНИТЕЛЬНОЕ лист с именем "Лист2"
-Edit ур код с этим:

Public Sub dimensionInput() 

Dim wallWidth As Double 'Get Wall Width Input 
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallWidth = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth 
End If 

Dim wallLen As Variant 'Get Wall Length Input 
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallLen = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth 
End If 

Dim RAD As Variant 'Get Rad Input 
RAD = Application.InputBox("Input Desired RAD", "RAD", 1) 
If RAD = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet2").Range("A1").Value = RAD 
End If 

Dim LENN As Variant 'Get Len Input 
LENN = Application.InputBox("Input Desired LENN", "LEN", 1) 
If LENN = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet2").Range("A2").Value = LENN 
End If 

Dim Orient As Variant 'Get Wall Length Input 
Orient = Application.InputBox("Input Desired Orient", "Orient", 1) 
If Orient = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet2").Range("A3").Value = Orient 
End If 

Dim Offset As Variant 'Get Wall Length Input 
Offset = Application.InputBox("Input Desired Offset", "Offset", 1) 
If Offset = False Then 
    Exit Sub 
Else 
Application.Worksheets("Sheet2").Range("A4").Value = Offset 
End If 

Application.Worksheets("Sheet2").Select 
Columns("A:A").Select 
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Comma:=True, Space:=True 


End Sub 

-Сделать справка с ур оригинала лист для ур нового вспомогательного листа!

уверен, что u может улучшить код для создания одного вспомогательного листа каждый раз, выполнять задачи, переносить значения на оригинал оригинала и удалять этот вспомогательный лист.

0

UserInput функция склонная ко многим входным и чтению ошибок, так что это должно сопровождаться довольно надежной обработкой входной рутинного

но для начала головы вы можете использовать метод TextToColumns() из Range объекта попробовать и заботиться о некоторых преобразованиях, наряду с Replace() функции для устранения пробелов:

Option Explicit 

Public Sub dimensionInput() 
    With Worksheets("InputSheet1") 
     GetUserInput .Range("D3"), "Input Desired Secondary Containment Wall Length in Inches", "Wall Width", 1 
     GetUserInput .Range("E3"), "Input Desired Secondary Containment Wall Length in Inches", "Wall Length", 1 
     GetUserInput .Range("C6"), "Input Desired radii for all tanks in Inches", "Tanks radius", 1 
     GetUserInput .Range("C7"), "Input Desired lengths for all tanks in Inches", "Tanks lenghts", 1 
     GetUserInput .Range("C9"), "Input Desired orientations for all tanks [H/V]", "Tanks orientations", "H" 
     GetUserInput .Range("C10"), "Input Desired offsets for all tanks", "Tanks offsets", 1 
    End With 
End Sub 

Sub GetUserInput(rng As Range, prompt As String, title As String, defVal As Variant) 
    With rng 
     .Value = Replace(CStr(Application.InputBox(prompt, title, defVal)), " ", "", vbTextCompare) 
     If InStr(.Value, ",") > 0 Then .TextToColumns DataType:=xlDelimited, Comma:=True 
    End With 
End Sub 

но вы будете иметь проблемы с пользовательскими входами, являясь «входным пользователем» самых ублюдков и изобретательских видов в галактике.

Смежные вопросы