Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как, с помощью VBA, обратиться к документу через имя файла Word из Excel?
 
Неработает нифига, пишет "Name argument not found". Хотя документ открыт и называется от точно так как написано.
Как, с помощью VBA, обратиться к документу через имя файла Word из Excel?
 
В том то и дело что говорит что такого нет, хотя в соседнем окошке он есть. Может он просто глючит у меня?
Как, с помощью VBA, обратиться к документу через имя файла Word из Excel?
 
Доумент не новый, и ворд у меня 2007. И насчёт запятой не понял, ниразу ещё не встречал такого приема, ща попробую конечно.
Как, с помощью VBA, обратиться к документу через имя файла Word из Excel?
 
Нужно сделать так что бы из exel отправить word-овский документ по мылу. Делаю вот так  
 
Dim obj As Object  
Set obj = GetObject("Word.Application")  
Email = Cells(1, 3).Text  
obj.Documents("Ïðåçåíòàöèÿ.doc").SendMail Recipients:=Email  
 
он мне пишет что типа неверное имя файла, хотя оно точно совпадает с открытым файлом. И можно ли посредством exel ещё и тело письма прописать, только у меня нет оутлука а есть только мозила. Смысла файл присылать нет так как весь код перед вами и ошибка только в последней строке.
Заставить отправить сообщение с вложенным документом
 
Нужно сделать так что бы из exel отправить word-овский документ по мылу. Делаю вот так  
 
Dim obj As Object  
Set obj = GetObject("Word.Application")  
Email = Cells(1, 3).Text  
obj.Documents("Ïðåçåíòàöèÿ.doc").SendMail Recipients:=Email  
 
он мне пишет что типа неверное имя файла, хотя оно точно совпадает с открытым файлом. И можно ли посредством exel ещё и тело письма прописать, только у меня нет оутлука а есть только мозила. Смысла файл присылать нет так как весь код перед вами и ошибка только в последней строке.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Ну во первых возможно у вас стоит формат дат через запятую, во вторых было очь трудно редактировать в блокноте CSV ( не очень читабельно) кстати он ведь не только расспознаёт месяцы и дни но ещё и месяцы года, там в кухнях почти всё в датах.Как внешний источник это конечно можно, нужно попробовать.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
эмммммм сайт .csv не хочет грузить говорит что формат такой незя загружать, ча запакую в архив.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Вот пример. правда блокнот только в txt сохраняет.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Кстати вопрос, просто стерев расширение .csv и написав .ТХТ будет достаточно или всё таки придётся какие то сторонние программы дополнительно ставить?
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Михаил, да действительно работает спасибо конечно. Вот только блин столько костылей из за того что бы просто программа не делала то что её не просят. Сейчас получается нужно сначала цсви формировать, потом переименовать в тхт потом макросом перевести в эксель, потом макросом заменить точки на запятые(или наоборот), потом вернуть в числовой формат(потому что мне нужно вычислять всё это дело), и только потом начать работать с файлом. И при всём при том всё это делать с 30000-ми строк кода,которое займёт время несомненно. Спасибо конечно, но я всё таки надеялся что я просто не заметил галочки для отключения функции, и что кто то укажет на неё.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
{quote}{login=KuklP}{date=25.10.2010 05:55}{thema=}{post}Аноним, Вы правила читали? 1,5мб! Круто. Цитирую себя:"Вы бы выложили пример .csv файла." И на будущее... Я анонимам не отвечаю.{/post}{/quote}  
Эммммм а в чём разницо особенно то между .CSV или .xls? ексель не видит разници, А анонимным был потому что на работе писал и когда дописал(писал долго) то слетела рега, я кстати даже не заметил. Ща файл выслать не могу дома потому что. А вообще для примера если хотите сами проверить то создайте файлик в какой нибудь не эксель проге и там пропишите 12,09 и 12.09 что бы ваши настройки системы обойти. И посмотрите что будет.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Эх я думал всё таки кто то поможет((((  
Ну во первых знаки кроме запятой или точки не подходят. Почему не подходят? Да они работают, но как потом человек будет смотреть данные? Выглядеть то будет не айс. Второе насчёт примера, а зачем пример если всё генерируется автоматически и программно и числа например 12,09(м2) превращаются в 12сен. Кстате здесь кроется ответ на предложение про текстовый формат, файл создаётся автоматом а в эксель автоматом стоит общий тип. Вариант как то где то в настройках поставить что бы по умолчанию был текстовый формат, но я не знаю как. И вообще охота было бы вырезать эту функцию из экселя, охота матом ругаться на того дибила который сделал автоопредиление дат и не сделал маааааааленькой галочки отключения. Есть вариант перекодировать всё в текст и будут 4-х значные коды дат, а потом макросом перегнать в какой нибудь другой формат например с точкой. Но как представлю объём кода мне становится не хорошо да и вообще не рентабельно это, проще наверное конфиги перелопатьтить попробоватьт (  хоть и противоречит лицензии). Да и кста про даты уже с 2003 экселя  эта функция портит жисть.
Как отключить преобразование дробей в даты при выгрузке данных в таблицы
 
Выгружаю файл из базы, программно. Изменить процедуру выгрузки или формат нельзя. При выгрузке создаёт .csv файл. Я открываю файл с помощью Excel и, блин, он преобразовывает все дроби похожие на дату в дату.    
Вариант поставить в настройка exсel вместо точки запятую, как разделитель дроби, не прокатывает, так как есть файлы в которых дроби с запятой, и тогда они будут в таком же состоянии.    
 
 
Подскажите, как раз и навсегда сделать так, чтобы точка прекратила превращать числа в даты?  
 
Подойдёт, как вариант, пример макроса, которым потом можно будет всё вернуть на свои места (превратить даты в дроби).
Передать из массива в массив
 
{quote}{login=Hugo}{date=17.09.2010 12:54}{thema=}{post}Работает:  
 
Sub tt()  
Dim Выборка, Выборка1  
Выборка1 = [a1:a4]
Выборка = Выборка1  
[b1:b4] = Выборка
End Sub{/post}{/quote}  
 
А у меня не сработало(((( (мой пример)    
Не ну может просто я что то непрально объявил, тогда тему просто считаю закрытой. спасибо
Передать из массива в массив
 
Проблему решил другим способом, просто сделал массив вида Массив(а,б,в)  
Но хотелось бы знать на будущее, решение такого вопроса как передать все значения массива в другой массив, не перебором
Передать из массива в массив
 
Проблема наверное тривиальна но решить не могу никак, уже весь моск сломал  
Есть два массива(вернее 6) так вот мне нужно сделать так  
 
Выборка = Выборка1  
 
"Выборка" и "Выборка1" объявленные одинаковые по размерности массивы вида (x,y) так вот после строки которой я написал у меня массив "Выборка" = empty. Причём никаких ошибок не выводится, но и результат естественно никакой. В чём проблема как решить?
отключить формулы через VBA
 
Ну да иногда использую латынь так как удобно действительно))) просто "X" это уже явно переменная и не запутаешься)))) Но я думаю что это больше ноливар.  
 
Блин так много разных вещей для себя узнаю.... и просто не понимаю людей которые говорят что знают по несколько языков. Я думаю ток один можно знать)))))))))  
 
Ща ещё по колдую над кодом в свободное время может ещё улучшу чего нить))))0
отключить формулы через VBA
 
Восхитительно)))) Взял код Казанского, тестил на тех же условиях что и Hugo и свой код. И о чудо)))) всего 35,73)))))))) Но так как написано для меня непривычно поэтому пока что смутно представляю как работает. Ну я понимаю что я плохой программер потому что я использую кириллицу в названиях переменных, но не могу ничего с собой поделать)))) Поэтому мне сложно воспринимать код в котором переменные на английском. Просто когда переменные на русском то сразу видно что перед тобой переменная или функция а то бывает не понятно толи это переменную назвали допустим aaArr толи это спец константа)))))))(Я знаю что это массив)
отключить формулы через VBA
 
