Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: Demolisherik
Дата сообщения: 04.08.2009 12:07
Помогите За Лупить данное чудо)

Sub test()
If Worksheets("sheet1").Range("a1") = "" And Worksheets("sheet2").Range("a1") = "" Then
Worksheets("sheet3").Range("a1") = ""
ElseIf Worksheets("sheet1").Range("a1") = Worksheets("sheet2").Range("a1") Then
Worksheets("sheet3").Range("a1") = "true"
Else
Worksheets("sheet3").Range("a1") = "false"
End If

End Sub

Не могу понять как ввести в цикл для подсчётов на всем листе
Автор: Semant01
Дата сообщения: 04.08.2009 13:14
Помогите решить такой вопрос:
Я могу с помощью VBA открывать текстовые файлы типа
Open "C:\Test.txt" For...
А как мне
записать адрес, если файл находится в интернете?
И можно ли с помощью кода импортировать на лист файлы, например, *.csv?


Добавлено:
Demolisherik, попробуйте использовать не Range, а Cells
Например, обращение к ячейки А1 будет
Worksheets("sheet1").Cells(1,1)
к ячейки А2
Worksheets("sheet1").Cells(2,1)
И в цикл.

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

Ведь я так понимаю первые два листа заполнены не под завязку, а в разумных пределах =)
Автор: smith45
Дата сообщения: 05.08.2009 11:01
Доброго времени суток.
Необходимо импортировать из web информацию.
Написал на vba код (75 кб, ats.rar, в формате Excel 2007, **tp://ifolder.ru/13408535 ).
Но периодически выпадает ошибка причину которой не могу найти и понять (картинка в приложенном архиве).
Т.е. бывает так что часть информации импортируется, а потом выпадает эта ошибка. Бывает и сразу выпадает ошибка в начале импорта.
Путь к файлам не превышает и 50 знаков, папка и сам файл существуют, папка с файлами доступна для записи, имя файла не содержит ни одного из указанных знаков.
Помогите, пожалуйста.
Автор: daf
Дата сообщения: 05.08.2009 22:12
Привет всем
Проблема в следущем:
пишу макрос для дублирования файла при сохранении,
но есть проблема нужно чтобы один раз всё сохранялось на флэшку- ок, а второй раз на почте типа googlemail, хотел использовать gmailfs но что-то не получается.
Может кто-нибудь подскажет как решить проблему или предложить другой вариант.
Автор: Gunslighter
Дата сообщения: 06.08.2009 12:25
Здравствуйте! Я в VBA не разбираюсь. У меня следующий вопрос:
Как задать ссылку на "предыдущий лист", например чтобы ячейка Лист2!A1 была равна Лист1А1, а Лист3А1 на Лист2А1 и так далее?

Нашел в сети вот такое решение:

[more]Function ListN(Optional Napravlenie As Byte = 0) As String
Dim Lnm As String
Application.Volatile
With Application.ThisCell.Parent
If Napravlenie = 1 Or Napravlenie = 3 Then
If .Index = Sheets.Count Then
Lnm = Sheets(1).Name
Else: Lnm = .Next.Name
End If
Else
If .Index = 1 Then
Lnm = Sheets(Sheets.Count).Name
Else: Lnm = .Previous.Name
End If
End If
If Napravlenie > 1 Then
ListN = "[" & .Parent.Name & "]" & Lnm
Else: ListN = Lnm
End If
End With
End Function

Примеры использования:
1. Если нужно сослаться на значение A1 предыдущего листа, то пишем:
=ДВССЫЛ(listn()&"!A1")

2. Если нужно сделать ГИПЕРссылку на следующий лист:
=ГИПЕРССЫЛКА(listn(3)&"!A1";"К след. листу >>")[/more]

Но у него есть минус - адрес ячейки не меняется при вставке в соседние, т.е. при вставке из А1 в А2, ссылается все равно на А1. Подскажите, можно ли как-то дописать эту функцию, с учетом вышесказанного?
Автор: metrim
Дата сообщения: 06.08.2009 13:24
Здравствуйте
Стал разбираться с Excel VBA , т.к. возникла неопходимость написать простенькую програмку.
Возникли проблемы и непонимания.
В частности нашёл такой фрагмент кода

Код: Sub Test()
    ChDir ("c:\windows")
    MsgBox (CurDir)
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 06.08.2009 15:16
metrim

Цитата:
С помощью какого приема можно узнать адрес каталога, в котором лежит выполняющийся файл?

выполняющийся файл - это Ваша книга XLS ?
попробуйте так:

Код:
dim iPath as String
iPath = ThisWorkbook.Path & "\"
' iFileName = Dir(iPath & "*.DBF")
MsgBox iPath
Автор: metrim
Дата сообщения: 06.08.2009 15:19

Цитата:
С помощью какого приема можно узнать адрес каталога, в котором лежит выполняющийся файл?

Погуглил и нашёл вроде ответ:

Код: Sub test()
Dim sPath As String
sPath = ActiveWorkbook.Path
MsgBox sPath
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 06.08.2009 15:24


Gunslighter
а может быть макросом это забубенить?.. нажимаем на кнопку - получаем ссылочки в листе на предыдущий лист... можно по всему листу, либо, лучше только по выделенным ячейкам...
И ещё надо решить, что делать с ячейками, где уже что-то есть...

Автор: DagoDuhate
Дата сообщения: 06.08.2009 15:51
Код:
Sub Test()
ChDir ("c:\windows")
MsgBox (CurDir)
End Sub


По идее он должен вернуть в окошке "c:\windows", а все равно возвращает адрес папки "Мои документы"

Declare Function GetWindowsDirectory& Lib "kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpbuffer As String, ByVal nSize As Long)

Sub WinDir()
Dim str As String * 255
Dim wDir As Long
Length = GetWindowsDirectory(str, Len(str))
zDir = Left(str, Length)
MsgBox zDir

End Sub

Возвращает %SYSTEMROOT%, %WINDIR%
Автор: SERGE_BLIZNUK
Дата сообщения: 06.08.2009 19:41

Цитата:
Sub Test()
ChDir ("c:\windows")
MsgBox (CurDir)
End Sub

проверил данный код. работает как часы!
может у Вас на диске C: нет папки WINDOWS ? Или стоит какая-нибудь VISTA/Windows7
которая в этот каталог не даёт зайти?!
Автор: metrim
Дата сообщения: 07.08.2009 01:39
SERGE_BLIZNUK Да нет, попробовал и другие пути подставлять, все равно та же папка


А вот еще вопросец у меня нарисовался: давным давно нужно было сделать интерфейс общения компа с прибором через COM-порт . Нужно было посылать команды текстовые на порт и считывать снего.
Можно ли это реализовать на WIN XP чисто средствами Excel VBA ? или может посоветуете какую нить библиотеку для этого?
Автор: Alexikit
Дата сообщения: 07.08.2009 11:16

Цитата:

Sub Test()
ChDir ("c:\windows")
MsgBox (CurDir)
End Sub
По идее он должен вернуть в окошке "c:\windows", а все равно возвращает адрес папки "Мои документы"


Имела туже проблему при написании кода просто на VB, даже задавала

Код:
ChDrive ("D")
ChDir ("D:\Blade")
Автор: TeHNoSaL
Дата сообщения: 08.08.2009 17:03
Здравствуйте!Помогите плиззз.Есть книга, в ней порядка 500-900 листов, необходим макрос(я так полагаю), чтобы изменения даты например автоматически изменяла дату на остальных листах.

Добавлено:
проще говоря копировал значение ячейки а1 на все остальные листы?в ячейку допустим а3...(не столь важно)
Автор: SERGE_BLIZNUK
Дата сообщения: 08.08.2009 20:42
скопировать значение или вставить формулу (ссылку), чтобы все ячейки ссылались на значение ячейки A1 (тогда, если изменить значение в ячейке A1 оно автоматически поменяется на всех листах)?

вот код копирующий то, что находится в ячейке A1 первого листа книги во все остальные листы в ячейку A3:

Код:
Sub CopyA1toAllPages()
Dim v As Variant, i&

v = [a1]
For i = 2 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).Cells(3, "A").Value = v
Next i

