Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323

Must have startup form or Sub Main() - Должен иметь начальную форму или Sub Main

20.05.2012, 07:09. Показов 5118. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, никогда так ранее не делал, нужно скомпилировать проект, который без формы
вставил код, компилирую, получаю отлуп:
Must have startup form or Sub Main() - Должен иметь начальную форму или Sub Main
и появляется окно Параметры проекта, ничего там ввести я не смог, кнопка ОК не помогает
появляется то же сообщение Must have startup form or Sub Main()
как это лечится?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2012, 07:09
Ответы с готовыми решениями:

Ошибка no main class (заголовок com/javafx/main/Main) на другом компьютере
У меня возникла такая проблема. Если я создаю пример JavaFX приложения в Netbeans и компилирую его как устанавливаемый exe (Installing...

Int main или main
нужно ли писать int main? если в функции main есть всё необходимое.

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include <iostream> #include <math.h> using namespace std; int main() {double a, b, x; ...

23
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 09:35
Там же написано - процедурой
Миниатюры
Must have startup form or Sub Main() - Должен иметь начальную форму или Sub Main  
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 11:29  [ТС]
подскажите пжл как из ВБА в ВБ перевести строку
Visual Basic
1
Dim isTable As Word.Range
если создан объект
Visual Basic
1
2
Dim ObjectWord As Object
    Set ObjectWord = CreateObject("Word.Application")
если так: Dim isTable As ObjectWord.Range - выеживается
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 12:34
Range объект документа, но не приложения
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 12:38  [ТС]
что-то так isTable As ObjectWord.ActiveDocument.Range тоже выёживается, как нужно?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 12:39
Его просто пока нет астивного документа.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 12:44  [ТС]
в смысле нет - в Ворде нажму кнопку, а там будет сказано в обработчике нажатия кнопки - Шелл.... и какой именно экзешник скомпилированный в ВБ6 - так можно сделать?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 12:52
В смысле ты создал приложение ворда, но документа в нём нет. Надо создать или открыть документ и уже в документе создавать или обращаться к существующей таблице

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Set MyWord = CreateObject("Word.Application")
MyWord.Visible = True
MyWord.Documents.Add '
MyWord.ActiveDocument.SaveAs "C:\blank.doc"
With Selection
'запоменаем место в документе для таблице
Set NewR = .Range
'добавляем таблицу
'создаем таблицу с определенным количеством строк и столбцов
    NR = 3
 .Tables.Add NewR, NR, 4
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 13:02  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
создать или открыть документ
а с открытым как?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 13:03
А с открытым:
Visual Basic
1
  Set MyWord = GetObject(, " Word.Application")
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 13:08  [ТС]
не мой сегодня день

Visual Basic
1
2
3
4
5
6
7
8
9
Dim ObjectWord As Object
    Set ObjectWord = GetObject(, " Word.Application")
 
    'отключаем дёргание экрана при выполнении кода
    ObjectWord.Application.ScreenUpdating = False
 
    '************************
    Dim isTable As ObjectWord.Range
    Set isTable = Selection.Range
Всё равно выёживается, что сейчас не так?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.05.2012, 18:58
Я бы поступил по другому:
Попробовал бы сформулировать задачу, а не свои попытки реализации..

Добавлено через 2 минуты
Я уже устал объяснять, что у приложения нет объекта Range
Range имеется у документа
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
20.05.2012, 20:13  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
Я бы поступил по другому:
Попробовал бы сформулировать задачу, а не свои попытки реализации..
ОК, как всё просто, сейчас в Ворде есть поле, оно должно быть размещено в таблице, щёлкая по нему, запускается макрос на ВБА:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
'защищает от некоторых, трудно уловимых ошибок
'Option - Вариант
'Explicit - Явный
Option Explicit
 
Sub Main()
 
'отключаем дёргание экрана при выполнении кода
Application.ScreenUpdating = False
 
'*********************************************************
'функция (выясняем место нахождения курсора в таблице)
Dim isTable As Word.Range
Set isTable = Selection.Range
 
'условие, если выделено более одной таблицы, тогда ...
If Selection.Tables.Count > 1 Then
MsgBox$ _
                "Программа не может быть продолжена, выделено более одной таблицы", vbOKOnly, _
                "Внимание"
GoTo Конец
'условие, если выделеное находится не в таблице, тогда ...
ElseIf Not isTable.Information(wdWithInTable) Then
MsgBox$ _
                "Программа не может быть продолжена, курсор должен находится в таблице", vbOKOnly, _
                "Внимание"
GoTo Конец
End If
 
'номер таблицы в документе, где расположен курсор
Dim NumberCursorTable As Long
'номер таблицы в документе, где расположен курсор
NumberCursorTable = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
 
'номер строки в таблице, в документе, где расположен курсор
Dim NumberCursorRow As Long
'номер строки в таблице, в документе, где расположен курсор, даже если таблица имеет объединённые ячейки
NumberCursorRow = Selection.Information(wdEndOfRangeRowNumber)
 
'номер столбца, а также ячейки в таблице, в документе, где расположен курсор, даже если ширина столбца, ячейки различается
Dim NumberCursorCell As Long
'номер столбца, то есть ячейки в строке таблицы, в документе где расположен курсор, даже если таблица имеет объединённые ячейки
NumberCursorCell = Selection.Information(wdEndOfRangeColumnNumber)
 
'*********
'2 вариант
 
'номер строки в таблице, в документе, где расположен курсор, даже если таблица имеет объединённые  ячейки
'IntegerCursorRow = Selection.Cells(1).RowIndex
 
'номер столбца, а также ячейки в таблице, в документе, где расположен курсор, даже если ширина столбца, ячейки различается
'IntegerCursorCell = Selection.Cells(1).ColumnIndex
'*********
 
'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
Set isTable = Nothing
'конец функции (выясняем место нахождения курсора в таблице)
'*********************************************************
    
Selection.Delete Unit:=wdCharacter, Count:=1
 
Dim Строка_таблицы_Word As String
 
'************************************************************************
'функция (считывание со строки, ячейки таблицы)
'Range со строки или ячейки таблицы Word
'абзац заменяем на пробел
'заменяем два, три, четыре и более пробелов подряд на один пробел
'удаляем концевую сноску таблицы Word
'заменяем пробел, следом идущую запятую на запятую, то есть, удаляем пробел перед запятой
'заменяем двоеточие, следом идущее двоеточие на двоеточие, то есть удаляем пробел перед двоеточием
 
'здесь при помощи Trim$ откидываем лишние пробелы в начале и в конце строки или ячейки таблицы Word
Строка_таблицы_Word = Trim$(ActiveDocument.Tables(NumberCursorTable).Rows(NumberCursorRow).Cells(NumberCursorCell).Range)
'Debug.Print Строка_таблицы_Word
 
Dim reg As Object
Set reg = CreateObject("vbscript.regexp")
'искать по всему тексту, по умолчанию False - будет найдено только первое совпадение
reg.Global = True
'Chr$(13) это абзац, заменяем его на пробел
reg.Pattern = Chr$(13)
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, " ")
'Debug.Print Строка_таблицы_Word
'+ означает, что заменяем два, три, четыре и более пробелов подряд на один пробел
reg.Pattern = " +"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, " ")
'Debug.Print Строка_таблицы_Word
'Chr$(7) это концевая сноска таблицы Word
reg.Pattern = Chr$(7)
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, "")
'Debug.Print Строка_таблицы_Word
'заменяем пробел, следом идущую запятую на запятую, то есть удаляем пробел перед запятой
reg.Pattern = " ,"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, ",")
'Debug.Print Строка_таблицы_Word
'заменяем пробел, следом идущее двоеточие на двоеточие, то есть удаляем пробел перед двоеточием
reg.Pattern = " :"
Строка_таблицы_Word = reg.Replace$(Строка_таблицы_Word, ":")
'Debug.Print Строка_таблицы_Word
Строка_таблицы_Word = Trim$(Строка_таблицы_Word)
'Debug.Print Строка_таблицы_Word
 
'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
Set reg = Nothing
'конец функции (считывание со строки, ячейки таблицы)
'************************************************************************
 
With ActiveDocument.Tables(NumberCursorTable)
 
'добавить одну строчку в таблице ниже строки где находится курсор
Selection.InsertRowsBelow 1
 
If .Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields.Count = 1 And _
.Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields(1).Type = 70 Then
.Rows(NumberCursorRow + 1).Cells(NumberCursorCell).Range.Text = "Место регистрации: " & .Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Fields(1).Result
Else
.Rows(NumberCursorRow + 1).Cells(NumberCursorCell).Range.Text = "Место регистрации: "
End If
 
.Rows(NumberCursorRow).Cells(NumberCursorCell).Range.Text = Строка_таблицы_Word
 
'переместить курсор в конец строки
Selection.EndKey Unit:=wdLine
End With
 
Beep
 
Конец:
 
'отменяем отключенное ранее дёргание экрана при выполнении кода
Application.ScreenUpdating = True
 
End Sub
нужно этот функционал вставить в ВБ6, скомпилировать, а в Воде просто указать Shell (полный путь к екзешнику), так каков будет код в ВБ6 перед компиляцией?
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
22.05.2012, 02:20  [ТС]
скомпилировал, запускаю с Ворда экзешник
Visual Basic
1
2
3
4
5
Sub Ссылка()
 