я прислал пример из жизни только в 10 раз меньше строк, Файл действительно шаблонный и это мысль которую я упустил)))) Ща попробую второй алгоритм.
отключить формулы через VBA
 
Итак попробовал новый код и сравнил со своим, мой код на моей машине работает за 100,76 код Hugo работает за 57,28 что заметно быстрее. Спасибо за обучение постараюсь извлечь урок))))  
 
З.Ы. Обрабатывалось 22000 строк
отключить формулы через VBA
 
{quote}{login=Казанский}{date=13.09.2010 04:18}{thema=РусНекромант}{post}> А вообще спасибо, жду дискуссию далее  
 
А мы ждем пример с куском данных!  
Кстати, у Вас данные пишутся в существующие файлы. Может, сначала надо почистить данные, которые в них есть?  
Данные пишутся со 2-й строки. В первой строке, наверно, заголовок, причем такой же, как и исходном файле? Может, проще создавать файлы заново, копируя заголовок из исходного файла?{/post}{/quote}  
 
Да отчасти вы правы, но там идёт строки просто, три листа а с 29 колонки идут формулы и графики. Эти файлы дать не могу, сами по себе они пустые поэтому кстати и берутся из одной папки и сохраняются в другую, дать не могу так как не мои наработки может обидеться.  
Файл из которого берётся примерный, прикрепил.(ток без кода)
отключить формулы через VBA
 
{quote}{login=The_Prist}{date=13.09.2010 03:52}{thema=}{post}В общем у меня получилось бы нечто такое:  
 
Private Sub CommandButton5_Click()  
   Dim i As Long, a As Integer, Имя As String, новаяКнига As Workbook, n As Integer  
   Dim z As Integer, v As Integer, b As Integer  
   Application.DisplayAlerts = False  
   Application.Calculation = xlManual  
   Application.ScreenUpdating = False  
   Район = Array("Адмиралтейский", "Василеостровский", "Всеволожский", "Выборгский", _  
                 "Калининский", "Кировский", "Колпинский", "Красногвардейский", _  
                 "Красносельский", "Крондштатский", "Курортный", "Московский", _  
                 "Невский", "Павловский", "Петроградский", "Петродворцовый", _  
                 "Приморский", "Пушкинский", "Фрунзенский", "Центральный")  
 
   For n = 0 To 19  
       Имя = "C:\Users\a.voloschuk\Desktop\Маркетинговые отчеты по рынку\" & Район(n) & " район, отчет.xls"  
       Set новаяКнига = Workbooks.Open(Имя)  
       z = 2: v = 2: b = 2  
       For i = 2 To 50000  
           Dim lVal As Long, vCellVal  
           For a = 1 To 29  
               vCellVal = Лист1.Cells(i, 5).Value  
               If ЛvCellVal = 1 Then  
                   lVal = v: v = v + 1  
               ElseIf vCellVal = 2 Then  
                   lVal = v: b = b + 1  
               ElseIf vCellVal = 3 Then  
                   lVal = z: z = z + 1  
               End If  
               новаяКнига.Sheets(3).Cells(lVal, a) = Лист1.Cells(i, a)  
           Next a  
       Next i  
       новаяКнига.SaveAs Filename:=Имя, FileFormat:=xlExcel8  
       ActiveWorkbook.Close True    'Хотя можно и False, т.к. это только что сохраненная книга  
   Next n  
   Label13.Caption = "Игого"  
   MsgBox ("Игого го го")  
   Application.DisplayAlerts = True  
   Application.Calculation = xlAutomatic  
   Application.ScreenUpdating = True  
End Sub{/post}{/quote}  
 
Круто))) всё таки чем  больше изучаю тем больше понимаю что нифига не знаю))))) но а если по существу то этот код работать не будет я же недаром написал  
 
