Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ОБЪЕДИНЕНИЕ МАКРОСОВ (ДИАЛОГОВОЕ ОКНО+ФОРМАТ) - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » ОБЪЕДИНЕНИЕ МАКРОСОВ (ДИАЛОГОВОЕ ОКНО+ФОРМАТ) (Макросы/Sub)
ОБЪЕДИНЕНИЕ МАКРОСОВ (ДИАЛОГОВОЕ ОКНО+ФОРМАТ)
televnoy Дата: Вторник, 09.09.2014, 14:56 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
День добрый мне надо подредактировать как то макрос. Лишнее вроде убрал.
В макросе сохранение по умалчанию по имени листа. Так надо чтоб тот в свою очередь выводил окно сохранения.

Суть нижеприведенного макроса сохранение без лишних кавычек.Работает исправно. Взят с темы этого форума

Сам макрос

[vba]
Код
Sub ExportSheet2CSV()

' Параметры для сохраняемого файла
'    cFileName = "" ' имя файла экспорта, по умолчанию - имя активного листа
'    cDelimiter = "," ' разделитель полей
'    cTextQualifier = "" ' квалификатор символьных полей, по умолчанию экв. xlTextQualifierNone для совместимости с SQL
'    cDecimalSeparator = "." ' символ десятичной точки, по умолчанию экв. "dot" для совместимости
'    nStartRow = 1 ' Номер строки на листе - первая строка, с которой выпоняется экспорт (включая заголовок, если есть)
'    nStartCol = 1 ' Номер столбца на листе - первый столбец , с которого выполняется экспорт
'    vCutHeader = True ' Наличие строки заголовка (подписей столбцов) и его удаление:
'       =True=-1 - заголовок считается равным 1 строке, при этом из результирующего файла заголовок исключается
'       <0 - размер заголовка в строках, исключается из результата
'       >0 - размер заголовка в строках, не исключается из результата (но записывается "как есть", без преобразований)
'       =False=0 - заголовок отсутствует
'    cFormatdateTime = "YYYY-MM-DD hh:mm:ss" ' формат даты/времени, по умолчанию выставлен в ISO8601 для совместимости
'    cTypeQualifier = "#" ' квалификатор логических значений и даты, по умолчанию - пустаое значение
              
       Dim wb As Workbook, newwb As Workbook, sh As Worksheet, newsh As Worksheet
       Dim nLastRow As Long, nLastCol As Long, i As Long, j As Long
       Dim cOut As String, cValue
          
       Application.ScreenUpdating = False
          
       Set wb = ActiveWorkbook
       Set sh = ActiveSheet
       Set newwb = Workbooks.Add
       Set newsh = newwb.Sheets(1)
          
' Установки границ экспортируемой таблицы
' Правая-нижняя граница выставляется по используемой области листа
       nLastRow = sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1
       nLastCol = sh.UsedRange.Column + sh.UsedRange.Columns.Count - 1
' Левая-верхняя граница подтягивается к началу заполнения на листе
       nStartRow = Application.WorksheetFunction.Max(nStartRow, sh.UsedRange.Row)
       nStartCol = Application.WorksheetFunction.Max(nStartCol, sh.UsedRange.Column)
' ВНИМАНИЕ - заголовок будет отсчитан от нового левого-верхнего положения
' Анализ заголовка
       vCutHeader = vCutHeader + 0
       If vCutHeader < 0 Then nStartRow = nStartRow - vCutHeader
' Сборка данных
       For i = nStartRow To nLastRow
           vCutHeader = vCutHeader - 1
           cOut = ""
           For j = nStartCol To nLastCol
               cValue = sh.Cells(i, j)
               If vCutHeader < 0 Then ' не строка заголовка
                   Select Case VarType(cValue)
                   Case vbString
                       cValue = cTextQualifier & cValue & cTextQualifier
                   Case vbInteger, vbLong, vbByte
                       cValue = CStr(cValue)
                   Case vbSingle, vbDouble, vbCurrency, vbDecimal
                       cValue = Replace(CStr(cValue), Application.International(xlDecimalSeparator), cDecimalSeparator)
                   Case vbBoolean
                       cValue = cTypeQualifier & CStr(cValue) & cTypeQualifier
                   Case vbDate
                       cValue = cTypeQualifier & Format(cValue, cFormatDateTime) & cTypeQualifier
                   Case Else
                   ' Все значения ошибок
                       cValue = ""
                   End Select
               End If
               cOut = cOut & cDelimiter & CStr(cValue)
           Next
           newsh.Cells(i - nStartRow + 1, 1) = Mid(cOut, 1)
       Next
          
       Set newsh = Nothing
          
' Сохранение файла
       If Len(cFileName) = 0 Then cFileName = sh.Name & ".pd4"
       If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
          
       Application.DisplayAlerts = False
       newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
       Application.DisplayAlerts = True
       newwb.Close savechanges:=False
' *
       Set newwb = Nothing
       wb.Activate
          
       Application.ScreenUpdating = True
          
       Set sh = Nothing
       Set wb = Nothing
          
End Sub
[/vba]

ФАЙЛ ПРИМЕРА УПРОЩЕН И СОХРАНЯЕТ В TXT ДЛЯ ВАШЕГО УДОБСТВА
К сообщению приложен файл: 1196418.xls (69.5 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 11:31
 
Ответить
СообщениеДень добрый мне надо подредактировать как то макрос. Лишнее вроде убрал.
В макросе сохранение по умалчанию по имени листа. Так надо чтоб тот в свою очередь выводил окно сохранения.

Суть нижеприведенного макроса сохранение без лишних кавычек.Работает исправно. Взят с темы этого форума

Сам макрос

[vba]
Код
Sub ExportSheet2CSV()

' Параметры для сохраняемого файла
'    cFileName = "" ' имя файла экспорта, по умолчанию - имя активного листа
'    cDelimiter = "," ' разделитель полей
'    cTextQualifier = "" ' квалификатор символьных полей, по умолчанию экв. xlTextQualifierNone для совместимости с SQL
'    cDecimalSeparator = "." ' символ десятичной точки, по умолчанию экв. "dot" для совместимости
'    nStartRow = 1 ' Номер строки на листе - первая строка, с которой выпоняется экспорт (включая заголовок, если есть)
'    nStartCol = 1 ' Номер столбца на листе - первый столбец , с которого выполняется экспорт
'    vCutHeader = True ' Наличие строки заголовка (подписей столбцов) и его удаление:
'       =True=-1 - заголовок считается равным 1 строке, при этом из результирующего файла заголовок исключается
'       <0 - размер заголовка в строках, исключается из результата
'       >0 - размер заголовка в строках, не исключается из результата (но записывается "как есть", без преобразований)
'       =False=0 - заголовок отсутствует
'    cFormatdateTime = "YYYY-MM-DD hh:mm:ss" ' формат даты/времени, по умолчанию выставлен в ISO8601 для совместимости
'    cTypeQualifier = "#" ' квалификатор логических значений и даты, по умолчанию - пустаое значение
              
       Dim wb As Workbook, newwb As Workbook, sh As Worksheet, newsh As Worksheet
       Dim nLastRow As Long, nLastCol As Long, i As Long, j As Long
       Dim cOut As String, cValue
          
       Application.ScreenUpdating = False
          
       Set wb = ActiveWorkbook
       Set sh = ActiveSheet
       Set newwb = Workbooks.Add
       Set newsh = newwb.Sheets(1)
          
' Установки границ экспортируемой таблицы
' Правая-нижняя граница выставляется по используемой области листа
       nLastRow = sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1
       nLastCol = sh.UsedRange.Column + sh.UsedRange.Columns.Count - 1
' Левая-верхняя граница подтягивается к началу заполнения на листе
       nStartRow = Application.WorksheetFunction.Max(nStartRow, sh.UsedRange.Row)
       nStartCol = Application.WorksheetFunction.Max(nStartCol, sh.UsedRange.Column)
' ВНИМАНИЕ - заголовок будет отсчитан от нового левого-верхнего положения
' Анализ заголовка
       vCutHeader = vCutHeader + 0
       If vCutHeader < 0 Then nStartRow = nStartRow - vCutHeader
' Сборка данных
       For i = nStartRow To nLastRow
           vCutHeader = vCutHeader - 1
           cOut = ""
           For j = nStartCol To nLastCol
               cValue = sh.Cells(i, j)
               If vCutHeader < 0 Then ' не строка заголовка
                   Select Case VarType(cValue)
                   Case vbString
                       cValue = cTextQualifier & cValue & cTextQualifier
                   Case vbInteger, vbLong, vbByte
                       cValue = CStr(cValue)
                   Case vbSingle, vbDouble, vbCurrency, vbDecimal
                       cValue = Replace(CStr(cValue), Application.International(xlDecimalSeparator), cDecimalSeparator)
                   Case vbBoolean
                       cValue = cTypeQualifier & CStr(cValue) & cTypeQualifier
                   Case vbDate
                       cValue = cTypeQualifier & Format(cValue, cFormatDateTime) & cTypeQualifier
                   Case Else
                   ' Все значения ошибок
                       cValue = ""
                   End Select
               End If
               cOut = cOut & cDelimiter & CStr(cValue)
           Next
           newsh.Cells(i - nStartRow + 1, 1) = Mid(cOut, 1)
       Next
          
       Set newsh = Nothing
          
' Сохранение файла
       If Len(cFileName) = 0 Then cFileName = sh.Name & ".pd4"
       If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
          
       Application.DisplayAlerts = False
       newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
       Application.DisplayAlerts = True
       newwb.Close savechanges:=False
' *
       Set newwb = Nothing
       wb.Activate
          
       Application.ScreenUpdating = True
          
       Set sh = Nothing
       Set wb = Nothing
          
End Sub
[/vba]

ФАЙЛ ПРИМЕРА УПРОЩЕН И СОХРАНЯЕТ В TXT ДЛЯ ВАШЕГО УДОБСТВА

Автор - televnoy
Дата добавления - 09.09.2014 в 14:56
televnoy Дата: Вторник, 09.09.2014, 14:57 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ну а это в общем диалоговое окно, и создание папки

[vba]
Код
Sub СохранитьЛистВФайл()
      On Error Resume Next
      ' название подпапки, в которую по-умолчанию будет предложено сохранить файл
     Const REPORTS_FOLDER = "HIRZT\"
      ' создаём папку для файла, если её ещё нет
     MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
      ' выбираем стартовую папку
     ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER

      ' вывод диалогового окна для запроса имени сохраняемого файла
     Filename = Application.GetSaveAsFilename("latin.pd4", "HIRZT (*.pd4),", , _
                     "Введите имя файла для сохраняемого отчёта", "Сохранить")
      ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(Filename) = vbBoolean Then Exit Sub

      ' копируем активный лист (при этом создаётся новая книга)
     Err.Clear: ActiveSheet.Copy: DoEvents
      If Err Then Exit Sub    ' произошла какая-то ошибка при попытке копирования листа

      ' убеждаемся, что активной книгой является копия листа
     If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
          ' сохраняем файл под заданным именем в формате Excel 2003
         ActiveWorkbook.SaveAs Filename, xlWorkbookNormal
            
          ' закрываем сохранённый файл
         ' (удалите следующую строку, если закрывать созданный файл не требуется)
         ActiveWorkbook.Close False
      End If
End Sub
[/vba]

При последнем макросе выходит абракадабра. В первом в нужном формате. Надо в первую воткнуть диалоговое окно и создание папки. Спасибо заранее профессионалам.


О-па! 0_o
 
Ответить
СообщениеНу а это в общем диалоговое окно, и создание папки

[vba]
Код
Sub СохранитьЛистВФайл()
      On Error Resume Next
      ' название подпапки, в которую по-умолчанию будет предложено сохранить файл
     Const REPORTS_FOLDER = "HIRZT\"
      ' создаём папку для файла, если её ещё нет
     MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
      ' выбираем стартовую папку
     ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER

      ' вывод диалогового окна для запроса имени сохраняемого файла
     Filename = Application.GetSaveAsFilename("latin.pd4", "HIRZT (*.pd4),", , _
                     "Введите имя файла для сохраняемого отчёта", "Сохранить")
      ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(Filename) = vbBoolean Then Exit Sub

      ' копируем активный лист (при этом создаётся новая книга)
     Err.Clear: ActiveSheet.Copy: DoEvents
      If Err Then Exit Sub    ' произошла какая-то ошибка при попытке копирования листа

      ' убеждаемся, что активной книгой является копия листа
     If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
          ' сохраняем файл под заданным именем в формате Excel 2003
         ActiveWorkbook.SaveAs Filename, xlWorkbookNormal
            
          ' закрываем сохранённый файл
         ' (удалите следующую строку, если закрывать созданный файл не требуется)
         ActiveWorkbook.Close False
      End If
End Sub
[/vba]

При последнем макросе выходит абракадабра. В первом в нужном формате. Надо в первую воткнуть диалоговое окно и создание папки. Спасибо заранее профессионалам.

Автор - televnoy
Дата добавления - 09.09.2014 в 14:57
televnoy Дата: Среда, 10.09.2014, 09:37 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Не ужели не кто не знает?


О-па! 0_o
 
Ответить
СообщениеНе ужели не кто не знает?

Автор - televnoy
Дата добавления - 10.09.2014 в 09:37
Pelena Дата: Среда, 10.09.2014, 09:51 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19184
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Видимо ждут файл с небольшим примером в соответствии с Правилами форума, да и название теме следует дать более конкретное


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВидимо ждут файл с небольшим примером в соответствии с Правилами форума, да и название теме следует дать более конкретное

Автор - Pelena
Дата добавления - 10.09.2014 в 09:51
televnoy Дата: Среда, 10.09.2014, 10:11 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ПРИКРЕПИЛ ФАЙЛ ПРИМЕРА, сохранения для вашего удобства сделал в TXT

В макросе ExportSheet_and_folder сохраняет лист с аброкадаброй
Макрос ExportSheetTXT сохраняет лист в нужном формате, без пресловутых """кавычек""" (в нем возможно еще и мусора много)

Так вот во второй ExportSheetTXT, добавить диалоговое окно с созданием папки как в первом, или же наоборот в ExportSheet_and_folder запихнуть нужный формат.
К сообщению приложен файл: forum.xls (69.5 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 10:19
 
Ответить
СообщениеПРИКРЕПИЛ ФАЙЛ ПРИМЕРА, сохранения для вашего удобства сделал в TXT

В макросе ExportSheet_and_folder сохраняет лист с аброкадаброй
Макрос ExportSheetTXT сохраняет лист в нужном формате, без пресловутых """кавычек""" (в нем возможно еще и мусора много)

Так вот во второй ExportSheetTXT, добавить диалоговое окно с созданием папки как в первом, или же наоборот в ExportSheet_and_folder запихнуть нужный формат.

Автор - televnoy
Дата добавления - 10.09.2014 в 10:11
televnoy Дата: Среда, 10.09.2014, 10:13 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемая Pelena, исправил...


О-па! 0_o
 
Ответить
СообщениеУважаемая Pelena, исправил...

Автор - televnoy
Дата добавления - 10.09.2014 в 10:13
The_Prist Дата: Среда, 10.09.2014, 11:08 | Сообщение № 7
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
Уважаемая Pelena, исправил
Видимо, не все исправили. Там еще что-то про название темы было...Не рискну отвечать без одобрения администрации :-)


Errare humanum est, stultum est in errore perseverare
 
Ответить
Сообщение
Уважаемая Pelena, исправил
Видимо, не все исправили. Там еще что-то про название темы было...Не рискну отвечать без одобрения администрации :-)

Автор - The_Prist
Дата добавления - 10.09.2014 в 11:08
televnoy Дата: Среда, 10.09.2014, 11:17 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
The_Prist, Сейчас то тема более подходит под описание проблемы?


О-па! 0_o
 
Ответить
СообщениеThe_Prist, Сейчас то тема более подходит под описание проблемы?

Автор - televnoy
Дата добавления - 10.09.2014 в 11:17
The_Prist Дата: Среда, 10.09.2014, 12:07 | Сообщение № 9
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
В принципе решать не мне. Меня название устраивает :-)
Если правильно понял, то Вам это надо:
[vba]
Код
Sub ExportSheetTXT()

' Параметры для сохраняемого файла
'    cFileName = "" ' имя файла экспорта, по умолчанию - имя активного листа
'    cDelimiter = "," ' разделитель полей
'    cTextQualifier = "" ' квалификатор символьных полей, по умолчанию экв. xlTextQualifierNone для совместимости с SQL
'    cDecimalSeparator = "." ' символ десятичной точки, по умолчанию экв. "dot" для совместимости
'    nStartRow = 1 ' Номер строки на листе - первая строка, с которой выпоняется экспорт (включая заголовок, если есть)
'    nStartCol = 1 ' Номер столбца на листе - первый столбец , с которого выполняется экспорт
'    vCutHeader = True ' Наличие строки заголовка (подписей столбцов) и его удаление:
'       =True=-1 - заголовок считается равным 1 строке, при этом из результирующего файла заголовок исключается
'       <0 - размер заголовка в строках, исключается из результата
'       >0 - размер заголовка в строках, не исключается из результата (но записывается "как есть", без преобразований)
'       =False=0 - заголовок отсутствует
'    cFormatdateTime = "YYYY-MM-DD hh:mm:ss" ' формат даты/времени, по умолчанию выставлен в ISO8601 для совместимости
'    cTypeQualifier = "#" ' квалификатор логических значений и даты, по умолчанию - пустаое значение

     Dim wb As Workbook, newwb As Workbook, sh As Worksheet, newsh As Worksheet
     Dim nLastRow As Long, nLastCol As Long, i As Long, j As Long
     Dim cOut As String, cValue

     Application.ScreenUpdating = False

     Set wb = ActiveWorkbook
     Set sh = ActiveSheet
     Set newwb = Workbooks.Add
     Set newsh = newwb.Sheets(1)

     ' Установки границ экспортируемой таблицы
     ' Правая-нижняя граница выставляется по используемой области листа
     nLastRow = sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1
     nLastCol = sh.UsedRange.Column + sh.UsedRange.Columns.Count - 1
     ' Левая-верхняя граница подтягивается к началу заполнения на листе
     nStartRow = Application.WorksheetFunction.Max(nStartRow, sh.UsedRange.Row)
     nStartCol = Application.WorksheetFunction.Max(nStartCol, sh.UsedRange.Column)
     ' ВНИМАНИЕ - заголовок будет отсчитан от нового левого-верхнего положения
     ' Анализ заголовка
     vCutHeader = vCutHeader + 0
     If vCutHeader < 0 Then nStartRow = nStartRow - vCutHeader
     ' Сборка данных
     For i = nStartRow To nLastRow
         vCutHeader = vCutHeader - 1
         cOut = ""
         For j = nStartCol To nLastCol
             cValue = sh.Cells(i, j)
             If vCutHeader < 0 Then    ' не строка заголовка
                 Select Case VarType(cValue)
                 Case vbString
                     cValue = cTextQualifier & cValue & cTextQualifier
                 Case vbInteger, vbLong, vbByte
                     cValue = CStr(cValue)
                 Case vbSingle, vbDouble, vbCurrency, vbDecimal
                     cValue = Replace(CStr(cValue), Application.International(xlDecimalSeparator), cDecimalSeparator)
                 Case vbBoolean
                     cValue = cTypeQualifier & CStr(cValue) & cTypeQualifier
                 Case vbDate
                     cValue = cTypeQualifier & Format(cValue, cFormatDateTime) & cTypeQualifier
                 Case Else
                     ' Все значения ошибок
                     cValue = ""
                 End Select
             End If
             cOut = cOut & cDelimiter & CStr(cValue)
         Next
         newsh.Cells(i - nStartRow + 1, 1) = Mid(cOut, 1)
     Next

     Set newsh = Nothing

     ' Сохранение файла
     Dim vFilename
     If Len(cFileName) = 0 Then cFileName = sh.Name & ".txt"
     vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                    "Введите имя файла для сохраняемого отчёта", "Сохранить")
     ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(vFilename) = vbBoolean Then
         If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
     Else
         vFilename = Replace(vFilename, Dir(vFilename, 16), "")
         cFileName = vFilename & cFileName
     End If

     Application.DisplayAlerts = False
     newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
     Application.DisplayAlerts = True
     newwb.Close savechanges:=False
     ' *
     Set newwb = Nothing
     wb.Activate

     Application.ScreenUpdating = True

     Set sh = Nothing
     Set wb = Nothing