Shell ("J:\MACROBUTTON'ы\MACROBUTTON1.exe")
 
End Sub
выёживается, говорит ошибка 429 АктивХ компонент cant create object, как лечится?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.05.2012, 06:51
Варианты строки запуска:

Visual Basic
1
2
Call Shell("C:\911.exe", vbNormalFocus)
Shell "C:\911.exe", vbNormalFocus
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
22.05.2012, 09:36  [ТС]
увы, то же самое
Visual Basic
1
2
'Call Shell("D:\РабочаяПапка\MACROBUTTON1.exe", vbNormalFocus)
Shell "D:\РабочаяПапка\MACROBUTTON1.exe", vbNormalFocus
1 а если не с ворда запускать, тогда то же самое
2 но ведь оно заточено именно из него любимого
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.05.2012, 10:48
Ну тогда не знаю. Я проверил оба варианта. Работают. Правда не из ворда. Просто с басика
Хотя проверил и в ворде. Работает
Visual Basic
1
2
3
Sub qwe()
Shell "C:\911.exe", vbNormalFocus
End Sub
Добавлено через 10 минут
Даже работает так:
Visual Basic
1
2
3
Sub qwe()
Shell "D:\КиРпИчИ\Выгрузка файла из ресурса\911.exe", vbNormalFocus
End Sub
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
22.05.2012, 11:26  [ТС]
если из среды запускать, тогда на этой строке
Visual Basic
1
Set ObjectWord = GetObject(, " Word.Application")
ошибка 429 - Компонент АктивХ не может создать объект
может это что-то даёт?
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
22.05.2012, 14:38
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Visual Basic
1
Set ObjectWord = GetObject(, " Word.Application")
Visual Basic
1
Set ObjectWord = GetObject(, "Word.Application")
2
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,323
22.05.2012, 19:49  [ТС]
спасибо!!!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2012, 19:49
Помогаю со студенческими работами здесь

Exception in thread "main" java.lang.NullPointerException at Main.main
Извините, перемещю в нужный раздел как только найду как это сделать Задание: Создать масив объектов класса, определить значение полей...

[ERROR] id returned 1 exit status | main.c:(text.startup+0xa7):undefined reference to 'WinMain@16'
Здравствуйте. Помогите узнать в чем ошибка. По ходу с компилятором что-то не так. . . использую Dev C++ #include <iostream> ...

Ошибка IntelliJ IDEA Error: Could not find or load main class Main
package lysenko; public class Dog { String name; public static void main(String args) { Dog dog1 = new...

Uncompilable source code at javaapplication36.SwingForma.main(Main.java:29)
package javaapplication36; import java.awt.*; import java.io.*; import java.applet.*; import javax.swing.*; import...

Ошибка: class Main is public, should be declared in a named Main.java
Выдает ошибку- class Main is public, should be declared in a file named Main.java - к коду: // описываем отдельный новый класс class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru