Как правильно пользоваться If..Then? - PullRequest
0 голосов
/ 23 сентября 2019

Я самая новая девушка, использующая VBA для Excel, поэтому я провел много исследований, но, поскольку это не моя область знаний, я почти уверен, что что-то упустил.Я использовал UserForm для выбора 5 различных столбцов данных, если вы выбираете вариант 1, вы получаете данные из столбца «x», если вы выбираете вариант 2, вы получаете данные из столбца «y» и так далее.Эти данные должны быть скопированы и вставлены из одного листа в другой, но я не могу заставить его работать.
Можете ли вы сказать мне, что я делаю неправильно?

О да!В качестве фона, это не мое.Книга была отправлена ​​мне, и я должен отредактировать ее в соответствии с потребностями моего рабочего места.

Это мой код.

Private Sub UserForm_Click()
    If UserForm6.OptionButton1.Value = True Then
        Sheets("Operations").Select
        Range("B7:M33").Select
        Selection.ClearContents
        Sheets("Processes").Select
        Range("D2:D33").Select
        Selection.Copy
        Sheets("Operations").Select
        Range("B7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    ElseIf UserForm6.OptionButton2.Value = True Then

        Sheets("Operations").Select
        Range("B7:M33").Select
        Selection.ClearContents
        Sheets("Processes").Select
        Range("I2:I33").Select
        Selection.Copy
        Sheets("Operations").Select
        Range("B7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    ElseIf UserForm6.OptionButton3.Value = True Then

        Sheets("Operations").Select
        Range("B7:M33").Select
        Selection.ClearContents
        Sheets("Processes").Select
        Range("N2:N33").Select
        Selection.Copy
        Sheets("Operations").Select
        Range("B7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    ElseIf UserForm6.OptionButton4.Value = True Then

        Sheets("Operations").Select
        Range("B7:M33").Select
        Selection.ClearContents
        Sheets("Processes").Select
        Range("S2:S33").Select
        Selection.Copy
        Sheets("Operations").Select
        Range("B7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    ElseIf UserForm6.OptionButton5.Value = True Then

        Sheets("Operations").Select
        Range("B7:M33").Select
        Selection.ClearContents
        Sheets("Processes").Select
        Range("X2:X33").Select
        Selection.Copy
        Sheets("Operations").Select
        Range("B7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    End If
End Sub

Буду рад любой помощи, которую вы можете оказать!И, между прочим, английский не является моим родным языком, поэтому я надеюсь, что вы понимаете большинство из того, что я спрашиваю.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Мы можем избежать буфера обмена, устанавливая значения напрямую, и используя объект диапазона, мы можем немного переписать и избежать дублирования кода:

Private Sub UserForm_Click()
    Dim rng As Range

    With Worksheets("Processes")
        Select Case True
            Case Me.OptionButton1.Value
                Set rng = .Range("D2:D33")
            Case Me.OptionButton2.Value
                Set rng = .Range("I2:M33")
            Case Me.OptionButton3.Value
                Set rng = .Range("N2:N33")
            Case Me.OptionButton4.Value
                Set rng = Range("S2:S33")
            Case Me.OptionButton5.Value
                Set rng = .Range("X2:X33")
        End Select
    End With
    With Worksheets("Operations")
        .Range("B7:M33").ClearContents
        .Range("B7").Resize(rng.Rows.Count).Value = rng.Value
    End With
End Sub
1 голос
/ 23 сентября 2019

Ваш код без Select будет более читабельным, а также улучшит производительность:

Private Sub UserForm_Click()
    If Me.OptionButton1.Value = True Then
        Sheets("Operations").Range("B7:M33").ClearContents
        Sheets("Processes").Range("D2:D33").Copy
        Sheets("Operations").Range("B7").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks:=False, Transpose:=False

    ElseIf Me.OptionButton2.Value = True Then

        Sheets("Operations").Range("B7:M33").ClearContents
        Sheets("Processes").Range("I2:I33").Copy
        Sheets("Operations").Range("B7").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks:=False, Transpose:=False

    ElseIf Me.OptionButton3.Value = True Then

        Sheets("Operations").Range("B7:M33").ClearContents
        Sheets("Processes").Range("N2:N33").Copy
        Sheets("Operations").Range("B7").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks:=False, Transpose:=False

    ElseIf Me.OptionButton4.Value = True Then

        Sheets("Operations").Range("B7:M33").ClearContents
        Sheets("Processes").Range("S2:S33").Copy
        Sheets("Operations").Range("B7").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks:=False, Transpose:=False

    ElseIf Me.OptionButton5.Value = True Then

        Sheets("Operations").Range("B7:M33").ClearContents
        Sheets("Processes").Range("X2:X33").Copy
        Sheets("Operations").Range("B7").PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks:=False, Transpose:=False

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