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

» Visual Basic 6

Автор: Inexorabilis
Дата сообщения: 24.10.2003 14:00

Давайте задавать общие вопросы по Visual Basic 6 здесь, а не создавать каждый раз новый топик ради простого или не очень вопроса. А то уж очень много топиков и даже не знаю где спрашивать.

Добавлено
А вопрос собственно такой:
Как в Visual Basic 6 можно скрыть контролы во время редактирования (написания) кода?
Автор: Marvan
Дата сообщения: 12.11.2003 15:08
А ответ такой: никак.
Опиши подробнее какие проблемы вызывают контролы во время редактирования, что их хочется скрыть - может подскажу решение.

Добавлено
Присоеденяюсь к призыву по поводу "общие вопросы по Visual Basic 6 здесь"
Автор: dneprcomp
Дата сообщения: 13.11.2003 00:12
Inexorabilis
Есть один псевдо путь для как-бы скрытия. Вообще не ставить эти контролы на форму, а загружать их в рантайме.
А так, вопрос действительно не совсем понятен.
Автор: ppch
Дата сообщения: 20.11.2003 19:15
А вот у меня по Basic'у какой вопрос, из практики, так сказать

Есть папка, пусть будет C:\Folder
В папке лежит мой файл, т.е. имеем C:\Folder\myfile.ext
Моя прога ассоциирована с разрешением *.ext, т.е. при запуске файла myfile.ext
моя прога автоматически его окрывает, зачитывает и закрывает файл.

После открытия файла myfile.ext юзер нажимает кнопочку "Удалить" и моя прога должна удалить папку C:\Folder вместе со всем его содержимиым.
Под Win98 - проблем нет. А вот под Win2000/XP нифига не получается - винда ругается : " Не удается удалить файл. Там типа ошибка при совместном доступе "

Как это обойти? (Т.е. как все-таки эту папку удалить из моей проги?)

Проблема в том, что винда лочит каталог из которого был открыт файл до тех пор, пока прога не будет закрыта.
Автор: dneprcomp
Дата сообщения: 21.11.2003 02:46
ppch
Так закрой файл перед удалением.
И очисти все переменные об'ектов(если использовал)
Автор: ppch
Дата сообщения: 21.11.2003 10:23
dneprcomp
Файл закрываю.
Насчет всех объектов не уверен, а это точно влияет?
Короче содержимое папки удаляется, а вот сама папка не хочет удаляться...
Автор: dneprcomp
Дата сообщения: 22.11.2003 00:23
ppch
Код в студию
Кусок, где открываешь и чтение/запись. И кусок где закрываешь.
Автор: ppch
Дата сообщения: 24.11.2003 15:52
dneprcomp

Вот открываю и читаю файл:
Public RKFileNo
-----------------
RKFile=Command$
------------------
Dim FileNo As Integer
FileNo = FreeFile
Open RKFile For Input As FileNo
While Not EOF(FileNo)
Line Input #FileNo, tmp
------------------
Wend
Close FileNo

Вот удаляю:
Private Sub cmd_Del_Click()
On Error Resume Next
fs.DeleteFile RealDocPath + "*", True 'RealDocPath - удаляемый каталог с документом
fs.DeleteFolder RealDocPath + "*", True 'fs это CreateObject("Scripting.FileSystemObject")
fs.DeleteFolder RemoveSlash(RealDocPath), True
Unload Me
End Sub

fs.DeleteFolder RealDocPath + "*", True - эта команда никогда не выполняется, ругается что каталог занят приложением
Автор: dneprcomp
Дата сообщения: 25.11.2003 02:19
ppch
А точно ли RealDocPath заканчивается слешом?

А зачем * в 'fs.DeleteFolder RealDocPath + "*", True' ?
Скорее всего, если предположить что
RealDocPath="D:123\"
то пробуешь удалить folder "D:123\*"
А такого фолдера нет. Вот и ошибка выскакивает.

А вот это зачем: 'fs.DeleteFolder RemoveSlash(RealDocPath), True' ?
Уже ведь раз была команда DeleteFolder. Та, что со *.

fs.DeleteFile можно наверное и не делать. True в 'fs.DeleteFolder принуждает к убиению даже не пустые фолдеры.
Автор: ppch
Дата сообщения: 26.11.2003 12:08
dneprcomp


Цитата:
А точно ли RealDocPath заканчивается слешом?

Точно

Пробовал я по разному удалять этот каталог, по этому и куча всяких команд для удаления.

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

Попробую все таки по твему совету закрывать перед удалением все созданные объекты, очищать память. По результатам доложу.
Автор: dneprcomp
Дата сообщения: 26.11.2003 23:07
ppch

Цитата:
Скорее всего, если предположить что
RealDocPath="D:123\"
то пробуешь удалить folder "D:123\*"
А такого фолдера нет. Вот и ошибка выскакивает

