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

Страницы: 1
Свойства оптического диска средствами VBA, Получение данных о типе, свободном месте, занятом объёме и т.п. информации
 
Доброго времени суток!

Столкнулся с проблемой получения корректных данных по оптическим дискам посредством "GetDrive". А именно, при попытке получить данные по оптическим дискам неверно отображается свойство "TotalSize"
Код создаёт таблицу на листе со свойствами диска и, ниже, список файлов на нём и их свойства.


Однако, через стандартное окно свойств системы наблюдаем совсем другое:



Сам код выглядит следующим образом
Код
Sub getInfoDrive() 
    Dim fso As Object, t As String
    Dim myDrive As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set myDrive = fso.GetDrive(fso.GetDriveName(sFolder)) 'sFolder Public variable 
    'Set myDrive = fso.GetDrive("P:") ' test string
    Select Case myDrive.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable drive (USB/SDCard)"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
Cells(2, 1) = t
Cells(2, 2) = myDrive.VolumeName
Cells(2, 3) = myDrive.FileSystem
Cells(2, 4) = myDrive.TotalSize '  &vbCrLf
'Cells(2, 4) = myDrive.FreeSpace
Cells(2, 5) = myDrive.TotalSize - myDrive.AvailableSpace

    Application.Run "getInfoFolder"

End Sub
переменная sFolder пути файла задаётся диалоговым окном

Код
Sub GetFolderDialog_Shell()
    On Error Resume Next
    Dim objShellApp As Object, objFolder As Object, ulFlags As Integer
    Set objShellApp = CreateObject("Shell.Application")
    ulFlags = 20
    Set objFolder = objShellApp.BrowseForFolder(0, "Error", ulFlags, "*:\") '"
    sFolder = objFolder.Self.Path 'folder path -> variable

    If Err.Number <> 0 Then
        MsgBox "File not found!", vbInformation, "File Information Program"
    
    Else:
    Application.Run "getInfoDrive"
    Application.Run "GetSerialDisk"
    
    End If
End Sub

С некоторыми оптическими дисками информацию код выдаёт верно. Думал дело в UDF, но при анализе диска CD-R 0,7 Гб с UDF информация об объёмах показывается верная. То ли дело в сессиях записи/перезаписи, то ли ещё в чём-то... в общем пока не разобрался...
Подскажите, пожалуйста, в какую сторону здесь нужно "копать"?
ADO SQL INSERT INTO в другой Excel, Вставить данные из текущего файла в другой файл
 
документацию на Execute изучил, видел, что у Вас не хватает запятой, но добавляя её ничего не меняется, в Execute важен только CommandText, поэтому пришёл к выводу, что одна или две запятых не влияет результат... :)

Попробовал через ADODB.Command - эффект тот же...

Кстати, вы добавили ещё pConn.CursorLocation = 3 изначально его тоже не было, но и это не влияет
Также не влияет значение Options "-1" в Execute...  
ADO SQL INSERT INTO в другой Excel, Вставить данные из текущего файла в другой файл
 
Цитата
Андрей VG написал:
Предлагаете для исследования вопроса создать заинтересовавшимся самостоятельно?
Нет, создал для примера файлы.

Заметил, что изменения вносятся примерно через 1 (+/-) мин после завершения макроса, и файл снова в полном доступе.
Изменено: Sandero - 18.04.2020 18:26:32
ADO SQL INSERT INTO в другой Excel, Вставить данные из текущего файла в другой файл
 