For i = 2 To 50000  
If Лист1.Cells(i, 6) = Район(n) Then  
If Лист1.Cells(i, 5) = 1 Then  
For a = 1 To 29  
новаяКнига.Sheets(1).Cells(v, a) = Лист1.Cells(i, a)  
Next a  
v = v + 1  
Else  
If Лист1.Cells(i, 5) = 2 Then  
For a = 1 To 29  
новаяКнига.Sheets(2).Cells(b, a) = Лист1.Cells(i, a)  
Next a  
b = b + 1  
Else  
If Лист1.Cells(i, 5) = 3 Then  
For a = 1 To 29  
новаяКнига.Sheets(3).Cells(z, a) = Лист1.Cells(i, a)  
Next a  
z = z + 1  
End If  
End If  
End If  
End If  
Next i  
 
у меня данные распределяются по трём листам в зависимости от двух выполненых условий. Насчёт elseif согласен, просто ступил)))) Насчёт переборки массива, я подозреваю что лучше, но познания массивов очень маленькие так что не стал заморачиваться.    
 
{quote}Почему не через find(), а перебор каждой ячейки?  
Почему нельзя явно присвоить значения диапазону ячеек?  
новаяКнига.Sheets(1).range(Cells(v, 1),cells(v,29)) = Лист1.range(Cells(i, 1),cells(i,29)){/quote}  
 
просто не знал что так можно, думал что только с активными ячейками прокатывает.  
 
Переменную "имя" использовать нельзя, так как файлы совсем в другую дирректорию сохраняются если вы не заметили.  
 
цикл до 50000 используется для запаса вы правы это плохое решение, их там 40000  
да действительно было бы уместно Do while loop или что то вроде    
 
if Val(лист1.cells(i,1))=0 then i = 50000  
 
Насчёт select case Вроде как медленнее работает чем If? Чисто из за этого If и использую.  
 
насчёт этого    
 
For i=Lbound(Район) to Ubound (Район) 'т.е. для значений i от наименьшего значения индекса в массиве до наибольшего значения индекса в массиве  
Район(i)=""  
Next i  
 
всегда думал что явное указание быстрее чем цикл, поэтому не делал. Да и к тому же делается это один раз так что мне проще было тупо копирнуть кусок кода сверху))))  
 
А вообще спасибо, жду дискуссию далее так как некоторые моменты не ясны, например массивы Hugo ))))))
отключить формулы через VBA
 
Hugo  
 
Возможно ты прав вот код скажи где его можно улучшить, при всём при том что он создаёт в процессе 20 файликов  
 
