VBA Automatic Application.Username неправильно заполняется - PullRequest
0 голосов
/ 07 ноября 2019

Таким образом, я работал над попыткой автоматизации некоторых функций в электронной таблице, и по большей части написанные мной коды VBA ведут себя так, как задумано. Но тот, который сводит меня с ума, это тот, кто автоматически заполняет имя пользователя приложения. Так что я запускаю его как Sub, так как у меня работает несколько разных функций, вот код:

Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("A4:A198")) Is Nothing Then
        Call AutoName
     End If
End Sub
Sub AutoName()
    Dim myCells As Range
    Set myCells = Selection
    If myCells = (myCells.Value) Then
         With myCells(1, 6)
        .Value = Application.UserName
        .EntireColumn.AutoFit
        End With
        With myCells(1, 5)
        .Value = Date
        End With
    Else
        With myCells(1, 6)
        .Value = Null
        End With
        With myCells
        .Value = Null
        End With
    End If
End Sub

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

Spreadsheet Pic Имя пользователя остается в ТМстолбец, а затем заполняет в столбце даты, а затем дата заполняет в столбце дела! Я попытался добавить .ClearContents, Range.Delete, но это все равно происходит независимо. Я в конце остроумие с этим. Это не конец света, он по большей части функционирует так, как задумано, просто раздражает. Вторичная проблема, которая, опять же, просто раздражает, состоит в том, что, если я нажму «удалить», когда в этой первой ячейке будет автоматически заполнено имя в ячейке «Дата» и дата в ячейке регистра. Опять не конец света, просто раздражает. Любая помощь будет оценена, где я иду не так. В случае, если это не было очевидно, я новичок в VBA

1 Ответ

2 голосов
/ 07 ноября 2019

Если я понимаю, что вы пытаетесь сделать, вы, возможно, захотите переписать это, используя Offset, чтобы выяснить, с какими столбцами вы работаете, а также передав диапазон до AutoName вместо того, чтобы полагаться наSelection. Кроме того, если вы вносите изменения в несколько ячеек одновременно, ваш текущий код не будет работать. Лучше всего проходить через каждую ячейку в Intersect ионе определенного диапазона и Target.

Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Me.Range("A4:A198")) Is Nothing Then
        AutoName rng:=Intersect(Target, Me.Range("A4:A198"))
     End If
End Sub

Sub AutoName(ByVal rng As Range)
    Dim cell As Range

    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            With cell.Offset(, 6)
                .Value = Application.UserName
                .EntireColumn.AutoFit
            End With
            With cell.Offset(, 5)
                .Value = Date
            End With
        Else
            With cell.Offset(, 5).Resize(, 2)
                .ClearContents
            End With
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...