End Sub
Автор: Natavanka
Дата сообщения: 10.08.2009 17:22
Всем привет!
Люди добрые, помогите, пожалуйста, написать макрос для расчета количества уникальных отфильтрованных записей (при включенном автофильтре).
Имеется таблица с текстовыми данными, включен автофильтр одновременно в нескольких столбцах. Нужно, чтобы в какую-нибудь ячейку выводилось кол-во отфильтрованных УНИКАЛЬНЫХ записей по первому столбцу.
Пробовала функцию =СУММПРОИЗВ((ЧАСТОТА(ПОИСКПОЗ(A4:A600&"";A4:A600&"";0);ПОИСКПОЗ(A4:A600&"";A4:A600&"";0))>0)*ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;СМЕЩ(A4;СТРОКА(A4:A601)-СТРОКА(A4);))), но, к сожалению, она работает некорректно, то верные результаты выдает, то нет... Никак не могу понять ее логику... почему и где она "спотыкается"...
Может можно макросом, и так, чтобы наверняка?
Заранее спасибо!
Автор: SAS888
Дата сообщения: 11.08.2009 12:00
Natavanka
Следующий макрос выведет в окне сообщений количество уникальных видимых (после работы автофильтра) ячеек в столбце "A", за исключением заголовка столбца.

Код: Sub Main()
Dim x As New Collection, Cell As Range: On Error Resume Next
For Each Cell In Intersect(ActiveSheet.UsedRange, [A:A].SpecialCells(xlCellTypeVisible))
If Cell <> "" Then x.Add Cell.Value, CStr(Cell.Value)
Next
MsgBox x.Count - 1
End Sub
Автор: Igor_Paseka
Дата сообщения: 11.08.2009 20:21
Помогите! Очень нужно.
Есть форма с TextBox в который вводится текст. Этот текст потом должен вставится в определенную ячейку конкретной ширины . Если он не вмещается то остаток текста нужно перенести в ячейку под даной, разрывая текст только по словам . Если и в нее не влазит то перенести в следующую ячейку и так до тех пор пока весь текст не будет размещен в ячейках.
Автор: SAS888
Дата сообщения: 12.08.2009 04:44
Igor_Paseka
Пусть есть пользовательская форма UserForm1, пусть в форме есть TextBox1 и пусть данные из этого TextBox-а требуется вставить в столбец "A" активного листа, начиная с 1-й строки, согласно Вашим требованиям. Эту задачу решит следующий макрос:

Код: Sub TextBoxToCells()
Dim i As Integer, j As Integer, Temp As String, txt As String, a
a = Split(UserForm1.TextBox1.Text, " ")
If UBound(a) < 0 Then Exit Sub
Temp = a(0): j = 1: [A:A].ClearContents
For i = LBound(a) + 1 To UBound(a)
txt = Temp & " " & a(i)
If Len(txt) > Int([A:A].ColumnWidth) Then
Cells(j, 1) = Temp: j = j + 1: Temp = a(i)
Else: Temp = txt
End If: Next
Cells(j, 1) = Temp
End Sub
Автор: Igor_Paseka
Дата сообщения: 12.08.2009 13:15
Спасибо за ответ!
Но есть одно но. У вас каждое слово переносится в другую ячейку, а мне нужно другое. Если ширина ячейки позволяет то в одну ячейку нужно вставить столько слов сколько можно в нее вставить.
Жду решений.
Автор: zlaja kompanija
Дата сообщения: 12.08.2009 14:05
Есть такая задачка: есть файл екселя, и его надо пометить кодом. Код представляет из себя число пятизначное. Не подскажите как его в какие-нибудь свойства файла записать можно программно на vba? Или может еще куда, главное чтобы пользователь его в книге не видел нигде.
Автор: ecolesnicov
Дата сообщения: 12.08.2009 16:28
zlaja kompanija
Существует 3 возможности:
1) Использовать доп. свойства рабочей книги - в VBA они управляются CustomDocumentProperties для доп. свойств и BuiltinDocumentProperties для стандартных свойств. Минус - что пользователь их таки может увидеть, через меню (файл, свойства, доп. свойства), плюсы - можно их смотреть и не открывая файл, по ним можно искать в винде или давать Search в VBA по ним не открывая и пр.
2) Вставить доп. лист в книгу и установить у него свойство Visible в значение xlSheetVeryHidden - после этого лист будет невидим, но не просто не видим, как другие листы, а в том числе его невозможно будет открыть через меню excel-я - только программно из кода или из окна VBA. Соответственно все, что вы введете на такой странице будет недоступно пользователю.
3) Еще можно установить в Protected ячейку и защитить лист - соответственно содержимое ячейки видно не будет. Если protected поставить с паролем не известным юзеру - то он и не сможет увидеть. Это все также из VBA управляется.
Автор: zlaja kompanija
Дата сообщения: 12.08.2009 17:27
ecolesnicov, спасибо. У нас просто есть софтинка, она генерит электронные бланки в екселе. Они отправляются по почте потом. Следующим этапом, юзвери их заполняют и отправляют обратно. Затем в отлуке есть кнопка - все атачи скопировать в папку отдельную. Затем, как раз таки эта же софтинка, должна найти нужную запись в своей базе и обновить файл. Я попробывал через скрытую страницу - долго это. Файл нужно по оле открыть, считать нужную ячейку и обратно закрыть, зато + - пользователь ничего не изменит. Также разобрался с DSOFile - все просто летает, но есть минус - пользователь может открыть и тупо значение свойства сменить. Поэтому я сделал так - код пишу в Title через DSOFile. Файл отправляю, получаю - ищу по коду. Если пользователь вдруг код изменит, то нужная мне запись не найдется. Тогда софтинка включает поиск по оле, с октрытием файл и считыванием нужного значения. Потестирую на практике, сколько пользователей реально будут что-то изменять
Автор: SAS888
Дата сообщения: 13.08.2009 05:03
Igor_Paseka

