2016-08-19 5 views
2

Привет, вы можете помочь мне с кодом в VBA? Я хотел бы создать файл журнала из текста в ячейках («C2» и «C3» + дата и время), когда я нажимаю кнопку «zadat» СпасибоVBA создать файл журнала

Мой код для реализации является:

Модуль 1

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
Sub zadat() 

Dim reg, check As String 
Dim i, j, done As Integer 
reg = Cells(2, 3).Value 
check = Cells(4, 3).Value 

If check = "True" Then 

    i = 2 
    j = 1 
    done = 0 
    Do While Sheets("data").Cells(i, j) <> "" 
     If Sheets("data").Cells(i, j) = reg Then 
      vytisteno = ZkontrolovatAVytiskoutSoubor() 

      done = Sheets("data").Cells(i, j + 3) 
      done = done + 1 
      Sheets("data").Cells(i, j + 3) = done 
      Exit Do 
     End If 
     i = i + 1 

    Loop 
Else 
    MsgBox ("Opravit, špatný štítek!!!") 
End If 

Cells(3, 3) = "" 

Cells(3, 3).Select 
ActiveWindow.ScrollRow = Cells(1, 1).row 


End Sub 

Модуль 2:

Option Explicit 
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (_ 
ByVal hwnd As Long, _ 
ByVal lpOperation As String, _ 
ByVal lpFile As String, _ 
ByVal lpParameters As String, _ 
ByVal lpDirectory As String, _ 
ByVal nShowCmd As Long) As Long 

Public Function PrintThisDoc(formname As Long, FileName As String) 
On Error Resume Next 
Dim x As Long 
x = ShellExecute(formname, "Print", FileName, 0&, 0&, 3) 
End Function 

Public Function ZkontrolovatAVytiskoutSoubor() As Boolean 
Dim printThis 
Dim strDir As String 
Dim strFile As String 
strDir = "W:\Etikety\Štítky\Krabice\Testy" 
strFile = Range("C2").Value & ".lbe" 
If Not FileExists(strDir & "\" & strFile) Then 
    MsgBox "soubor neexistuje!" 
ZkontrolovatAVytiskoutSoubor = False 
Else 
printThis = PrintThisDoc(0, strDir & "\" & strFile) 
ZkontrolovatAVytiskoutSoubor = True 
End If 
End Function 

Private Function FileExists(fname) As Boolean 
    'Returns TRUE if the file exists 
    Dim x As String 
    x = Dir(fname) 
    If x <> "" Then FileExists = True _ 
     Else FileExists = False 
End Function 
+0

Добро пожаловать в SO. Не могли бы вы сообщить нам, в чем проблема с кодом, которым вы поделились? Любые ошибки? Или код не дает ожидаемых результатов? Пожалуйста, укажите немного более четко – Siva

+0

Я хотел бы создать код для регистрации ячеек C2 и C3, нажав «zadat». (прочитайте текст из ячеек C2 и C3 и напишите в значения файла журнала в ячейках с датой времени перед этим значением из ячеек), я бы выполнил этот код регистрации, чтобы он функционировал. –

+0

что-то вроде этого (файл журнала): Дата - Время - Значение C2 - Значение C3 –

ответ

3

Попробуйте это. Ниже код будет создать новый файл журнала каждый раз, когда

Public Function LogDetails() 
    Dim fso As Object 
    Set fso = CreateObject("Scripting.FileSystemObject") 

    Dim logFile As Object 
    Dim logFilePath As String 
    Dim logFileName As String 

    'Replace 'TestLog' with your desired file name 
    logFileName = "TestLog" & ".txt" 
    myFilePath = "C:\Users\..\Desktop\" & logFileName 'Modify the path here 

    If fso.FileExists(myFilePath) Then 
    Set logFile = fso.OpenTextFile(myFilePath, 8) 
    Else 
    ' create the file instead 
    Set logFile = fso.CreateTextFile(myFilePath, True) 
    End If 

    logFile.WriteLine "[" & Date & " " & Time & "] " & Worksheet("yoursheetnamehere").Cells(2, 3) & " " & Worksheet("yoursheetnamehere").Cells(3, 3) 

    logFile.Close ' close the file 
End Function 
+0

Спасибо, все в порядке но эта часть кода ничего не делает logFile.WriteLine "[" & Date & "" & Time & "]" & Cells (2, 3) & "" & Cells (3, 3) мой лист имеет имя «Kontrola», если помощь вы и ячейки, которые будут писать, - это C2 и C3 на этом листе. –

+0

@ FiínekCahů Вы не должны ожидать, что ответ переполнения стека будет 100% с учетом вашей точной таблицы. Вы должны иметь возможность изменить этот ответ в соответствии с вашими потребностями. Stack Overflow - это не бесплатная служба кодирования, которая отправляет конечные продукты. –

5

Если вы не хотите использовать FSO, есть простое решение, используя только VBA операторы: Open, Print # и Close:

Sub Log2File(Filename As String, Cell1, Cell2) 
    Dim f As Integer 
    f = FreeFile 
    Open Filename For Append Access Write Lock Write As #f 
    Print #f, Now, Cell1, Cell2 
    Close #f 
End Sub 

Я поместил имя файла и ячейки refs как аргументы sub для цели повторного использования. Я также использую форматирование по умолчанию (local), но это можно легко изменить. Обратите внимание, что вам не нужно проверять наличие файла, он будет создан, если он не существует.

Смежные вопросы