Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Критика макроса, Укажите, пожайлуста, на основные проблему
 
Добрый вечер. Есть 4 диапазона данных (каждый по 4 столбца, количество строк постоянно меняется), их местоположение известно.
Я попробовал написать макрос, он дает результат. Но я чувствую, что можно было сделать это по-другому/легче/эффективнее.
Пожалуйста, укажите на эти моменты (можно без кода, просто словами описать где проблема и какие конструкции использовать). Я только начал учить VBA, хочется понять, где проблемы.
Спасибо

Код
Sub asd()

    Dim shtX As Worksheet             'рабочий лист
    Dim rngStart As Range             'начальная ячейка
    Dim rngFinish As Range            'ячейка для другиз диапазонов
    Dim rngX As Range
    

    Dim rngAll As Range               'весь рабочий 1-ый диапазон
    Dim rngOther As Range             'весь другой диапазон
    Dim Nrow As Long                  'число строк

    
    Set shtX = ActiveSheet
    Set rngStart = shtX.Range("A1")
    Set rngAll = rngStart.CurrentRegion
    Nrow = rngAll.Rows.Count

 
    Set rngFinish = shtX.Range("H1")
    Set rngOther = rngFinish.CurrentRegion

    Set rngX = rngStart.Offset(Nrow, 0)
    
    rngOther.Offset(1, 0).Select
    Selection.Cut
    rngX.Select
    ActiveSheet.Paste
    
    rngOther.Clear
    
    
    Set shtX = ActiveSheet
    Set rngStart = shtX.Range("A1")
    Set rngAll = rngStart.CurrentRegion
    Nrow = rngAll.Rows.Count

 
    Set rngFinish = shtX.Range("o1")
    Set rngOther = rngFinish.CurrentRegion

    Set rngX = rngStart.Offset(Nrow, 0)
    
    rngOther.Offset(1, 0).Select
    Selection.Cut
    rngX.Select
    ActiveSheet.Paste
    
    rngOther.Clear
    
        
    Set shtX = ActiveSheet
    Set rngStart = shtX.Range("A1")
    Set rngAll = rngStart.CurrentRegion
    Nrow = rngAll.Rows.Count

 
    Set rngFinish = shtX.Range("v1")
    Set rngOther = rngFinish.CurrentRegion


    Set rngX = rngStart.Offset(Nrow, 0)
    
    rngOther.Offset(1, 0).Select
    Selection.Cut
    rngX.Select
    ActiveSheet.Paste
    
    rngOther.Clear
End Sub
Вывод результатов на лист Excel при помощи команды Cells
 
Добрый вечер! Я только начал учить язык VBA, надеюсь на вашу помощь. У меня есть код (представлен ниже), последней процедурой хочу вывести результаты на лист Excel. Проблема в том, что и на 1, и на 2 строчку выводится "Name: Petya Surname: Vasichnin Dolznost: 5".
Методом проб и ошибок я понял, проблема в том, что во второй процедуре  команда "Call Vivod(starSotr)" идет последней, поэтому она и выводится 2 раза.

Вопрос в следующем: как правильно написать последнюю команду, чтобы в 1-ой строке было "Name: Vasya Surname: Petrov Dolznost: 1", а во второй - "Name: Petya Surname: Vasichnin Dolznost: 5".

Заранее прошу прощения за глупый вопрос и возможные ошибки в оформлении
Спасибо
Код
Type Sotrudnik
    Name As String
    Surname As String
    Dolznost As Integer
End Type

Sub MainProc()
    Dim mladSotr As Sotrudnik
    Dim starSotr As Sotrudnik
    
    Call InitSotr(mladSotr, "Vasya", "Petrov", 1)
    Call InitSotr(starSotr, "Petya", "Vasichnin", 5)
    
    Call Vivod(mladSotr)
    Call Vivod(starSotr)      
End Sub


Sub InitSotr(ByRef sotr As Sotrudnik, ByVal Name As String, ByVal Surname As String, ByVal Dolznost As Integer)
    sotr.Name = Name
    sotr.Surname = Surname
    sotr.Dolznost = Dolznost

End Sub

Sub Vivod(ByRef sotr As Sotrudnik)
    Dim Index As Integer
    For Index = 1 To 2
    Cells(Index, 1) = "Name: " & sotr.Name & " Surname: " & sotr.Surname & " Dolznost: " & sotr.Dolznost
    Next Index 
End Sub
Изменено: Kozyr - 11.07.2017 23:35:00
Страницы: 1
Наверх