Цитата:
У вас каждое слово переносится в другую ячейку

Нет. Все как раз так, как Вы требовали. Посмотрите пример файла Здесь.
Попробуйте вводить разные строки в TextBox или поизменять ширину столбца "A".
Автор: filemoto
Дата сообщения: 13.08.2009 10:31
Прошу помочь в следующем вопросе,
есть файл xls, я вношу записи, применяю макрос к обработке, и мне нужно это файл сохранить в csv.
Я его сохраняю, и всё, мой изначальный файл уже становится как csv.
А как можно в макросе сделать, чтобы нужны мне диапазон выгружался в csv в самостоятельный файл, без изменения первоначального источника (xls-файла).

Уже заманался постоянно закрывать - открывать файл xls.
Автор: SAS888
Дата сообщения: 13.08.2009 12:09
filemoto

Цитата:
чтобы нужны мне диапазон выгружался в csv в самостоятельный файл, без изменения первоначального источника (xls-файла)

Следующий макрос создаст файл "test.csv" в той же директории, что и xls- файл с этим кодом и выгрузит в него данные из диапазона "A1:D10".

Код: Sub Main()
Dim ts As Object, i As Long, j As Long, s As String
Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile("test.csv", 2, True)
For i = 1 To 10
For j = 1 To 4: s = s & ";" & Cells(i, j): Next
If Len(s) > 1 Then s = Right(s, Len(s) - 1)
s = s & Chr(10): ts.Write s: s = ""
Next
ts.Close
End Sub
Автор: dneprcomp
Дата сообщения: 13.08.2009 19:35
filemoto SAS888
А может так?
Код: ChDir "C:\"
ActiveWorkbook.SaveAs Filename:= "C:\11.csv", FileFormat:=xlCSV, CreateBackup:=False
Автор: SAS888
Дата сообщения: 14.08.2009 04:37
dneprcomp

Цитата:
А может так?

Может и так. Но, как я понял, во-первых, автор хочет, чтобы после этой процедуры продолжать работать не в созданном файле, а в том, который был до сохранения. Во-вторых, требуется
Цитата:
чтобы нужны мне диапазон выгружался в csv в самостоятельный файл
Т.е. не весь лист с данными, а определенный диапазон.
Автор: dneprcomp
Дата сообщения: 14.08.2009 07:19
SAS888
А, точно. Ты прав. Диапазон и работу после я и пропустил.
Впрочем, можно добавить выделение нужной области перед сохранением и поменять параметер для FileFormat.

Range("C3:F13").Select
ChDir "C:\"
ActiveWorkbook.SaveAs Filename:= "C:\11.csv", FileFormat:=xlCSVMac, CreateBackup:=False

Правда, короче - не всегда лучше
Автор: Maxximus75
Дата сообщения: 15.08.2009 20:47
Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian.

Есть программа в Excel VBA которая экспортирует данные в текстовый файл. Как экспортировать с помощью макросов в текстовый файл с кодировкой UTF-16 LE/UCS-2 Little Endian, или как средствами excel экспортнуть в txt с данной кодировкой.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.