Использование однозначного пользовательского ввода в качестве конца диапазона - PullRequest
0 голосов
/ 18 октября 2018

Я хочу взять однозначный ввод пользователя и использовать его для копирования количества строк, то есть userinput = n -> строк (1: n).Мне удалось скопировать диапазон, если пользователь ввел диапазон:

Set rng = Application.InputBox("mytext", Type:=8)

, но мне нужно сделать это, указав только одну цифру, как описано, так как мои коллеги не могут написать «1:» дожелаемое количество рядов.Весь мой код указан ниже.

Заранее спасибо

Private Sub CommandButton21_Click()
    Dim rng As Range
    Worksheets("Sheet2").Activate
    Set rng = Application.InputBox("mytext", Type:=8)
    If Not rng Is Nothing Then Set rng = rng.EntireRow
    rng.Copy
    Worksheets("Sheet1").Activate
    Worksheets("Sheet1").Range("A1").Rows("9").Select
    Selection.Insert Shift:=xlDown
    Range("A1").Rows("9").PasteSpecial xlPasteFormats

End Sub

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Если вы хотите получить от пользователя одну цифру, другой ответ от @udearboy сделает то, что вы намереваетесь, но если я правильно понял, и вы хотите, чтобы конечный пользователь дал вам последнюю строку для копированиятогда следующее достигнет этого для вас:

Private Sub CommandButton21_Click()
    Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets("Sheet1")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets("Sheet2")
'declare and set the worksheets you are working with
    ws2.Activate
    n = Application.InputBox("Enter the number for the last row to copy:", Type:=1)
    'get input from user
    If IsNumeric(n) Then 'check if input is numeric
        ws2.Range("1:" & n).EntireRow.Copy 'copy range
        ws1.Range("A1").Rows("9").Insert Shift:=xlDown 'insert the values
        ws1.Range("A1").Rows("9").PasteSpecial xlPasteFormats 'copy formats
        ws1.Activate
    End If
End Sub

ОБНОВЛЕНИЕ:

Я внес небольшую поправку в код, чтобы проверить, что значение, введенноеuser - целое число, которое больше 0, поэтому вы должны получить любые ошибки из-за неправильно введенных значений. Возможно, я бы также проверил, что введенное значение находится в пределах диапазона данных на листе, но я не добавил это ниже:

Private Sub CommandButton21_Click()
    Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Worksheets("Sheet1")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Worksheets("Sheet2")
'declare and set the worksheets you are working with
    ws2.Activate
    n = Application.InputBox("Enter the number for the last row to copy:", "Please enter a Number", Type:=1)
    'get input from user
    If (IsNumeric(n)) And (CDbl(n) - CInt(n) = 0) And (n > 0) Then
    'check if input is numeric and a whole number and greater than 0
            ws2.Range("1:" & n).EntireRow.Copy 'copy range
            ws1.Range("A1").Rows("9").Insert Shift:=xlDown 'insert the values
            ws1.Range("A1").Rows("9").PasteSpecial xlPasteFormats 'copy formats
            ws1.Activate
    Else
        MsgBox "Please enter a whole number greater than 0", vbCritical, "Error"
    End If
End Sub
0 голосов
/ 18 октября 2018

Это один из способов проверки ввода в поле ввода.Приведенный ниже код будет разрешать ввод только числовых значений в диапазоне от 1 до 9. Все остальное будет отображать MsgBox и Exit Sub


Option Explicit

Sub test()

Dim n As Integer

n = Application.InputBox("Enter # 1 - 9", Type:=1)

If n > 9 Then
    MsgBox "Entry Larger than 9. Please try again"
    Exit Sub
ElseIf n < 1 Then
    MsgBox "Entry less than 1. Please try again"
    Exit Sub
End If

'Your code goes here once all validatoins are complete

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