End Sub
[/vba]
Момент: если в диалоговом окне не выбран файл - то сохранен файл будет в папку с книгой, в которой макрос


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеВ принципе решать не мне. Меня название устраивает :-)
Если правильно понял, то Вам это надо:
[vba]
Код
Sub ExportSheetTXT()

' Параметры для сохраняемого файла
'    cFileName = "" ' имя файла экспорта, по умолчанию - имя активного листа
'    cDelimiter = "," ' разделитель полей
'    cTextQualifier = "" ' квалификатор символьных полей, по умолчанию экв. xlTextQualifierNone для совместимости с SQL
'    cDecimalSeparator = "." ' символ десятичной точки, по умолчанию экв. "dot" для совместимости
'    nStartRow = 1 ' Номер строки на листе - первая строка, с которой выпоняется экспорт (включая заголовок, если есть)
'    nStartCol = 1 ' Номер столбца на листе - первый столбец , с которого выполняется экспорт
'    vCutHeader = True ' Наличие строки заголовка (подписей столбцов) и его удаление:
'       =True=-1 - заголовок считается равным 1 строке, при этом из результирующего файла заголовок исключается
'       <0 - размер заголовка в строках, исключается из результата
'       >0 - размер заголовка в строках, не исключается из результата (но записывается "как есть", без преобразований)
'       =False=0 - заголовок отсутствует
'    cFormatdateTime = "YYYY-MM-DD hh:mm:ss" ' формат даты/времени, по умолчанию выставлен в ISO8601 для совместимости
'    cTypeQualifier = "#" ' квалификатор логических значений и даты, по умолчанию - пустаое значение

     Dim wb As Workbook, newwb As Workbook, sh As Worksheet, newsh As Worksheet
     Dim nLastRow As Long, nLastCol As Long, i As Long, j As Long
     Dim cOut As String, cValue

     Application.ScreenUpdating = False

     Set wb = ActiveWorkbook
     Set sh = ActiveSheet
     Set newwb = Workbooks.Add
     Set newsh = newwb.Sheets(1)

     ' Установки границ экспортируемой таблицы
     ' Правая-нижняя граница выставляется по используемой области листа
     nLastRow = sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1
     nLastCol = sh.UsedRange.Column + sh.UsedRange.Columns.Count - 1
     ' Левая-верхняя граница подтягивается к началу заполнения на листе
     nStartRow = Application.WorksheetFunction.Max(nStartRow, sh.UsedRange.Row)
     nStartCol = Application.WorksheetFunction.Max(nStartCol, sh.UsedRange.Column)
     ' ВНИМАНИЕ - заголовок будет отсчитан от нового левого-верхнего положения
     ' Анализ заголовка
     vCutHeader = vCutHeader + 0
     If vCutHeader < 0 Then nStartRow = nStartRow - vCutHeader
     ' Сборка данных
     For i = nStartRow To nLastRow
         vCutHeader = vCutHeader - 1
         cOut = ""
         For j = nStartCol To nLastCol
             cValue = sh.Cells(i, j)
             If vCutHeader < 0 Then    ' не строка заголовка
                 Select Case VarType(cValue)
                 Case vbString
                     cValue = cTextQualifier & cValue & cTextQualifier
                 Case vbInteger, vbLong, vbByte
                     cValue = CStr(cValue)
                 Case vbSingle, vbDouble, vbCurrency, vbDecimal
                     cValue = Replace(CStr(cValue), Application.International(xlDecimalSeparator), cDecimalSeparator)
                 Case vbBoolean
                     cValue = cTypeQualifier & CStr(cValue) & cTypeQualifier
                 Case vbDate
                     cValue = cTypeQualifier & Format(cValue, cFormatDateTime) & cTypeQualifier
                 Case Else
                     ' Все значения ошибок
                     cValue = ""
                 End Select
             End If
             cOut = cOut & cDelimiter & CStr(cValue)
         Next
         newsh.Cells(i - nStartRow + 1, 1) = Mid(cOut, 1)
     Next

     Set newsh = Nothing

     ' Сохранение файла
     Dim vFilename
     If Len(cFileName) = 0 Then cFileName = sh.Name & ".txt"
     vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                    "Введите имя файла для сохраняемого отчёта", "Сохранить")
     ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(vFilename) = vbBoolean Then
         If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
     Else
         vFilename = Replace(vFilename, Dir(vFilename, 16), "")
         cFileName = vFilename & cFileName
     End If

     Application.DisplayAlerts = False
     newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
     Application.DisplayAlerts = True
     newwb.Close savechanges:=False
     ' *
     Set newwb = Nothing
     wb.Activate

     Application.ScreenUpdating = True

     Set sh = Nothing
     Set wb = Nothing