А как на счет этого? Скорее всего в лишней звездочке и проблема.
Автор: ppch
Дата сообщения: 02.12.2003 14:11
dneprcomp

Все оказалось очень просто
При вызове программы из проводника (даублкликом по файлу с ассоциированным с ней разрешением) винда устанавливает CurDir на каталог в котором этот файл находиться и ессно его локает

Надо просто менять CurDir перед удалением каталога и тогда все будет ОК

Автор: ppch
Дата сообщения: 10.12.2003 19:06
Вот хочу формочку на печать выводить (не MDI).
PrintForm - ужасная гадость. Может есть что получше?
Очень не хочется самому переводить форму в текстовый формат а потом печатать.
Автор: Marvan
Дата сообщения: 15.12.2003 10:23
Что то тема зачахла. А ведь хорошая тема.

Цитата:
Вот хочу формочку на печать выводить

Могу посоветовать RoboPrint - хорощий ocx для вывода на печать:
DBGrid DataGrid MsFlexGrid MSHFlexGrid vsFlexGrid RichTextBox TextBox Label MaskEdBox ComboBox.Text ListBox ListView Shape LineCheckBox OptionButton MSChart Pictures of PictureBox and Image.

по адресу robocx.com
на CRACKS.AM лежит заветный ключик к нему.

Ну а можно и самостоятельно без ocx - захват изображения окна и отправка на печать.

Есть вопрос: быстрая запись и чтение массива на диск. Массив от 10 000 записей.
Автор: ScorpionS
Дата сообщения: 18.12.2003 15:26
Кто знает решение моей простой проблемы, помогите.
Я создал простой макрос, который позволяет при его запуке сохранить лист в виде html странички.
В ней присутствуют такие строки:
......
With ActiveWorkbook.PublishObjects("Анализ_15450")
.HtmlType = xlHtmlStatic
.Filename = "C:\Анализ\Фирма.htm"
.Publish (False)
End With
.......

При этом, естественно, лист сохраняется в файле с названием Фирма.htm
А что надо сделать, чтобы название создаваемого файла программа брала из определенной ячейки, скажем A1 вместо названия Фирма.
Ну типа чтоб файл имел название Инвест.htm (если в ячейке A1 введено Инвест)
Автор: Marvan
Дата сообщения: 18.12.2003 17:22
.Filename = "C:\Анализ\" & ActiveWorkbook.ActiveSheet.Cells(1, 1).Value & ".htm"

если в ячейке A1 текущего листа введено Инвест, то имя файла будет "C:\Анализ\Инвест.htm"

Вместо ActiveSheet можно указать его по имени: Sheets("Лист1").
Автор: ScorpionS
Дата сообщения: 18.12.2003 18:14
Marvan
Большое спасибо!

В ячейке A1 имеется запись "Фирма А (лицензия 1427)"
Хотелось бы, чтобы в ячейке F1 отображалось только начало этой фразы, а именно "Фирма А".
Как избавиться от слова лицензия я знаю:
=ПОДСТАВИТЬ(A1;"лицензия ";"")

А вот как избавиться от цифр - номера лицензии, они ведь бывают разные (правда всегда четырехзначные). Как указать в этой формуле, чтобы в ячейке F1 игнорировались и цифры тоже или быть может это можно сделать с помощью другой функции?
Автор: ScorpionS
Дата сообщения: 19.12.2003 01:08
Сам задал вопрос, сам и отвечаю (все таки смог допереть)
Следует записать функцию:
=ПОДСТАВИТЬ(A1;ПРАВСИМВ(A1;16);"")
Но это только для данного конкретного случая.
Автор: ScorpionS
Дата сообщения: 19.12.2003 08:59
Существует 4 кнопки: CommandButton1, CommandButton2, и т.д., при нажатии на которые происходят определенные действия. В VBA выглядит это так:

Private Sub CommandButton1_Click()
(определенная функция)
End Sub

Я хочу создать кнопку (например, CommandButton9), при нажатии на которую будут последовательно выполняться действия, как будто бы я нажал сначала 1-ю кнопку, потом 2-ю, затем 3-ю и т.д.

Что мне следует записать в качестве Исходного текста (команды) для этой кнопки (CommandButton9)?
Автор: ppch
Дата сообщения: 19.12.2003 12:11
ScorpionS

Private Sub CommandButton9_Click()
CommandButton1_Click
CommandButton2_Click
...
CommandButton8_Click
End Sub
Автор: ScorpionS
Дата сообщения: 19.12.2003 14:33
ppch
Дело в том, что этот вариант подходит только в случае если все кнопки находяться на одном листе. А в моем случае (пардон, не сказал сразу) все кнопки на разных листах. И поэтому программа ругается. Я так пробовал прежде, чем обратиться на форум. Результат таков:
Compile Error:
Sub or Function not defined