Добрый день!
Сделал аналогичный запрос на изменение конкретной ячейки в другом файле .xlsm с общим доступом.
Проблема в том, что непосредственно после выполнения команды файл можно открыть только для чтения. Вычитал, что это происходит из-за того, что метод .Close() не выгружает файл из памяти, а лишь закрывает к нему открытое соединение.
При этом, обнаружилось, что в открытом только для чтения (изменённом) файле изменённая ячейка не изменена. Она меняется спустя некоторое время, предполагаю, что только после выгрузки из памяти файла, то есть, когда он становится доступным.
Кто-то сталкивался с такой проблемой? Можно ли как-то выгрузить файл из памяти после .Close() ?
Код
Public Sub TabNExchange()
    Dim pConn As Object, sName As String, sTabel As String, sSQL As String, sCommandText As String
    sName = Worksheets("Работник").Range("F9")
    sTabel = InputBox("Введите таб.N " & sName, 1)
    sCommandText = "UPDATE [TBN$] SET TabelN ='" + sTabel & "' WHERE Rabotnik ='" + sName & "'"
    Set pConn = CreateObject("ADODB.Connection")
    pConn.Open "DBQ=\\Server\FTP\rabtab.xlsm;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=0;"
    sSQL = sCommandText
    MsgBox (sSQL) 'проверяем строку запроса SQL
    pConn.Execute sSQL, 128
    pConn.Close
    Set pConn = Nothing
End Sub
Копирование листа активной книги в закрытую книгу макросом, Копирование листа или диапазона активной книги в закрытую книгу при условии отсутствия этого листа в ней
 
Добрый день!

Собственно, тема похожая есть, но там посоветовали создать отдельную ибо есть своя специфика.
Есть файл-шаблон в котором есть заготовки листов (диапазонов) для внесения данных. На главном листе формируется идентификатор (будущее имя новой книги).
При запуске макроса, на сервере в локалке создаётся файл xls с именем идентификатора, в который копируется часть информации с главного листа файла-шаблона.
Перед созданием необходимо убедится в отсутствии такого файла, а если он есть, действие по созданию заменяется на открытие уже существующего файла.
Вот эти действия я кое-как осуществил. Но теперь мне нужно, чтобы в этот файл из файла-шаблона можно было бы "догружать" либо листы либо диапазоны с листов, и, причём также с проверкой их существования. Если такой лист уже есть в этом файле, то макрос должен открыть лист без его замены. Если листа нет, то создать его или скопировать целиком из файла-шаблона. Аналогичные действия необходимо сделать с диапазонами на листах файла-шаблона, которые копируются в одноимённые листы.
То есть, алгоритм примерно такой: проверить существует ли лист, если да - открыть, если нет, скопировать. Если лист на который нужно скопировать только диапазон есть, то открыть этот лист, если нет, создать лист с аналогичным именем, и скопировать диапазон.
Книга в которую заносится информация затем сохраняется.
Внизу код проверки существования файла и создание из диапазона файла с заданным в ячейке именем и префиксом, если проверка показала что такого файла нет.
Подскажите пожалуйста, можно ли этот код видоизменить и где, чтобы он работал для  листов.

Код
Sub SearhFiles() 'Макрос поиска файла с именем и автоматическое его открытие при наличии
     On Error GoTo err_: Workbooks.Open "\\Server\FTP\Global\" & Range("F2") & ".xls": Exit Sub 
err_:     MsgBox "Нет такого файла!" 
Application.Run "DOC-Fish.xlsm!R_to_xls" 'Запуск макроса по созданию файла с именем 
End Sub  

Sub R_to_xls()     
Const Path = "\\Server\FTP\Global\"  'Объявляем путь для сохранен
Dim NameDate As String    'Вводим переменную для определения даты для имени файла     
Dim RepFileName As String 'Вводим переменную для имени файла     
NameDate = Format((Sheets("Расход").Range("Y1")), "yyyy-mm-dd") 'Указываем значение переменной даты для имени файла (хотя дата не создаётся почему-то в имени)     
RepFileName = "R-" & NameDate & ".xls"   'Указываем значение переменной всего имени файла        
Sheets("Расход").Select     
Range("O2:AB41").Select     
Range("O2:AB41").Activate     
Selection.Copy     
Workbooks.Add     
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _     
xlNone, SkipBlanks:=False, Transpose:=False     
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _     
SkipBlanks:=False, Transpose:=False     
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _         
SkipBlanks:=False, Transpose:=False     
Sheets("Лист1").Select     
Sheets("Лист1").Name = "R-" & NameDate     
ActiveWindow.Zoom = 100     
ActiveWorkbook.SaveAs FileName:=Path & RepFileName, FileFormat _  
   :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _    
     False, CreateBackup:=False 
End Sub

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

Код
Sub CopySheet()
Dim Ws As Worksheet
Set Ws = ActiveSheet
With Workbooks("\\Server\ftp\Global\" & Range("Q3") & ".xls")
Err.Clear
On Error Resume Next
.Worksheets.Add After:=.Worksheets(Sheets.Count)
If Err.Number = 0 Then ActiveSheet.Name = Ws.Name
Ws.Parent.Activate
Cells.Copy Destination:=.Worksheets(ActiveSheet.Name).Cells
End With
End Sub
Изменено: Sandero - 20.06.2019 17:35:39
Определить, есть ли лист в закрытой книге с заданным именем - VBA, если да то.....если нет то...
 
Добрый день!

Есть файл шаблон, содержащий "рыбу" документов на отдельных листах книги. Есть сервер в локальной сети, на который необходимо сохранять данные из упомянутого файла-шаблона (либо целиком листы, либо отдельные диапазоны из него) в отдельный файл с именем формируемым в файле-шаблоне на его главном листе. В создаваемый файл с уникальным именем (например, артикул товара) по мере необходимости должны добавляться листы-диапазоны из файла-шаблона.
Проверку на существование уже созданного отдельного файла для конкретного товара я кое-как слепил, но вот проверку наличия в нём уже созданных листов никак не получается.
Функция, предложенная SAS888, почему то всё время выдаёт "ЛОЖЬ" даже когда требуемый лист в файле есть. М.б. проблема в обработке расширения файла? Сработала функция предложенная Андрей VG. Но, если файла такого вообще нет, то последняя также выдаёт ЛОЖЬ, что немного дезинформирует пользователя (нет файла, а не листа).
Вопрос такой, можно ли выполнять проверку наличия листа именно макросом, а не функцией, и затем, при наличии листа, открывать книгу, и переходить на этот лист, а если нет листа, открыть книгу (а если её нет, то запустить имеющийся макрос создания книги), скопировать лист (или диапазон) в эту книгу из файла-шаблона? Буду очень признателен, никак не могу найти подходящее решение.
поиск и открытие файла эксель по названию из ячейки
 
Цитата
Hugo написал:
Я чего-то не понимаю?Если есть имя файла - то зачем искать? Взяли и открыли. Если ошибка - обработали.А искать может быть долго - если например файлов тысячи. Да и код с таким поиском больно длинный  - хватает ведь 3-х строк
Добрый день!
Попробовал ваш вариант, работает. Я правда добавил ещё запуск другого макроса по созданию файла с этим именем если его нет (т.е. если не выполнено первое условие)
Эксель при отсутствии файла выдаёт своё собственное сообщение
По нажатии "оК" появляется уже месседж из макроса.
М.б. это связано с версией экселя, у меня 2016, а тут код вроде для 2003 изначально, или это не имеет значения.
Можно ли убрать сообщение самого экселя?
Заранее благодарен!!
Код
Sub SearhFiles() 'Макрос поиска файла с именем и автоматическое его открытие при наличии
On Error GoTo err_: Workbooks.Open "\\Server\777\S\" & Range("F2") & ".xls": Exit Sub
err_:     MsgBox "Нет такого файла!"
Application.Run "DOC.xlsm!Upload" 'Запуск макроса по созданию файла с именем
End Sub
Как сделать копирование ячейки двойным нажатием?
 
Sanja, да всё работает.
Я шёл путём создания макроса по замене формата, текст которого подставлял в Ваш код, только конечно не допетрил, что надо без первой части - без Selection :)
Код
Range("A10").Select
    Selection.NumberFormat = "@"
End Sub

Благодарю за помощь!  
Изменено: Sandero - 27.02.2019 11:03:45
Как сделать копирование ячейки двойным нажатием?
 
magistor8, вряд ли, я не силён настолько в VB. Макрос записать и попытаться понять что в нём, еще мог бы, а написать код самому, увы... Но спасибо за помощь, все равно.  
Как сделать копирование ячейки двойным нажатием?
 
