Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Ввод данных из одного документа в другой Добавлено: 19.11.09 02:07  

Автор вопроса:  Слава
Существуют два автономных документа (Excel). При открытии обоих вылезают формы для ввода данных(имя, фамилия, адрес и т.д.). Подскажите пожалуйста, как сделать так, чтобы один документ открыл другой, ввел туда в нужные места значения, запустил там макрос и закрыл документ? Если можно с конкретными примерами. Туговато у меня пока с VBA

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #1 Добавлено: 19.11.09 10:10
В первой книге:
  1. Sub Auto_Open()
  2. Dim MyStr As String
  3. MyStr = "HellO! O_o"
  4. Workbooks.Open ("C:\Путь к файлу\ИмяФайла.xls")
  5. Rn = Application.Run("ИмяФайла.xls!MyMacro", MyStr)
  6. Workbooks("ИмяФайла.xls").Close
  7. End Sub


Во второй книге:
  1. Sub MyMacro(MyStr As String)
  2. UserForm1.TextBox1 = MyStr
  3. UserForm1.Show
  4. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Слава



Вопросов: 2
Ответов: 4
 Профиль | | #2 Добавлено: 19.11.09 13:49
Спасибо, но пока не помогло. Второй документ открывается, но в нем все поля пустые. Пока не дотумкать как сделать правильно. Можно более подробный пример с несколькими значениями? Взять данные из 3-4 текстбоксов и вставить в текстбоксы в другом документе

Ответить

Номер ответа: 3
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #3 Добавлено: 19.11.09 14:10
Ну раз
не дотумкать
то
файлы в студию, а то у многих здесь с телепатией проблемы.

Ответить

Номер ответа: 4
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #4 Добавлено: 19.11.09 15:20
Попробую угадать
1. Модули первой книги (в книге должна быть форма Userform1, на ней - TextBox1, TextBox2, TextBox3 и CommandButton1)

Код модуля:
  1. Sub Auto_Open()
  2. UserForm1.TextBox1.Text = "текст1"
  3. UserForm1.TextBox2.Text = "текст2"
  4. UserForm1.TextBox3.Text = "текст3"
  5. UserForm1.Show
  6. End Sub


Код нажатия на кнопку (CommandButton1_click):
  1. Private Sub CommandButton1_Click()
  2. Workbooks.Open ("C:\Путь к второй книге\ИмяКниги.xls")
  3. Rn = Application.Run("ИмяКниги.xls!MyMacro", TextBox1.Text, TextBox2.Text, TextBox3.Text)
  4. Workbooks("ИмяКниги.xls").Close
  5. End Sub


Код модуля во второй книге(в книге должна быть форма Userform1, на ней - TextBox1, TextBox2, TextBox3):
  1. Sub MyMacro(MyStr1 As String, MyStr2 As String, MyStr3 As String)
  2. UserForm1.TextBox1 = MyStr1
  3. UserForm1.TextBox2 = MyStr2
  4. UserForm1.TextBox3 = MyStr3
  5. UserForm1.Show
  6. End Sub

Ответить

Номер ответа: 5
Автор ответа:
 Слава



Вопросов: 2
Ответов: 4
 Профиль | | #5 Добавлено: 19.11.09 19:17
По первому модулю в примере. Я так понимаю, что в данном случае книга сама будет вводить записанный текст, но ведьнужно, чтобы текст считывался из текстбоксов
И если речь идет о двух документах, то одинаковые названия (например UserForm1)сбивают с толку
Создал два одинаковых документа с именем Office и Offise1. Соответственно все имена во втором документе с цифрой 1.

Код самой книги и в первом и во втором документе одинаковый
  1. Private Sub Workbook_Open()
  2. UserForm.Show
  3. End Sub



Код в первой книге
  1. Private Sub cbPrint_Click()
  2. Range("klient") = tbKlient
  3. Range("adres") = tbAdres
  4. Range("telefon") = tbTelefon
  5.  
  6. Workbooks.Open ("D:\Office1.xls")
  7.  
  8. Rn = Application.Run("Office1.xls!MyMacro", tbKlient.Text1, tbAdres.Text1, tbTelefon1.Text)
  9.  
  10. Workbooks("Office1.xls").PrintOut
  11. Workbooks("Office1.xls").Close
  12.  
  13. Sheets.PrintOut
  14. Unload Me
  15. Application.Quit
  16. End Sub


Вторая книга
  1. Private Sub cbPrint_Click()
  2. Range("klient1") = tbKlient1
  3. Range("adres1") = tbAdres1
  4. Range("telefon1") = tbTelefon1
  5. Sheets.PrintOut
  6. Unload Me
  7. Application.Quit
  8. End Sub
  9. Public Sub MyMacro(MyStr1 As String, MyStr2 As String, MyStr3 As String)
  10. UserForm1.tbKlient = MyStr1
  11. UserForm1.tbAdres = MyStr2
  12. UserForm1.tbTelefon = MyStr3
  13. UserForm1.Show
  14. End Sub


Все останавливается на открытии второй книги с пустыми полями для ввода, а VB ругается на строчку
  1. Rn = Application.Run("Office1.xls!MyMacro", tbKlient.Text1, tbAdres.Text1, tbTelefon1.Text)


Я только начинаю влезать в VB, поэтому сразу не пинайте

Ответить

Номер ответа: 6
Автор ответа:
 Слава



Вопросов: 2
Ответов: 4
 Профиль | | #6 Добавлено: 19.11.09 19:24
Еще: то что в этой строчке
  1. Rn = Application.Run("Office1.xls!MyMacro", tbKlient.Text1, tbAdres.Text1, tbTelefon1.Text)


стоят свойства с цифрой 1 (.Text1) видел, менял, но результата не дает

Ответить

Номер ответа: 7
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #7 Добавлено: 20.11.09 12:10
стоят свойства с цифрой 1 (.Text1) видел, менял, но результата не дает
- ошибка у тебя скорее всего из-за этого
и во второй книге не должно быть кода
  1. Private Sub Workbook_Open()
  2. UserForm.Show
  3. End Sub

Ответить

Номер ответа: 8
Автор ответа:
 Слава



Вопросов: 2
Ответов: 4
 Профиль | | #8 Добавлено: 21.11.09 13:39
Вторая книга работает как из-под первой, так и автономно. Как в автономном режиме открыть книгу и увидеть форму, если не будет данного кода?

Ответить

Номер ответа: 9
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #9 Добавлено: 23.11.09 09:36
В том же модуле, где у тебя во второй книге находится MyMacro добавь это:
  1. Sub Auto_Open()
  2. If MyStr1 = "" Then UserForm1.Show
  3. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам