макрос в Excel

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (2) [1] 2   К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
Edaries
26.10.2012 - 09:22
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
2
Помогите пожалуйста с макросом.
есть вот такое чудо:
Sub Макрос3()
'
' Макрос3 Макрос
'

'
Workbooks.OpenText Filename:="E:\2012_10_25 На подсчет_sut.txt", Origin:= _
1251, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), _
Array(16, 2), Array(29, 2), Array(42, 2), Array(52, 2), Array(64, 2), Array(76, 2)), _
TrailingMinusNumbers:=True
ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 12.86
ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 20.14
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.ColumnWidth = 13.86
ActiveCell.Offset(0, 2).Columns("A:A").EntireColumn.ColumnWidth = 10.86
ActiveCell.Offset(0, 3).Columns("A:A").EntireColumn.ColumnWidth = 13.14
ActiveCell.Offset(0, 4).Columns("A:A").EntireColumn.ColumnWidth = 12
ActiveCell.Offset(0, 5).Columns("A:A").EntireColumn.ColumnWidth = 11.57
ActiveCell.Offset(0, 6).Columns("A:A").EntireColumn.ColumnWidth = 15.43
End Sub


*********
как сделать что бы он выдал запрос на то какой файл открыть?
создавал я его через "Запись макроса"

Это сообщение отредактировал Edaries - 26.10.2012 - 09:22
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
amdx
26.10.2012 - 10:11
2
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
Пример:
Код

fName = Application.GetOpenFilename ("Text Files (*.txt)", "*.txt")
If InStr(fName, "False") = 0 Then
  msg = "You selected the '" & fName & "' file."
Else
  msg = "You clicked Cancel!"
End If


Это сообщение отредактировал amdx - 26.10.2012 - 10:19
 
[^]
Edaries
26.10.2012 - 10:40
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
amdx
Чесс говоря с VB я не дружу и потому не понимаю что удалить и куда вставить то что ты мне написал cry.gif cry.gif cry.gif
 
[^]
DeniskoBalbes
26.10.2012 - 10:55
2
Статус: Offline


Небольшая авторская корректировка

Регистрация: 12.07.08
Сообщений: 1552
Edaries
наверное,
Workbooks.OpenText Filename:="E:\2012_10_25 На подсчет_sut.txt"
надо заменить на
fName = Application.GetOpenFilename ("Text Files (*.txt)", "*.txt")
Workbooks.OpenText Filename:=fName

как мне кажется
 
[^]
amdx
26.10.2012 - 11:06
1
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
DeniskoBalbes, не совсем. Если быть поточнее, то
Код

fName = Application.GetOpenFilename ("Text Files (*.txt)", "*.txt")
If InStr(fName, "False") = 0 Then
Workbooks.OpenText Filename:=fName, Origin:= _
1251, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), _
Array(16, 2), Array(29, 2), Array(42, 2), Array(52, 2), Array(64, 2), Array(76, 2)), _
TrailingMinusNumbers:=True
...
...
EndIf
 
[^]
Edaries
26.10.2012 - 11:46
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Спасибо.
Допилил до такого состояния:
Код

Sub Ìàêðîñ3()
'
' Ìàêðîñ3 Ìàêðîñ
'

'
fName = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If fName <> False Then
Workbooks.OpenText Filename:=fName, Origin:= _
1251, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), _
Array(16, 2), Array(29, 2), Array(42, 2), Array(52, 2), Array(64, 2), Array(76, 2)), _
TrailingMinusNumbers:=True

End If



Это сообщение отредактировал Edaries - 26.10.2012 - 11:47
 
[^]
amdx
26.10.2012 - 11:49
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Цитата
If fName <> False

Не, это не проканает. Фишка в том, что возвращается строка, в которой написано "False".
Это VBA, детка biggrin.gif
 
[^]
Edaries
26.10.2012 - 11:50
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Цитата (amdx @ 26.10.2012 - 12:49)
Цитата
If fName <> False