End Sub
[/vba]
Момент: если в диалоговом окне не выбран файл - то сохранен файл будет в папку с книгой, в которой макрос

Автор - The_Prist
Дата добавления - 10.09.2014 в 12:07
televnoy Дата: Среда, 10.09.2014, 12:50 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
The_Prist, Е-е-Е КЛАНЯЮСЬ ВАМ О ПОЧТЕННЫЙ МАКРОДЕЛ pray ТО ЧТО НАДО clap


О-па! 0_o
 
Ответить
СообщениеThe_Prist, Е-е-Е КЛАНЯЮСЬ ВАМ О ПОЧТЕННЫЙ МАКРОДЕЛ pray ТО ЧТО НАДО clap

Автор - televnoy
Дата добавления - 10.09.2014 в 12:50
televnoy Дата: Среда, 10.09.2014, 12:55 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
The_Prist, ЧТО ТО СРАЗУ НЕ ЗАМЕТИЛ ФАЙЛ СОХРАНЯЕТ ПРИМЕР.txtPART II.txt ВМЕСТО ПРИМЕР.txt ИМЯ ЛИСТА ПРИПИСЫВАЕТ


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 12:56
 
Ответить
СообщениеThe_Prist, ЧТО ТО СРАЗУ НЕ ЗАМЕТИЛ ФАЙЛ СОХРАНЯЕТ ПРИМЕР.txtPART II.txt ВМЕСТО ПРИМЕР.txt ИМЯ ЛИСТА ПРИПИСЫВАЕТ

Автор - televnoy
Дата добавления - 10.09.2014 в 12:55
The_Prist Дата: Среда, 10.09.2014, 13:26 | Сообщение № 12
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
Но если Вы сам файл из папки не выбираете, а просто жмете Ок - то можете дополнить:
[vba]
Код
        vFilename = Replace(vFilename, Dir(vFilename, 16), "")
          vFilename = Replace(vFilename, "пример.txt", "")
          cFileName = vFilename & cFileName
[/vba]
тогда все будет как положено.
А если и имя файла не должно быть как имя листа - то вообще не понимаю проблемы - у Вас и так все готово для этого:
[vba]
Код
vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                     "Введите имя файла для сохраняемого отчёта", "Сохранить")
     ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(vFilename) = vbBoolean Then Exit Sub
     cFileName = vFilename
[/vba]


Errare humanum est, stultum est in errore perseverare

Сообщение отредактировал The_Prist - Среда, 10.09.2014, 13:28
 
Ответить
СообщениеНо если Вы сам файл из папки не выбираете, а просто жмете Ок - то можете дополнить:
[vba]
Код
        vFilename = Replace(vFilename, Dir(vFilename, 16), "")
          vFilename = Replace(vFilename, "пример.txt", "")
          cFileName = vFilename & cFileName
[/vba]
тогда все будет как положено.
А если и имя файла не должно быть как имя листа - то вообще не понимаю проблемы - у Вас и так все готово для этого:
[vba]
Код
vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                     "Введите имя файла для сохраняемого отчёта", "Сохранить")
     ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
     If VarType(vFilename) = vbBoolean Then Exit Sub
     cFileName = vFilename
[/vba]

Автор - The_Prist
Дата добавления - 10.09.2014 в 13:26
televnoy Дата: Среда, 10.09.2014, 13:36 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
The_Prist, насчет добавление имени листа я убрал & cFilename, стало сохранять

И теперь не этот момент при отказе

Цитата
Момент: если в диалоговом окне не выбран файл - то сохранен файл будет в папку с книгой, в которой макрос


А теперь ругается если отмену нажал и выделяет [vba]
Код
newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
[/vba]


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 13:37
 
Ответить
СообщениеThe_Prist, насчет добавление имени листа я убрал & cFilename, стало сохранять

И теперь не этот момент при отказе

Цитата
Момент: если в диалоговом окне не выбран файл - то сохранен файл будет в папку с книгой, в которой макрос


А теперь ругается если отмену нажал и выделяет [vba]
Код
newwb.SaveAs Filename:=(cFileName), FileFormat:=xlTextPrinter, CreateBackup:=False, local:=True
[/vba]

Автор - televnoy
Дата добавления - 10.09.2014 в 13:36
televnoy Дата: Среда, 10.09.2014, 13:40 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
здесь убрал & cFilename

[vba]
Код
If VarType(vFilename) = vbBoolean Then
         If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
     Else
         vFilename = Replace(vFilename, Dir(vFilename, 16), "")
         cFileName = vFilename & cFileName
     End If
[/vba]


О-па! 0_o
 
Ответить
Сообщениездесь убрал & cFilename

[vba]
Код
If VarType(vFilename) = vbBoolean Then
         If InStr(1, cFileName, "\") = 0 Then cFileName = wb.Path & "\" & cFileName
     Else
         vFilename = Replace(vFilename, Dir(vFilename, 16), "")
         cFileName = vFilename & cFileName
     End If
[/vba]

Автор - televnoy
Дата добавления - 10.09.2014 в 13:40
The_Prist Дата: Среда, 10.09.2014, 13:52 | Сообщение № 15
Группа: Друзья
Ранг: Участник
Сообщений: 85
Репутация: 22 ±
Замечаний: 0% ±

2010
Так. Объясните нормально при каких условиях и с каким именем должен сохраняться файл.
Зачем заставлять угадывать что Вам надо?
Если нажали Отмена - что должно произойти?
Если нажали Да - под каким именем должен сохраниться файл?


Errare humanum est, stultum est in errore perseverare
 
Ответить
СообщениеТак. Объясните нормально при каких условиях и с каким именем должен сохраняться файл.
Зачем заставлять угадывать что Вам надо?
Если нажали Отмена - что должно произойти?
Если нажали Да - под каким именем должен сохраниться файл?

Автор - The_Prist
Дата добавления - 10.09.2014 в 13:52
televnoy Дата: Среда, 10.09.2014, 13:56 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ОК ДА фаш последний код то что надо было, и вы правильно поняли

Цитата
А если и имя файла не должно быть как имя листа - то вообще не понимаю проблемы - у Вас и так все готово для этого:


О-па! 0_o
 
Ответить
СообщениеОК ДА фаш последний код то что надо было, и вы правильно поняли

Цитата
А если и имя файла не должно быть как имя листа - то вообще не понимаю проблемы - у Вас и так все готово для этого:

Автор - televnoy
Дата добавления - 10.09.2014 в 13:56
AndreTM Дата: Среда, 10.09.2014, 15:00 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
televnoy, в своё время я для Татьяны делал всё даже с кнопочками. ПосмотрИте код, там вроде достаточно прозрачно...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 10.09.2014, 15:06
 
Ответить
Сообщениеtelevnoy, в своё время я для Татьяны делал всё даже с кнопочками. ПосмотрИте код, там вроде достаточно прозрачно...

Автор - AndreTM
Дата добавления - 10.09.2014 в 15:00
televnoy Дата: Среда, 10.09.2014, 16:38 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
УВАЖАЕМЫЙ AndreTM, данный макрос я как то не допонял. Насколько бы он не был прозрачен. Не выполняется вообще. А в терминах недопанимаю, а если быть правдивым вообще не понимаю. Надо данный макрос воткнуть в вышеперечисленный? То куда? Сам пос себе он ругается. Или же переимновать листы?

При ошибке выделенна строка [vba]
Код
ExportSheet2CSV
[/vba] Ну и желтым [vba]
Код
Sub ExportData()
[/vba]
К сообщению приложен файл: 5331577.xls (56.5 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 16:50
 
Ответить
СообщениеУВАЖАЕМЫЙ AndreTM, данный макрос я как то не допонял. Насколько бы он не был прозрачен. Не выполняется вообще. А в терминах недопанимаю, а если быть правдивым вообще не понимаю. Надо данный макрос воткнуть в вышеперечисленный? То куда? Сам пос себе он ругается. Или же переимновать листы?

При ошибке выделенна строка [vba]
Код
ExportSheet2CSV
[/vba] Ну и желтым [vba]
Код
Sub ExportData()
[/vba]

Автор - televnoy
Дата добавления - 10.09.2014 в 16:38
televnoy Дата: Среда, 10.09.2014, 16:46 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Извените пожалуйста The_Prist, за неясное объяснения.

Данный макрос, предложенный вами, работает так как надо.

[vba]
Код
vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                      "Введите имя файла для сохраняемого отчёта", "Сохранить")
      ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
      If VarType(vFilename) = vbBoolean Then Exit Sub
      cFileName = vFilename
[/vba]

Сохраняет так как положенно.

При отмене должен закрываться книга которую он не сохранил. Получается я запустил макрос - выдало диалоговое окно - отменить - окно диалоговое закрылось-но осталась открытая книга созданная макросом. Так вот хочу чтоб при отмене данная книга, которая не сохранилась под нужным нам форматом и т.п. закрылась тоже.

А по сути из всего следует мне нужен простой текстовый форматированный текст, без лишних там кавычек. На данный момент корректно срабатывает на сохранение данный макрос.
К сообщению приложен файл: 1382241.xls (56.5 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Среда, 10.09.2014, 16:48
 
Ответить
СообщениеИзвените пожалуйста The_Prist, за неясное объяснения.

Данный макрос, предложенный вами, работает так как надо.

[vba]
Код
vFilename = Application.GetSaveAsFilename("пример.txt", "ФОРМАТ ПРОБЫ (*.txt),", , _
                      "Введите имя файла для сохраняемого отчёта", "Сохранить")
      ' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
      If VarType(vFilename) = vbBoolean Then Exit Sub
      cFileName = vFilename
[/vba]

Сохраняет так как положенно.

При отмене должен закрываться книга которую он не сохранил. Получается я запустил макрос - выдало диалоговое окно - отменить - окно диалоговое закрылось-но осталась открытая книга созданная макросом. Так вот хочу чтоб при отмене данная книга, которая не сохранилась под нужным нам форматом и т.п. закрылась тоже.

А по сути из всего следует мне нужен простой текстовый форматированный текст, без лишних там кавычек. На данный момент корректно срабатывает на сохранение данный макрос.

Автор - televnoy
Дата добавления - 10.09.2014 в 16:46
RAN Дата: Среда, 10.09.2014, 16:57 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
мне нужен простой текстовый форматированный текст

televnoy, если бы вы в предыдущей теме сходили по ссылке, прочитали правила, выложили примеры (excel и текст) , вы давно уже имели бы готовый макрос, ибо он (вместе с сохранением) - 10-15 строк.
К сообщению приложен файл: latin.pd4 (0.1 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
мне нужен простой текстовый форматированный текст

televnoy, если бы вы в предыдущей теме сходили по ссылке, прочитали правила, выложили примеры (excel и текст) , вы давно уже имели бы готовый макрос, ибо он (вместе с сохранением) - 10-15 строк.

Автор - RAN
Дата добавления - 10.09.2014 в 16:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » ОБЪЕДИНЕНИЕ МАКРОСОВ (ДИАЛОГОВОЕ ОКНО+ФОРМАТ) (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!