Sanja,  Добавил новый пример с объединением ячеек в А10. Меня пока интересует копирование в конкретную ячейку, но Ваш код весьма интересен и принят на заметку.

magistor8, заменил код. После изменения кода, числа копируются как числа, текст как текст. Теперь возникла другая проблема. Excel выдает "Неверный тип параметра. Приложение ME ожидало значение другого типа", так как целевая ячейка участвует в запросе Microsoft Query при обращении к другой таблице на сервере. По всей видимости ячейка должна быть отформатирована как текст. Решил проблему заданием форматирования в целевой ячейке "Текст", было "Общий". Но всё же хотел бы понять, как задать форматирование при копировании ячейки в коде? Как должен код выглядеть, чтобы, например, всегда копировалось как текст?
Сори, за не совсем корректную первоначальную задачу, сам не ожидал такого эффекта.
Изменено: Sandero - 26.02.2019 18:27:37
Как сделать копирование ячейки двойным нажатием?
 
Копирование со столбца F листа "Изделие", в ячейку А10 листа "Заказ"

И еще вопрос, в коде источником является целый столбец, номер которого указывается в строке Columns(6), как будет выглядеть источник - 1 ячейка?
Изменено: Sandero - 26.02.2019 16:21:46
Как сделать копирование ячейки двойным нажатием?
 
Добрый день!

Применил указанный здесь вариант копирования по двойному клику, малость доработал для копирования 1 ячейки с одного листа в одну и ту же ячейку другого листа, но...
свойства исходной ячейки также копируются в целевую ячейку, что не нужно.
Попытка запихать в код свойства специальной вставки не увенчалась успехом, если не сложно, подскажите, что добавить в код, чтобы копировалось исключительно значение ячейки, без свойств?
Да, если целевая ячейка объединённая, то код выдаёт ошибку, что действие не может быть завершено.
Изменено: Sandero - 26.02.2019 10:27:23
Генерация сочетаний чисел из различных ячеек таблицы, вывод таблицы этих сочетаний
 
Со словом ПИЦА несколько иная задача - изменение позиции символов и поиск всех возможных вариантов, мне же нужно получить уникальные сочетания числовых параметров, чтобы они располагались в последовательности на одном и том же месте.
То есть, последовательность всегда одна и та же А,Б,С,Д,Е, однако вместо А - может быть А1,А2,А3... и т.д. в зависимости от того сколько чисел расположено в столбце ответственном за этот параметр.
Цитата
PowerBoy пишет: Всех проще запросом ADO:
Не понял способ, можно поподробнее описать?
Генерация сочетаний чисел из различных ячеек таблицы, вывод таблицы этих сочетаний
 
Прошу Вас помочь в решении следующей задачи!

Есть таблица исходных параметров (А,Б,С,Д и т.д.) каждый из которых может иметь некоторое конечное число вариантов значений. Например А=10, 20, 30; Б = 1,0, 2,0 и т.д. Значения параметров записаны в столбец под обозначением самого параметра.

Цель -
1. Составить (сгенерировать) все возможные варианты сочетаний этих параметров и вывести их в виде таблицы на этом же, либо на отдельном листе. При этом в комбинировании участвуют все параметры указанные в исходной таблице, то есть, если в таблице 4 параметра, то одна из комбинаций параметров, должна содержать 4 числа - по одному от каждого параметра. То есть, комбинация не должна содержать чисел меньше, чем число параметров.
Комбинации записываются построчно. Каждая комбинация уникальна.
Например:
10__1,0__2,9__3,6
10__1,2__2,9__3,6
20__1,0__2,9__3,6
20__1,2__2,9__3,6

2. Одновременно, либо после составлению/я комбинаций, в крайнем правом столбце, проводится расчет по определенной формуле, исходя из полученной комбинации параметров. Например, =А+Б*С/Д
Пример прилагается.
Заранее благодарю, и надеюсь на Вашу помощь.

P.S. честно искал похожее на форуме, не нашел...
Страницы: 1
Наверх