Не, это не проканает. Фишка в том, что возвращается строка, в которой написано "False".
Это VBA, детка biggrin.gif

но она работает. а то что ты дал выдавало ошибку upset.gif why.gif upset.gif
щас запускаю макрос-выдает окно открытия файла, указываю файл а остальное делает сам. щас буду дальше допиливать макрос на перерасчеты, конвертирование и сохранение.
если чо я еще пару вопросиков задам?

Это сообщение отредактировал Edaries - 26.10.2012 - 11:51
 
[^]
amdx
26.10.2012 - 11:56
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Цитата
но она работает. а то что ты дал выдавало ошибку

Конечно, fname - это строка, она никогда не будет равна логическому False. Так же как и True. Не знаю, может это в 2003 оффисе и позже немного изменили работу функции.
 
[^]
Edaries
26.10.2012 - 12:08
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
amdx
я не знаю. я ща в 2010 сижу, кавыряюсь, моск пухнет.
 
[^]
Edaries
26.10.2012 - 13:06
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
еще одна проблема:
Исходник после импорта



макрос в Excel
 
[^]
Edaries
26.10.2012 - 13:07
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
добавил к макросу:
Код
Columns("B:G").sеlесt
      Selection.rерlасе What:=".", Replacement:=",", LookAt:=xlPart, _
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
       ReplaceFormat:=False

и должно получиться так:


макрос в Excel
 
[^]
Edaries
26.10.2012 - 13:07
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
а получается вот так:
cry.gif cry.gif cry.gif
хде я опять накосячил?

макрос в Excel
 
[^]
DeniskoBalbes
26.10.2012 - 13:14
0
Статус: Offline


Небольшая авторская корректировка

Регистрация: 12.07.08
Сообщений: 1552
имхается мне, формат ячеек менять надо
а как- не готов сказать, года 2 не кодил, забыл все sad.gif
 
[^]
amdx
26.10.2012 - 13:37
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
rерlасе применяется к строке. Поэтому результатом будет тоже строка. Вообще, при обращении к свойству Value ячейки, преобразование в число ведется автоматически, если выпоняется математическая операция. Например:
Код

Лист1.Cells(1, 1).Value = Лист1.Cells(1, 1).Value * 1

преобразует ячейку к числу, независимо от того, запятая там или точка
Так что, имхо, rерlасе не нужен вообще

Это сообщение отредактировал amdx - 26.10.2012 - 13:39
 
[^]
Edaries
26.10.2012 - 13:46
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
DeniskoBalbes
amdx
Данные со счетчика я получаю именно в таком виде в формате txt (рукалитсо)
Код


АРХИВ СУТОЧНЫЙ
Дата       Время    КАНАЛ №1   КАНАЛ №2   Счетчик №1  Счетчик №2  Наработка1 Наработка2
                                                                      (за сутки)
2012.10.21  0:00   3022.000      0.000    3022.000       0.000     478.92     477.09
2012.10.22  0:00   1468.000      0.000    4490.000       0.000      23.93      23.74
2012.10.23  0:00    212.000      0.000    4702.000       0.000      23.94      23.85
2012.10.24  0:00     81.000      0.000    4783.000       0.000      23.91      23.67

если попадаются цифры типа "23.06" то эхель на стадии импорта сам превращает в дату 23.июнь (рукалитсо)
потому приходится импортировать с форматом ячейки "текстовый"
зпт нужны что мона было считать.
Цитата

rерlасе применяется к строке.
а к колонке? Нам нужно работать с колонками B:G. на А пох

Это сообщение отредактировал Edaries - 26.10.2012 - 13:47
 
[^]
amdx
26.10.2012 - 14:06
1
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Цитата
если попадаются цифры типа "23.06" то эхель на стадии импорта сам превращает в дату 23.июнь