Private Sub CommandButton5_Click()  
Dim z As Integer, i As Long, a As Integer, x(1) As String, Имя As String, новаяКнига As Workbook, n As Integer, c As Integer, y As Integer  
Dim v As Integer, b As Integer, k As Integer  
Application.DisplayAlerts = False  
Application.Calculation = xlCalculationManual  
Район(0) = "Адмиралтейский"  
Район(1) = "Василеостровский"  
Район(2) = "Всеволожский"  
Район(3) = "Выборгский"  
Район(4) = "Калининский"  
Район(5) = "Кировский"  
Район(6) = "Колпинский"  
Район(7) = "Красногвардейский"  
Район(8) = "Красносельский"  
Район(9) = "Крондштатский"  
Район(10) = "Курортный"  
Район(11) = "Московский"  
Район(12) = "Невский"  
Район(13) = "Павловский"  
Район(14) = "Петроградский"  
Район(15) = "Петродворцовый"  
Район(16) = "Приморский"  
Район(17) = "Пушкинский"  
Район(18) = "Фрунзенский"  
Район(19) = "Центральный"  
k = 1  
For n = 0 To 19  
Имя = "C:\Users\a.voloschuk\Desktop\Маркетинговые отчеты по рынку\" & Район(n) & " район, отчет.xls"  
Set новаяКнига = Workbooks.Open("C:\Users\a.voloschuk\Desktop\Маркетинговые отчеты по рынку\Маркетинговые отчеты по рынку\" & Район(n) & " район, отчет.xls")  
z = 2  
v = 2  
b = 2  
For i = 2 To 50000  
If Лист1.Cells(i, 6) = Район(n) Then  
   If Лист1.Cells(i, 5) = 1 Then  
       For a = 1 To 29  
           новаяКнига.Sheets(1).Cells(v, a) = Лист1.Cells(i, a)  
       Next a  
       v = v + 1  
   Else  
       If Лист1.Cells(i, 5) = 2 Then  
           For a = 1 To 29  
               новаяКнига.Sheets(2).Cells(b, a) = Лист1.Cells(i, a)  
           Next a  
           b = b + 1  
       Else  
           If Лист1.Cells(i, 5) = 3 Then  
               For a = 1 To 29  
                   новаяКнига.Sheets(3).Cells(z, a) = Лист1.Cells(i, a)  
               Next a  
               z = z + 1  
               End If  
               End If  
   End If  
End If  
Next i  
Windows(новаяКнига.Name).Activate  
ActiveWorkbook.SaveAs Filename:=Имя, FileFormat:=xlExcel8  
ActiveWorkbook.Close saveChanges:=True  
Next n  
Район(0) = ""  
Район(1) = ""  
Район(2) = ""  
Район(3) = ""  
Район(4) = ""  
Район(5) = ""  
Район(6) = ""  
Район(7) = ""  
Район(8) = ""  
Район(9) = ""  
Район(10) = ""  
Район(11) = ""  
Район(12) = ""  
Район(13) = ""  
Район(14) = ""  
Район(15) = ""  
Район(16) = ""  
Район(17) = ""  
Район(18) = ""  
Район(19) = ""  
Label13.Caption = "Игого"  
MsgBox ("Игого го го")  
Application.DisplayAlerts = True  
Application.Calculation = xlCalculationAutomatic  
End Sub  
 
Часть где заполяется массив районов а потом удаляется нужна так как на форме несколько кнопок и если я не закрываю форму явно то значения не обнуляются , что неприемлемо. Если действительно можно улучшить прошу коменты.
отключить формулы через VBA
 
Всё шикарно это то что было нужно. огромное спасибо. Считаю тему закрытой
отключить формулы через VBA
 
У меня есть файлик с данными, из него тупо копируются определённые ячейки во второй файл. Во втором файле уже прописана формула по которой считается некий результат, на основе ячеек которые переданы из первого файла. Так вот всё работает я всё сделал но блин это очень долго делается. Я так понимаю это из за того что запускается каждый раз Sub Worksheet_Calculate и отбирает время, а так как у меня 40000 строк по 29 ячеек то вы понимаете насколько долго (полтора часа занимает) при всём при том что если я делаю похожую операцию но без формул получается около 10 мин. Мне нужно на время работы программки отключить выполнение (ну не знаю как назвать) формул в книге, а потом когда все ячейки скопируются включить формулы. вариант с тем что бы удалить их а потом опять вставить непрокатит так как сложно это и опять же будет долго, быстрее но долго.
Сохранение книги с заданным форматом
 
Спасибо, очень помогли.
Сохранение книги с заданным форматом
 
Итак у меня есть файл с двуля листами, по определённому запросу выбирается информация с листов и записывается в новую книгу которая была создана посредством VBA. Далее мне нужно сохранить её в формате Exel 2003. Всё замечательно было бы если бы у меня был тоже 2003 но так как у меня 2007 то получается я сохраняю файл в формате 2007 экселя с расширением .XLS.  
 
Вот код:  
Первая версия  
Имя = "C:\Users\a.voloschuk\Desktop\Запросики\" & Комнатность(0) & "-" & Комнатность(1) & " для " & ComboBox4.Value & ".xls"  
Set новаяКнига = Workbooks.Add  
...................  
.............  
............  
Windows(новаяКнига.Name).Activate  
ActiveWorkbook.SaveAs Filename:=Имя  
ActiveWorkbook.Close saveChanges:=True  
 
Вторая версия  
Имя = "C:\Users\a.voloschuk\Desktop\Запросики\" & Комнатность(0) & "-" & Комнатность(1) & " для " & ComboBox4.Value  
Set новаяКнига = Workbooks.Add  
...................  
.............  
............  
Windows(новаяКнига.Name).Activate  
ActiveWorkbook.SaveAs Filename:=Имя, FileFormat:=".BIFF8" 'неработает и даж если пишу .xls  
ActiveWorkbook.Close saveChanges:=True  
 
Ещё забыл написать что всё это должно быть автоматически, тоесть не подходит если будет вылетать окно с выбором формата и тд и тп
Эмм... Связывание строк
 
Спасибо очень помогли))) я же знал что что то подобное есть так как задача типовая.
Эмм... Связывание строк
 
