Всем доброго утра! и с пятницей!!! не могу решить задачу...нужно, чтобы при выборе ФИО и выборе месяца, данные брались с одноименного листа (лист=месяцу). Заранее всех благодарю.
Всем доброго утра! и с пятницей!!! не могу решить задачу...нужно, чтобы при выборе ФИО и выборе месяца, данные брались с одноименного листа (лист=месяцу). Заранее всех благодарю.ane4ka87
Sub GetData() Dim wsh As Worksheet, FIO As String, month_criteria As String Dim arr, data As Range, lr As Long, lc As Long With Worksheets("расчет") month_criteria = .Range("B4").Value FIO = .Range("C1").Value With Worksheets(month_criteria) Set data = Worksheets(month_criteria).Cells.Find(FIO) lc = .Cells(1, .Columns.Count).End(xlToLeft).Column arr = .Range(.Cells(data.Row, 2), .Cells(data.Row, lc)) End With .Range("B5").Resize(UBound(arr, 2), 1) = Application.Transpose(arr) End With End Sub
[/vba] Нажимаете кнопку на листе Расчет и данные подтягиваются (макрос привязан к кнопке, находится в стандартном модуле)
ane4ka87, добрый день! можно, например так: [vba]
Код
Sub GetData() Dim wsh As Worksheet, FIO As String, month_criteria As String Dim arr, data As Range, lr As Long, lc As Long With Worksheets("расчет") month_criteria = .Range("B4").Value FIO = .Range("C1").Value With Worksheets(month_criteria) Set data = Worksheets(month_criteria).Cells.Find(FIO) lc = .Cells(1, .Columns.Count).End(xlToLeft).Column arr = .Range(.Cells(data.Row, 2), .Cells(data.Row, lc)) End With .Range("B5").Resize(UBound(arr, 2), 1) = Application.Transpose(arr) End With End Sub
[/vba] Нажимаете кнопку на листе Расчет и данные подтягиваются (макрос привязан к кнопке, находится в стандартном модуле)jun
ane4ka87, либо такой вариант макроса в модуле листа "расчет": [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range, criteria_month As String Set idData = Intersect(Target, Range("C1")) If Not idData Is Nothing Then criteria_month = Worksheets("расчет").Range("B4").Value Set shData = Worksheets(criteria_month) If idData <> "" Then With shData r = .Columns(1).Find(idData, , xlValues, xlWhole).Row c = .Rows(1).Find("Проект", , xlValues, xlWhole).Column Range("B5").Resize(3) = WorksheetFunction.Transpose(.Cells(r, 2).Resize(, 3)) End With End If End If End Sub
[/vba]
ane4ka87, либо такой вариант макроса в модуле листа "расчет": [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range, criteria_month As String Set idData = Intersect(Target, Range("C1")) If Not idData Is Nothing Then criteria_month = Worksheets("расчет").Range("B4").Value Set shData = Worksheets(criteria_month) If idData <> "" Then With shData r = .Columns(1).Find(idData, , xlValues, xlWhole).Row c = .Rows(1).Find("Проект", , xlValues, xlWhole).Column Range("B5").Resize(3) = WorksheetFunction.Transpose(.Cells(r, 2).Resize(, 3)) End With End If End If End Sub
jun, работает! Но не совсем корректно. Нужно сперва выбрать ФИО сотрудника, данные на этом этапе не должны появляться, если месяц не выбран. Далее данные подтягиваются в зависимости от выбранного месяца.
jun, работает! Но не совсем корректно. Нужно сперва выбрать ФИО сотрудника, данные на этом этапе не должны появляться, если месяц не выбран. Далее данные подтягиваются в зависимости от выбранного месяца.ane4ka87
Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range, FIO As String Set idData = Intersect(Target, Range("B4")): FIO = Range("C1").Value If Not idData Is Nothing Then If SheetExist(Range("B4")) Then Set shData = Worksheets(idData.Value) If idData <> "" Then With shData r = .Columns(1).Find(FIO, , xlValues, xlWhole).Row c = .Rows(1).Find("Проект", , xlValues, xlWhole).Column Range("B5").Resize(3) = WorksheetFunction.Transpose(.Cells(r, 2).Resize(, 3)) End With End If Else MsgBox "В книге нет листа с именем: " & Range("B4") End If End If End Sub
[/vba] В стандартный модуль макрос [vba]
Код
Function SheetExist(iName As String) As Boolean On Error Resume Next With Worksheets(iName): End With SheetExist = (Err = 0) End Function
[/vba]
Цитата
добавить сообщение, если листа не существует
Добавить строки в макрос [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim idData As Range, FIO As String Set idData = Intersect(Target, Range("B4")): FIO = Range("C1").Value If Not idData Is Nothing Then If SheetExist(Range("B4")) Then Set shData = Worksheets(idData.Value) If idData <> "" Then With shData r = .Columns(1).Find(FIO, , xlValues, xlWhole).Row c = .Rows(1).Find("Проект", , xlValues, xlWhole).Column Range("B5").Resize(3) = WorksheetFunction.Transpose(.Cells(r, 2).Resize(, 3)) End With End If Else MsgBox "В книге нет листа с именем: " & Range("B4") End If End If End Sub
[/vba] В стандартный модуль макрос [vba]
Код
Function SheetExist(iName As String) As Boolean On Error Resume Next With Worksheets(iName): End With SheetExist = (Err = 0) End Function
Kuzmich, подскажите, пожалуйста, я часть информации беру с другого листа, без привязки к месяцу. И хочу чтобы она отображалась уже при выборе только фамилии. На данный момент у меня работает, только если я выбираю месяц ,то все поля во всех таблицах заполняются.
Kuzmich, подскажите, пожалуйста, я часть информации беру с другого листа, без привязки к месяцу. И хочу чтобы она отображалась уже при выборе только фамилии. На данный момент у меня работает, только если я выбираю месяц ,то все поля во всех таблицах заполняются.ane4ka87
jun, добрый день! ) теперь другая часть перестала работать.( При выборе ФИО сотрудника стали появляться его персональные данные, а вот сведения по командировке не работают, не изменяются при выборе месяца.
jun, добрый день! ) теперь другая часть перестала работать.( При выборе ФИО сотрудника стали появляться его персональные данные, а вот сведения по командировке не работают, не изменяются при выборе месяца.ane4ka87