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

Страницы: 1
Как передать в vba диапазон одной ячейки в переменную?
 
Уважаемые форумчане, доброго времени суток.
Подскажите, пожалуйста, почему c диапазоном в одну ячейку код не работает?
Код
Sub test()
Dim Qb As Workbook
Dim Mq()Set Qb = ThisWorkbook
Mq = Qb.Application.Range(Cells(1, 1), Cells(1, 1))
End Sub
Здесь типы получаются разные: range и variant

Код
?typename(Mq)

Variant()
Код
?typename(Qb.Application.Range(Cells(1, 1), Cells(1, 1)))

Range

А когда в диапазоне больше одной ячейки, то код работает:
Код
Sub test1()
Dim Qb As Workbook
Dim Mq()Set Qb = ThisWorkbook
Mq = Qb.Application.Range(Cells(1, 1), Cells(2, 1))
End Sub
Типы остаются без изменений. А ошибки Type mismatch не возникает.
Вставить только значения из закрытой книги
 
Уважаемые форумчане!  
Есть такой вариант копирования данных из закрытой книги:  
Sub Кнопка21_Щелкнуть()  
Dim TempWb As Workbook  
Dim BazaSht As Worksheet  
Dim iPath As String  
With Application  
.ScreenUpdating = False  
.Calculation = xlCalculationManual  
Set BazaSht = ActiveSheet  
iPath = ActiveWorkbook.Path & "\"  
Set TempWb = Workbooks.Open(Filename:="V:\" & "1.xls", UpdateLinks:=False, ReadOnly:=True)  
TempWb.Sheets("Лист1").Range("A13:B6000").Copy Destination:=BazaSht.Range("J7")  
 
TempWb.Close saveChanges:=False  
.Calculation = xlAutomatic  
.ScreenUpdating = True  
End With  
End Sub  
 
Но при этом копируются и форматы тоже.  
Подскажите, пожалуйста - как сделать так, чтобы копировались только значения?  
Вынужден вернуться к теме "вставки только значений" в связи с установкой Excel 2007.  
На выражение    
TempWb.Sheets("Лист1").Range ("A13:B6000").Copy  
BazaSht.Range("J7").PasteSpecial xlValues    
   
Компилятор подчеркивает всю строку красным цветом, а xlValues выделяет синим фоном.  
После заключение xlValues в скобки при запуске программы - пишет "Невозможно получить свойство PasteSpecial класса Range".  
С проставленными аргумнтами PasteSpecial тоже появляется ошибка.    
Подскажите, пожалуйста, что здесь не так?    
Как вставить только значения?
останавливается выполнение процедуры по таймеру
 
Первый раз  файлы открываются, обновляются, сохраняются.  
Но во-второй раз при открытии файла Расчет2.xls процедура останавливается и появляется окно Run Time Error 1004 Method Open of object Workbooks failed  
Подскажите, пожалуйста, «из-за чего это происходит и что делать?»    
 
Sub Кнопка4_Щелкнуть()  
   Dim dTime As Date  
   Workbooks.Open Filename:="D:\" & "Расчет" & ".xls"  
   Application.Run "'Расчет.xls'!Кнопка41_Щелкнуть"  
   ActiveWorkbook.Close (True)  
 
   Workbooks.Open Filename:="D:\" & "Расчет2" & ".xls"  
   Application.Run "'Расчет2.xls'!Кнопка181_Щелкнуть"  
   ActiveWorkbook.Close (True)  
   dTime = Now + TimeValue("00:01:00")  
   Application.OnTime dTime, "Кнопка4_Щелкнуть" ', , True  
 
End Sub
Не работает ЧИСТРАБДНИ в Excel 2007
 
Уважаемые форумчане.  
Подскажите, пожалуйста, как настроить Excel 2007  
У меня в Excel 2003 формула ЧИСТРАБДНИ работает нормально. Пакет анализа включен.  
При открытии того же файла в Excel 2007 формула ЧИСТРАБДНИ выдает в ячейке #ИМЯ?. Пакет анализа включен.  
 
Попробовал заново создать вычисление с формулой ЧИСТРАБДНИ в самом Excel 2007 - заработало. Но тогда придется везде в файле, созданном в 2003 пересоздавать формулу  ЧИСТРАБДНИ.  
При этом заметил следующее. В файле, созданном в 2007 и, открытом потом в 2003 - тоже появляется ошибка. Т.е. получается, что для 2003 и 2007 существуют свои условия создания формул? Есть ли способ сделать так, чтобы файл (с формулой ЧИСТРАБДНИ) 2003 нормально работал в 2007?
передать параметр запроса на обновление из Excel в Access
 
Уважаемые форумчане.  
Подскажите, пожалуйста, как передать параметр из Excel в запрос на обновление Access?
Замена в имени столбца буквы на цифру
 
Уважаемые форумчане.  
При замене в выражении ws.Range("A2") буквенного значения A на цифру или на значение переменной c - ws.Range("c & 2") программа выдает ошибку.    
Добавил указание на именование столбцов цифрами Application.ReferenceStyle = xlR1C1.  
Но ошибка все равно осталась.  
Произвел замену на  
ws.Range(ws.Cells(1, c), ws.Cells(1, c)). Получилась достаточно длинная запись.    
Подскажите, пожалуйста, а есть ли еще способ заменить букву, обозначающую столбец диапазона на цифру или на значение переменной?
Передача данных из recordset
 
Уважаемые форумчане.  
Прошу Вас помочь разобраться со следующей ситуацией.  
1 Передаем на лист из recordset данные.  
Получаем таблицу  
   
Исполнитель  
Иванов  
Петров  
Сидоров  
Иванов  
Петров  
 
2. Ставим в Excel фильтр по фамилии Сидоров, получаем видимую строку  
Исполнитель  
Сидоров  
 
обновляем recordset, фамилия Сидоров заменяется на фамилию Иванов  
Исполнитель  
Иванов  
 
Т.е. данные из recordset вставляются в первую отфильтрованную строку, а надо во вторую строку листа (ячейку “J2”). Так чтобы при включенном фильтре построчно обновились данные Иванов на Иванов, Петров на Петров, Сидоров на Сидоров. Чтобы строка с фамилией Сидоров осталась без изменений. Как это сделать?  
 
Sub pr()  
 
Dim cn As New ADODB.Connection  
   Dim cm As New ADODB.Command  
   Dim rs As New ADODB.Recordset  
   Dim fldLoop As Field  
Dim i As Integer  
Dim ws As Worksheet  
Set ws = Sheets(1)  
       Application.ScreenUpdating = False  
       Application.Calculation = xlCalculationManual  
 
   cn.Provider = "Microsoft.Jet.OLEDB.4.0"  
   cn.ConnectionString = "Data Source = D:\Книга3; Extended Properties=Excel 8.0;"""  
   cn.Open  
   cm.ActiveConnection = cn  
    cm.CommandText = "SELECT Исполнитель FROM [Лист1$]"
   rs.Open cm  
Do While Not rs.EOF  
           rs.MoveNext  
ws.Range("J" & 2).CopyFromRecordset rs  
         
       Loop  
 
   rs.Close  
   cn.Close  
       Application.Calculation = xlAutomatic  
       Application.ScreenUpdating = True  
End Sub
Получить адрес ячейки до нажатия Enter
 
Уважаемые форумчане!  
 
Прошу Вас помочь разобраться в такой ситуации.  
Создан новый лист Excel. Курсор установлен на ячейку с адресом A1.  
Варианты действий оператора:  
1. Нажимаем Enter. Курсор переходит из ячейки A1 на ячейку A2.  
Или  
2. Нажимаем на стрелочку. Курсор переходит  из ячейки A1 на ячейку B1.  
 
Как получить значение адреса ячейки A1 до нажатия Enter или стрелочки?
Получение адреса ячейки
 
Уважаемые форумчане.  
Прошу Вас подсказать такого рода информацию.  
Есть сочетание    
 
For Each iCell In Range("AA3003:AA3005")  
   
Допустим искомое значение iCell найдено в ячейке AA3004. Как получить адрес этой ячейки? Или как к ней можно обратиться?
Как сделать активной новую Книгу?
 
Уважаемые форумчане.  
Есть такой код:  
1. Открыта Книга113  
2. С помощью кода создаем новую книгу Книга1. Здесь она еще не сохранена на диске, а находится в памяти ПК.  
3. В ячейку Книги1 вносим данные.  
4. Сохраняем Книгу1 на диске.  
5. Закрываем Книгу1.  
6. Удаляем Книгу1 с диска.  
7. Закрываем Excel, в котором была создана Книга1.  
 
Подскажите, пожалуйста, два вопроса.  
1. В пункте 2, где Книга1 еще не сохранена, есть ли возможность активации Книги113, затем активации Книги1. Т.е. здесь передача активации между книгами возможна.  
2. Пункт7 - как закрыть Excel, в котором создавалась Книга1, а Книга113 оставалась бы открытой. Здесь, видимо, тот же вопрос активации.  
 
Как Вы понимаете, действия с Книгой1 должны происходить в скрытом от пользователя режиме. Постоянно открыта только Книга113.  
 
Sub Кнопка1_Щелкнуть()  
Dim oExcel As New Excel.Application 'Запускаем Excel  
oExcel.Visible = True 'Делаем его видимым  
Dim oWbk As Excel.Workbook 'Создаем новую книгу Книга1  
Set oWbk = oExcel.Workbooks.Add()  
Dim oSheet As Excel.Worksheet  
Set oSheet = oWbk.Worksheets.Item("Лист1") 'Находим Лист1  
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"  
Dim oRange As Range 'Находим диапазон A1 в Книга1  
Set oRange = oSheet.Range("A1")  
oRange.Value = "Данные" 'вносим в него данные  
'сохраняем файл с новым названием в указанное место на диск  
'методом SaveAs  
oWbk.SaveAs "D:\Книга1.xls"  
oWbk.Close 'закрываем файл Книга1  
Kill "D:\Книга1.xls" 'удаляем файл Книга1 с диска  
‘oWbk.Quit?????????  
End Sub
Как обойти предупреждение Outlook при отправке диапазона по почте?
 
Уважаемые форумчане.  
Прошу Вашего совета.  
После отправки диапазона Excel 2003 с помощью Outlook 2003 появляется окно с предупреждением Outlook  о том, что Программа пытается отправить сообщение от вашего имени. Если вы этого не ожидаете, нажмите кнопку "Запретить", если ожидаете, нажмите кнопку "Разрешить".  
Каким способом преодолеть интервал задержки в отправке сообщения и игнорировать это предупреждение, т.е.установить значение всегда "Разрешить"?
счет строк диапазона с форматом текстовый
 
Уважаемые форумчане.  
Помогите, пожалуйста с таким вопросом.  
В столбце помещены цифры. Но формат установлен текстовый, т.к. перед цифрами с 1 до 9 нужно проставить ноль. 01213, 02213 и т.д.  
 
Dim rng As Range  
Dim Min As Variant, Max As Variant  
Dim I As Integer, nColumn As Integer, nRow As Integer  
   
 nRow = 1  
 nColumn = 1  
 With ActiveSheet.UsedRange  
MyUsedRange = .Address  
nUsedRows = .Rows.Count  
nUsedCols = .Columns.Count  
LastRow = .Rows(nUsedRows).Row  
lastCol = .Columns(nUsedCols).Column  
End With  
 
 Set rng = Range(Cells(lastCol, lastCol), Cells(LastRow, lastCol))  
     Max = rng.Cells(1)  
     For I = 1 To rng.Count  
         If rng.Cells(I) > Max Then  
            Max = rng.Cells(I)  
         End If  
      Next I  
   Max1 = Left(Max, Len(Max) - 3) 'Левая часть номера  
   Max1 = Max1 + 1 'к номеру прибавить 1  
   Max2 = Right(Max, 3) 'Код исполнителя - правая часть номера  
   Max = Max1 & Max2 'новый номер СП  
   Debug.Print Max  
     Cells(LastRow + 1, nRow) = CStr(Max)  
 
Когда в очередной пустой строке стоит формат общий или числовой nUsedCols = .Columns.Count считает правильно количество строк диапазона.  
А если в очередной пустой строке стоит формат текстовый, а в ячейке ничего нет, то nUsedCols = .Columns.Count считает ее как ячейку диапазона.  
Как сделать так, чтобы считались только те ячейки, которые заполнены. А формат столбца оставался текстовым?
как передать аргумент?
 
Уважаемые форумчане.  
Программа находит в столбце А:А несколько последовательно идущих одинаковых записей код и в столбце С и, соответственно, записывает текущую дату.    
 
Надо вот эту часть кода:  
 
       m = 0  
       Do  
       If poz <> poz.Offset(m, 0) Then Exit Do  
                   poz.Offset(m, 2) = Date + k  
                   m = m - 1  
         
       Loop  
           poz.Offset(0, 2).Select  
 
сделать отдельной программой или функцией, чтобы вызывать ее необходимое количество раз.  
Подскажите пожалуйста, как передать в функцию в качестве аргумента poz.Offset(m, 0)  
 
Например, вот так  
         
Public Function prov(poz1)  
       m = 0  
       Do  
       If poz1 <> poz1.Offset(m, 0) Then Exit Do  
                   poz1.Offset(m, 2) = Date + k  
                   m = m - 1  
         
       Loop  
       End Function
Выделение строк цветом
 
Уважаемые форумчане.  
Есть программы выделения строк цветом  
 
Код:  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Cells.Interior.ColorIndex = xlNone  
 
With Target.EntireRow.Interior  
.ColorIndex = 37  
.Pattern = xlGray25  
.PatternColorIndex = 24  
End With  
End Sub  
или  
 
Код:  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
If Target.Cells.Count <= 2500 Then  
' Проверка на количество ячеек. Слишком большое количество  
' выделенных ячеек замедляет работу, т.к. при выполнении макроса  
' определяется адрес каждой выделенной ячейки.  
ActiveSheet.Cells.FormatConditions.Delete  
Dim RSMin As Integer  
Dim CSMin As Integer  
Dim RSMax As Integer  
Dim CSMax As Integer  
' ---------начало блока------------  
For Each Target In Selection.Cells  
If RSMin = 0 Then RSMin = Target.Row  
If CSMin = 0 Then CSMin = Target.Column  
If Target.Row < RSMin Then  
RSMin = Target.Row  
ElseIf Target.Row > RSMax Then  
RSMax = Target.Row  
End If  
If Target.Column < CSMin Then  
CSMin = Target.Column  
ElseIf Target.Column > CSMax Then  
CSMax = Target.Column  
End If  
Next  
'--------конец блока--------------  
' определяются максимальные и минимальные  
' срока и столбец выделенного блока  
'--------начало блока-------------  
With Range(Cells(RSMin, 1), Cells(RSMax, 256))  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
'--------конец блока---------------  
' выделяются сроки выделенного диапазона  
'--------начало блока---------------  
'With Range(Cells(1, CSMin), Cells(65000, CSMax))  
'.FormatConditions.Delete  
'.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
'.FormatConditions(1).Interior.ColorIndex = 36  
'End With  
'--------конец блока---------------  
' выделяются столбцы выделенного диапазона  
'--------начало блока---------------  
With Range(Cells(RSMin, CSMin), Cells(RSMax, CSMax))  
.FormatConditions.Delete  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 34  
End With  
'--------конец блока---------------  
' выделяется выделенный диапазон  
Else  
End If  
End Sub  
При этом изменяется цвет (как свойство) ячейки. И не работает режим копирование/вставка.  
 
Возможны ли такие действия:    
1. Кликаем на ячейку (активация) .  
2. "Подсвечиваетя" вся строка.  
3. Копируем значение из выделенной ячейки и вставляем в другую ячейку. Или не только значение, но и все параметры ячейки которыми она обладала до подсвечивания строки?  
 
Т.е. раскраска листа должна оставаться неизменной. А подсвечивание должно помогать только ориентироваться в записях и давать возможность работать в режиме копирование/вставка.
Копирование диапазона из закрытых файлов в другой директории
 
Уважаемые форумчане!  
Есть примерчик копирования диапазонов данных из разных закрытых файлов, но находящихся в одной папке с файлом, куда копируются данные.  
Подскажите, пожалуйста, как копировать диапазоны данных из файлов, которые находятся в другой директории (на сервере)?
Копирование диапазона с помощью макроса
 
Уважаемые форумчане!  
Прошу Вас помочь разобраться в следующей ситуации.  
Требуется выполнить передачу данных (скопировать с помощьюVBA) из нескольких диапазонов ячеек листа Настройка закрытого или открытого файла Источник.xls в несколько диапазонов (не совпадающих по месту расположения на листе с предыдущими диапазонами файла Источник.xls ) на лист Настройка файла 2.xls. Для этого написан макрос.    
Если кнопка и условия написаны на первом листе файла 2.xls, а данные копируются на второй лист, то копирование работает правильно. Если кнопку, условия и копирование данных осуществлять на один лист, то в столбцах H и J самопроизвольно меняется формат данных. Как сделать так, чтобы кнопка, условия и данные были на одном листе. И формат самопроизвольно не менялся?
Страницы: 1
Наверх