Я не знаю правильно ли тема звучит, просто не придумал ничего другого. Итак у меня есть лист1 и лист2, на листе1 есть табличка с данными в первом столбце нап=именование в последующих параметры наименования. На втором листе в первом столбце можно выбрать из комбобокса наименование, и нужно что бы выбрав наименование всё остальное тоже выбралось и в соответствующие ячейки копирнулось. Как это сделать? Я сделал сейчас это тупо и неудобно... вот так:  
 
=ЕСЛИ(D35='Форма загрузки'!$A$11;'Форма загрузки'!$B$11;ЕСЛИ(D35='Форма загрузки'!$A$12;'Форма загрузки'!$B$12;ЕСЛИ(D35='Форма загрузки'!$A$13;'Форма загрузки'!$B$13;ЕСЛИ(D35='Форма загрузки'!$A$14;'Форма загрузки'!$B$14;ЕСЛИ(D35='Форма загрузки'!$A$15;'Форма загрузки'!$B$15;ЕСЛИ(D35='Форма загрузки'!$A$16;'Форма загрузки'!$B$16;ЕСЛИ(D35='Форма загрузки'!$A$17;'Форма загрузки'!$B$17;ЕСЛИ(D35='Форма загрузки'!$A$18;'Форма загрузки'!$B$18;ЕСЛИ(D35='Форма загрузки'!$A$19;'Форма загрузки'!$B$19;ЕСЛИ(D35='Форма загрузки'!$A$21;'Форма загрузки'!$B$21;ЕСЛИ(D35='Форма загрузки'!$A$22;'Форма загрузки'!$B$22;ЕСЛИ(D35='Форма загрузки'!$A$23;'Форма загрузки'!$B$23;ЕСЛИ(D35='Форма загрузки'!$A$26;'Форма загрузки'!$B$26;ЕСЛИ(D35='Форма загрузки'!$A$27;'Форма загрузки'!$B$27;ЕСЛИ(D35='Форма загрузки'!$A$28;'Форма загрузки'!$B$28;ЕСЛИ(D35='Форма загрузки'!$A$29;'Форма загрузки'!$B$29;ЕСЛИ(D35='Форма загрузки'!$A$30;'Форма загрузки'!$B$30;ЕСЛИ(D35='Форма загрузки'!$A$31;'Форма загрузки'!$B$31;ЕСЛИ(D35='Форма загрузки'!$A$33;'Форма загрузки'!$B$33;ЕСЛИ(D35='Форма загрузки'!$A$34;'Форма загрузки'!$B$34;ЕСЛИ(D35='Форма загрузки'!$A$35;'Форма загрузки'!$B$35;ЕСЛИ(D35='Форма загрузки'!$A$36;'Форма загрузки'!$B$36;ЕСЛИ(D35='Форма загрузки'!$A$37;'Форма загрузки'!$B$37;ЕСЛИ(D35='Форма загрузки'!$A$39;'Форма загрузки'!$B$39;ЕСЛИ(D35='Форма загрузки'!$A$40;'Форма загрузки'!$B$40;"")))))))))))))))))))))))))  
 
хочу сделать лучше, может быть кто то подскажет. Вариант насчёт VBA и тупо перебора каждой ячейки, сравнения, и копирования не подходит так как в принципе тоже самое и кода немеренно. Хотя в принципе я многого не знаю так что пишите любые предложения я всё попробую и всё обсудим
Страницы: 1
Наверх