Как конкретизировать местонахождение этих самых кнопок?
Автор: vserd
Дата сообщения: 19.12.2003 16:14
ScorpionS
Offtopic on

Цитата:
А вот как избавиться от цифр - номера лицензии, они ведь бывают разные (правда всегда четырехзначные

=ЛЕВСИМВ(Т(A1);НАЙТИ("лицензия";A1))
и вобще этот вопрос должен задоваться в теме по Excel
offtopic off
Цитата:


Что мне следует записать в качестве Исходного текста (команды) для этой кнопки (CommandButton9)?

1. Вынести действия выполняемые в обработчике кнопок в отдельные процедуры.
2. Объявить эти процедуры с областью видимоcти public
3. В CommandButton1_Click пишешь вызов процедуры 1, в CommandButton9_Click вызов всех процедур, которые тебе нужны.
Автор: ScorpionS
Дата сообщения: 19.12.2003 18:38
Прошу прощения за оффтоп.
vserd
Решение проблемы с
Цитата:
А вот как избавиться от цифр
я сам написал на предыдущей странице. Кстати, к чему эта буква T? И если уж на то дело пошло, то надо не
Цитата:
НАЙТИ("лицензия";A1))
, а НАЙТИ(" (лицензия";A1)), иначе будет отображаться "Фирма (л"

Что касается

Цитата:
CommandButton9_Click

я тоже решил эту задачу, но по другому:
Application.Run "'Имя файла.xls'!Лист1.CommandButton1_Click"
Application.Run "'Имя файла.xls'!Лист2.CommandButton2_Click"
Application.Run "'Имя файла.xls'!Лист3.CommandButton32_Click"
и т.д.
Вроде работает как надо.
Автор: vserd
Дата сообщения: 20.12.2003 09:38
Не спорю, ты ответил, но твое замечание?

Цитата:
Но это только для данного конкретного случая.

А это обобщенное решение

Цитата:
Кстати, к чему эта буква T?

У меня на E2000 RUS Буква Т обозначает функцию перевода в текстовое представление.
Хотя если установить текстовый формат, можно и без нее

Цитата:

И если уж на то дело пошло, то надо не НАЙТИ("лицензия";A1)), а НАЙТИ(" (лицензия";A1)), иначе будет отображаться "Фирма (л"

Да, ты прав, я просто когда тестировал, ввел название без скобок, и как всегда забыл вычесть единицу :((
=ЛЕВСИМВ(Т(A1);НАЙТИ("(лицензия";A1)-1)
Весь смысл в получении строки до ключевого значения.
Автор: GeMini333
Дата сообщения: 20.12.2003 13:46
Здравствуйте!
Не могли бы вы мне подсказать как можно прочитать все IP пакеты присылаемые и отсылаемые с локал.компа.
Заранее большое спасибо!

Добавлено
:)
Автор: mmt
Дата сообщения: 22.12.2003 17:07
Всем прив.
Можно совсем глупый вопрос? Пришлось копаться в скрипте vbs, времени мало, а бейсик я изучал ох как давно, так что помню почти ничего

Проблема в следующем. Есть команда, которая выдает ошибку(да любая) и прога вываливается. Есть ли оператор(али функция Api ) который бы проверил строку команды типа " IfError(************) then " не прекращая программу?
Позарез надо! Проверка должна быть именно в работе проги и от ее резалта будет зависеть ряд переменных и обращение к разным функциям.
Автор: ppch
Дата сообщения: 22.12.2003 18:09
mmt

on error resume next 'Пропускаем все операторы с ошибками без остановки исполнения
...
operator_s_oshibkoy ' Оператор в котором происходит ошибка
...
if Err.Numver = X then
'Обработчик ошибки с номером X
MsgBox Err.Description ' Выводим сообщение об ошибке
end if
.....
on error goto 0 'Отстанов на всех ошибках
Автор: mmt
Дата сообщения: 22.12.2003 19:50
ppch
Спасибо! Причем большое!
Err.Numver можно применить IsEmpty() - аля If IsEmpty(Err.Numver) ****? Просто мне необходимо лишь узнать, выдает ли команда ошибку и при таком раскладе поменять переменную и продолжить скрипт с этой же команды(эта команда должна отработать нормально в конечном итоге - в этом вся суть).
Хелпа по коммандам у меня ессно нет, потому и спрашиваю. MSDN нет тем более
Автор: mmt
Дата сообщения: 23.12.2003 09:01
Старею. Забыл даже это
Цитата:
Err.Numver
. Все понял(вспомнил) и разобрался.
Еще раз спасибо ppch - вовремя и точно.
Автор: filmax
Дата сообщения: 24.12.2003 11:28
Подскажите как в Excel(VBA) искать адреса всех изменнёных ячеек?

Страницы: 123456

Предыдущая тема: DrawGrid - заливка ячеек (Builder) ?


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