Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.11.2008, 11:13   #11
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

Sub t
Код:
est()
    With Application.FileDialog(msoFileDialogOpen)    'только для MS Excel XP и старше
        .InitialFileName = "c:\"
        .FilterIndex = 3
        .AllowMultiSelect = False
        If .Show = -1 Then
            Filename = .SelectedItems(1)        ' читаем путь выбранного файла
        Else
            Exit Sub           ' отмена чтения
        End If
    End With
    MsgBox "Выбран файл " & Filename, vbInformation, "Результат выбора файла"
End sub
Имя файла имеет следующий вид - "Скидки конкурентов 17.10.08"
Нужно выудить имя файла - подозреваю через ActiveWorkbook.Name,
а затем вставить в нужную ячейку дату из имени файла "Скидки конкурентов 17.10.08", но в виде "17 октября".
Как это можно реализовать?
Bu$ter вне форума
Старый 07.11.2008, 11:14   #12
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

Код:
Sub test()
    With Application.FileDialog(msoFileDialogOpen)    'только для MS Excel XP и старше
        .InitialFileName = "c:\"
        .FilterIndex = 3
        .AllowMultiSelect = False
        If .Show = -1 Then
            Filename = .SelectedItems(1)        ' читаем путь выбранного файла
        Else
            Exit Sub           ' отмена чтения
        End If
    End With
    MsgBox "Выбран файл " & Filename, vbInformation, "Результат выбора файла"
End sub
Имя файла имеет следующий вид - "Скидки конкурентов 17.10.08"
Нужно выудить имя файла - подозреваю через ActiveWorkbook.Name,
а затем вставить в нужную ячейку дату из имени файла "Скидки конкурентов 17.10.08", но в виде "17 октября".
Как это можно реализовать?
Bu$ter вне форума
Старый 07.11.2008, 15:57   #13
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Нужно выудить имя файла - подозреваю через ActiveWorkbook.Name
Правильно подозреваете... если файл, имя которого надо получить, в данный момент активен.

Цитата:
Имя файла имеет следующий вид - "Скидки конкурентов 17.10.08"

вставить в нужную ячейку дату из имени файла "Скидки конкурентов 17.10.08", но в виде "17 октября"
Например, так:

Код:
Sub test()
    MsgBox GetDateFromFileName("Скидки конкурентов 17.10.08.xls")
End Sub

Function GetDateFromFileName(ByVal Filename As String) As String    ' возвращает дату, содержащуюся в имени файла
    GetDateFromFileName = "": Filename = CropFileExt(Filename)
    For i = 1 To Len(Filename)
        If Mid$(Filename, i, 1) Like "#" Then GetDateFromFileName = Trim$(Mid$(Filename, i)): Exit For
    Next
    If GetDateFromFileName = "" Then Exit Function
    If IsDate(GetDateFromFileName) Then GetDateFromFileName = CStr(Format(CDate(GetDateFromFileName), "dd mmmm"))
End Function

Function CropFileExt(ByVal Filename As String) As String    ' обрезает расширение у имени файла
    For i = Len(Filename) To 2 Step -1
        If Mid$(Filename, i, 1) = "." Then CropFileExt = Left$(Filename, i - 1): Exit Function
    Next
    CropFileExt = Filename
End Function
Теперь, если надо вставить дату из названия файла активного документа, к примеру, в ячейку F5, то можете использовать такой код:

[f5] = GetDateFromFileName(ActiveWorkbook. Name)
EducatedFool вне форума
Старый 07.11.2008, 17:18   #14
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

СПАСИБО!!! Встречный вопрос, а если мы извлекаем дату не из активного документа, как тогда изменится код...

Последний раз редактировалось Bu$ter; 07.11.2008 в 17:24.
Bu$ter вне форума
Старый 07.11.2008, 17:28   #15
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
если мы извлекаем дату не из активного документа
а из какого?

если из того, в котором выполняется код (этот документ может быть неактивен), то замените activeworkbook на thisworkbook

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

[f5] = GetDateFromFileName("Скидки конкурентов 17.10.08.xls")
EducatedFool вне форума
Старый 07.11.2008, 17:41   #16
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

Спасибо, разобрался...
Bu$ter вне форума
Старый 07.11.2008, 17:50   #17
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

И еще один встречный вопрос:
После выполнения макроса имеем ячейку типа "17 октября"
а как разделить ее на 2 - в первой октябрь, а во второй 17?
Bu$ter вне форума
Старый 07.11.2008, 18:04   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
После выполнения макроса имеем ячейку типа "17 октября"
а как разделить ее на 2 - в первой октябрь, а во второй 17?
А не проще ли в таком случае сразу записывать дату и месяц в отдельные ячейки.

Но можно и разделить. Например, так:

Код:
Sub test5()
    On Error Resume Next
    [e7] = "17 октября"
    [f7] = IIf(IsDate([e7]), Format(CDate([e7]), "dd"), "")
    [g7] = IIf(IsDate([e7]), Format(CDate([e7]), "mmmm"), "")
End Sub
Или так:

Код:
Sub test6()
    On Error Resume Next
    [e9] = "17 октября"
    [f9] = Val([e9])
    [g9] = IIf(InStr(1, [e9], " ") > 0, Mid$([e9], InStr(1, [e9], " ") + 1), "")
End Sub
Можно, конечно, это сделать и при помощи формул, но я в формулах, мягко говоря, не специалист
EducatedFool вне форума
Старый 11.11.2008, 18:08   #19
Bu$ter
Пользователь
 
Аватар для Bu$ter
 
Регистрация: 16.05.2008
Сообщений: 73
По умолчанию

Все отлично работает, небольшое встречный вопрос -

Код:
[c58] = IIf(IsDate( ), Format(CDate(), "mmmm"), "")
вставляется название месяца, но с заглавной буквы.
Вопрос - как изменить код, чтобы название месяца было с прописной буквы?

Спасибо
Bu$ter вне форума
Старый 11.11.2008, 19:04   #20
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

[c58] =IIf(IsDate( ), LCase(Format(CDate(), "mmmm")), "")
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор директории Kashp Общие вопросы Delphi 6 06.05.2009 06:29
Система обновлений Johnson Общие вопросы Delphi 8 25.10.2008 20:39
Выбор специальности VollmonD Свободное общение 6 02.04.2008 13:18
Выбор установочника Simply-Art Софт 3 15.02.2008 12:53