Ну так епт, если во время импорта, то нужно было ему сказать про типы данных в каждой колонке при импорте. Для этого служит параметр FieldInfo. А у тебя в нем указано Array(Номер_стобца_в_файле, Тип_Значения), где тип_значения = 2, то есть как текст. Однако номера столбцов прыгают от 0 аж до 76. Если в файле 7 столбцов, то делов то пронумеровать их в Array и задать текстовый формат (2) заместо General. Тогда число в дату не превратится.
Код

Workbooks.OpenText Filename:=fName, Origin:= _
1251, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(1, 2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2)), _
TrailingMinusNumbers:=True

Цитата
а к колонке? Нам нужно работать с колонками B:G. на А пох

Не так объяснил. Поскольку Columns это Range - то rерlасе работает с текстом каждой Cell из Range, возвращает результат в виде строки и записывает его обратно.

Это сообщение отредактировал amdx - 26.10.2012 - 14:36
 
[^]
Edaries
26.10.2012 - 14:36
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Цитата (amdx @ 26.10.2012 - 15:06)
Цитата
если попадаются цифры типа "23.06" то эхель на стадии импорта сам превращает в дату 23.июнь

Ну так епт, если во время импорта, то нужно было ему сказать про типы данных в каждой колонке при импорте. Для этого служит параметр FieldInfo. А у тебя в нем указано Array(Номер_стобца_в_файле, Тип_Значения), где тип_значения = 2, то есть как текст. Однако номера столбцов прыгают от 0 аж до 76. Если в файле 7 столбцов, то делов то пронумеровать их в Array и задать текстовый формат (2) заместо General. Тогда число в дату не превратится.
Код

Workbooks.OpenText Filename:=fName, Origin:= _
1251, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(1, 2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2)), _
TrailingMinusNumbers:=True

брррр
yad.gif
что мне вырезать из макроса и что вставить?
или мож его нах до понедельника? rulez.gif shum_lol.gif
 
[^]
amdx
26.10.2012 - 14:38
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Цитата
что мне вырезать из макроса и что вставить?

Так я же написал. Заменить OpenText с параметрами на этот кусок.
 
[^]
Edaries
26.10.2012 - 15:26
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Получилось cry.gif cry.gif cry.gif

макрос в Excel
 
[^]
amdx
26.10.2012 - 15:39
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Скинь кусок текстового файла. Попробую поиграться.
Только не пост, а в виде файла.

Это сообщение отредактировал amdx - 26.10.2012 - 15:40
 
[^]
amdx
26.10.2012 - 18:22
0
Статус: Offline


Программер

Регистрация: 20.05.11
Сообщений: 2693
Файл-то без разделителей. Поля форматированы пробелом. В принципе можно грузануть каждую строку в одну ячейку, а потом макросом раскидать по остальным. Не удивительно что офис криво его грузит. Чуть позже выложу что получилось.
 
[^]
Edaries
26.10.2012 - 22:14
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Цитата (amdx @ 26.10.2012 - 19:22)
Файл-то без разделителей. Поля форматированы пробелом. В принципе можно грузануть каждую строку в одну ячейку, а потом макросом раскидать по остальным. Не удивительно что офис криво его грузит. Чуть позже выложу что получилось.

дык вот и я про тож. в таким виде я данные и получаю со счетчика.
 
[^]
u806
26.10.2012 - 22:20
0
Статус: Offline


Приколист

Регистрация: 8.09.08
Сообщений: 326
бля-я-я. как молоды мы были!
не, нельзя строить базу в ехеле. глюки пойдут, он не для этого.
 
[^]
Edaries
27.10.2012 - 16:54
0
Статус: Offline


Ярила

Регистрация: 27.01.10
Сообщений: 1701
Цитата
бля-я-я. как молоды мы были!
не, нельзя строить базу в ехеле. глюки пойдут, он не для этого.

Это не база.
Цитата
в таким виде я данные и получаю со счетчика.

 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 4421
0 Пользователей:
Страницы: (2) [1] 2  [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх