Автор: Sunnych
Дата сообщения: 18.02.2008 12:45
		Есть вот такой макрос он проходит по шапке (в шапке заданы месяца) и определяет таким образом начальный и конечный столбец области определения для изъятия и замены информации находящейся в ячейках, проблема такого рода ранее ячейки с месяцами были текстовыми, а теперь они в формате дата "Date", и я не знаю как мне переделать функции "Function" так что макрос работал как раньше. 
 
Код: Function ПолучитьЛист(ИмяЛиста) As Worksheet 
     Dim tmpWSh As Worksheet 
     On Error Resume Next 
     Set tmpWSh = ActiveWorkbook.Sheets(ИмяЛиста) 
     If Err.Number <> 0 Then 
         Set tmpWSh = ActiveWorkbook.Sheets.Add 
         tmpWSh.Name = ИмяЛиста 
     Else 
         tmpWSh.UsedRange.Clear 
     End If 
     On Error GoTo 0 
     Set ПолучитьЛист = tmpWSh 
 End Function 
  
 Function ЭтоМесяц(ТекстЗнач) As Boolean 
     Dim AllMonth As String 
     ЭтоМесяц = False 
     ТекстЗнач = LCase(ТекстЗнач) 
     If InStr(1, "янв.08,фев.08,мар.08,апр.08,май.08,июн.08,июл.08,авг.08,сен.08,окт.08,ноя.08,дек.08", ТекстЗнач) > 0 Then 
         ЭтоМесяц = True 
     End If 
 End Function 
  
 Function ПолучитьНомерМесяца(ТекстЗнач) As Integer 
     Dim StartPos As Integer 
     Dim i As Integer 
     Dim MonthNumber As Integer 
     MonthNumber = 0 
     StartPos = InStr(1, "янв.08,фев.08,мар.08,апр.08,май.08,июн.08,июл.08,авг.08,сен.08,окт.08,ноя.08,дек.08", ТекстЗнач) 
     For i = 1 To StartPos 
         If Mid$("янв.08,фев.08,мар.08,апр.08,май.08,июн.08,июл.08,авг.08,сен.08,окт.08,ноя.08,дек.08", i, 1) = "," Then 
             MonthNumber = MonthNumber + 1 
         End If 
     Next i 
     ПолучитьНомерМесяца = MonthNumber + 1 
 End Function 
  
 Sub Sunnych_current_txt() 
 ' Саныч Макрос 
 ' Макрос записан 5.02.2008 (Sunnych) 
     Dim SH As Worksheet 
     Dim iCol As Integer 
     Dim iStartCol As Integer 
     Dim iMaxCol As Integer 
     Dim iRow As Integer 
     Dim iMaxRow As Integer 
     Dim vVar1 As Variant 
     Dim strT1 As String 
     Dim intOffset As Integer 
      
     Set SH = ПолучитьЛист("Лист3") 
     iStartCol = 0 
     iMaxCol = Sheets("Лист1").UsedRange.Columns.Count + Sheets("Лист1").UsedRange.Column - 1 
     For iCol = 3 To iMaxCol 
         Debug.Print Sheets("Лист1").UsedRange.Columns(iCol).Width 
         If (Sheets("Лист1").UsedRange.Columns(iCol).Width > 1) And (iStartCol = 0) Then 
             iStartCol = iCol 
             Exit For 
         End If 
     Next iCol 
     intOffset = iStartCol - ПолучитьНомерМесяца(LCase(Trim$(Sheets("Лист1").Cells(8, iStartCol).Text))) 
     For iCol = iStartCol To iMaxCol 
         Debug.Print Sheets("Лист1").UsedRange.Columns(iCol).Width 
         If Sheets("Лист1").UsedRange.Columns(iCol).Width > 3 Then 
             strT1 = Trim$(Sheets("Лист1").Cells(8, iCol).Text) 
             If ЭтоМесяц(strT1) = False Then 
                 Exit For 
             End If 
             SH.Cells(1, ПолучитьНомерМесяца(strT1)).FormulaR1C1 = strT1 
             SH.Cells(1, ПолучитьНомерМесяца(strT1)).NumberFormat = "[$-419]mmmm yyyy" 
         End If 
     Next iCol 
     iMaxCol = iCol - 1 
      
     iRow = 9 
     Do While Trim$(Sheets("Лист1").Cells(iRow, 1).Text) <> "" 
         For iCol = iStartCol To iMaxCol 
             strT1 = Trim$(Sheets("Лист1").Cells(iRow, iCol).Text) 
             If sText = "" Then 
                 sText = "0" 
             ElseIf sText = "резерв" Then 
                 sText = "0R" 
             ElseIf sText = "с 15" Then 
                 sText = "занят с 15" 
             ElseIf sText = "до 15" Then 
                 sText = "занят до 15" 
             Else 
                 sText = "1" 
             End If 
             SH.Cells(iRow - 7, iCol - intOffset).NumberFormat = "" 
           
         Next iCol 
         iRow = iRow + 1 
          
     Loop 
      
     For iCol = 1 To SH.UsedRange.Columns.Count 
         If SH.Cells(1, iCol).Text <> "" Then 
             iStartCol = iCol 
             Exit For 
         End If 
     Next iCol 
     SH.Activate 
     For iCol = 1 To iStartCol - 1 
         SH.Range(Cells(2, iStartCol), Cells(SH.UsedRange.Rows.Count, iStartCol)).Select 
         Selection.Copy 
         SH.Cells(2, iCol).Select 
         SH.Paste 
     Next iCol 
      
     SH.Select 
     For iCol = SH.UsedRange.Columns.Count + 1 To 12 
         SH.Range(Cells(2, SH.UsedRange.Columns.Count), Cells(SH.UsedRange.Rows.Count, SH.UsedRange.Columns.Count)).Select 
         Selection.Copy 
         SH.Cells(2, iCol).Select 
         SH.Paste 
     Next iCol 
      
     SH.Activate 
     SH.Range(SH.Cells(1, 1), SH.Cells(SH.UsedRange.Rows.Count, SH.UsedRange.Columns.Count)).Select 
     Selection.Copy 
  
 End Sub