Excel VBA определить и ввести данные из диапазона в другой лист - PullRequest
0 голосов
/ 07 ноября 2019

У меня два листа. Первый лист получает данные из таблицы SQL, поэтому диапазон всегда изменяется в зависимости от размера данных. Я определил, какой диапазон для ячейки A2: endxldown

На листе 2 у меня есть форма даты, котораяпредлагает пользователю ввести дату, когда пользователь вводит дату, например, сегодня Excel должен ввести эту дату в листе 2, например, лист 1 имеет диапазон данных A2: A20, поэтому лист 2 будет вводить сегодняшние данные в диапазоне A2: A20

Это дает мне диапазон в листе 1;

Sub findlastrow()
Dim LastRow As Long

With Worksheets("Data").Activate
LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row
Range("A1").Resize(LastRow).Select
MsgBox "The data range address is " & Selection.Address(0, 0) & ".", _
vbInformation, "Data-Contatining range address:"
End With


End Sub

Ответ = A2: A251

Предполагается, что приведенный ниже код вводит дату в диапазон A2: A251

Sub CreateJnl()

Dim dte As String
Dim LastRow As Long
Dim rng As Range
Dim ws As Worksheet




Application.Calculation = xlManual
Application.ScreenUpdating = False

Sheets("Journal").Cells.ClearContents

Set ws = ThisWorkbook.Sheets("Data")

With ws
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row
Range("A2").Resize(LastRow).Select
MsgBox "The data range address is " & Selection.Address(0, 0) & ".", _
vbInformation, "Data-Contatining range address:"

    Else
        LastRow = 1
    End If

    If Not LastRow < 3 Then
        Set rng = .Range("A2:A" & LastRow)

        Debug.Print rng.Address
    Else
        MsgBox "No Data found beyond A3"
    End If
End With



dte = InputBox("Please Enter Date: ", Default:=Format(Now, "dd/mm/yyyy"))
Sheets("Journal").rng.Value = dte


Application.ScreenUpdating = True
End Sub

1 Ответ

1 голос
/ 07 ноября 2019

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

Sub CreateJnl()

    Dim dte As String, strRange As String
    Dim LastRow As Long
    Dim rng As Range
    Dim ws As Worksheet

    Application.Calculation = xlManual
    Application.ScreenUpdating = False

    Sheets("Journal").Cells.ClearContents

    Set ws = ThisWorkbook.Sheets("Data")

    With ws
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            LastRow = .Cells.Find(What:="*", SearchDirection:=xlPrevious, _
            SearchOrder:=xlByRows).Row
            Range("A2").Resize(LastRow).Select
            MsgBox "The data range address is " & Selection.Address(0, 0) & ".", _
            vbInformation, "Data-Contatining range address:"
        Else
            LastRow = 1
        End If

        If Not LastRow < 3 Then
            'Set rng = .Range("A2:A" & LastRow)
            strRange = "A2:A" & LastRow
            'Debug.Print rng.Address
        Else
            MsgBox "No Data found beyond A3"
        End If
    End With

    dte = InputBox("Please Enter Date: ", Default:=Format(Now, "dd/mm/yyyy"))
    Sheets("Journal").Activate
    Sheets("Journal").Range(strRange).Value = dte

    Application.ScreenUpdating = True

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