Important:

Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance.

Views

VBA - Definindo a impressora

Alguns dos nossos relatórios, listas, tabelas, textos, comentários podem ser dirigidos diretamente para algumas impressoras, sem que necessariamente sejam úteis, legíveis ou apropriados para outras.

Podemos definir a impressão de certos relatórios por usuário, impedindo que a impressão ocorra numa impressora colorida por exemplo.

Talvez queira enviar certos relatórios diretamente para uma impressora instalada como driver conversor de PDF... Mas...Como?

Sub PrintToPDF()
        Dim originalPrinter

        'MsgBox "A impressora ativa no momento é: " & Chr(13) & Chr(13) & Application.ActivePrinter

        Let originalPrinter = Application.ActivePrinter

        'Application.ActivePrinter = "CutePDF Writer on SERV2:"
        'ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:='"CutePDF Writer on SERV2:",                 Collate:=True

        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer on SERV2:",                 Collate:=True

        'Let folder = Environ("Temp")

        Let  Filename = Sheet2.Cells(30, 15).Value & ".pdf"
        Let folder = Environ("Temp")
        Let newHour = Hour(Now())
        Let newMinute = Minute(Now())
        Let newSecond = Second(Now()) + 1
        Let waitTime = TimeSerial(newHour, newMinute, newSecond)

        Application.Wait waitTime

        SendKeys Filename

        'MsgBox "A impressora ativa no momento é: " & Chr(13) & Chr(13) & Application.ActivePrinter

        Let  Application.ActivePrinter = originalPrinter

        'MsgBox "A impressora ativa no momento é: " & Chr(13) & Chr(13) & Application.ActivePrinter
End Sub

Mas talves deseje que o usuário escolha a impressora a usar:

        Let nOpt = Application.Dialogs(xlDialogPrinterSetup).Show

        If nOpt = True Then   
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Else
            Exit Sub
        End If

André Luiz Bernardes
Google Talk: bernardess@gmail.com
Skype: inanyplace
MSN: bernardess@gmail.com
logo_delicious.gif andrelbernardes

VBA Access - Erro 3052

O número de bloqueios de compartilhamento de arquivos foi excedido.

Hello folks!

Vez por outra somos surpreendido por alguns erros nas nossas aplicações MS Access, os quais não fazemos ideia do que sejam (vá se acostumando).

Um dos erros que nos surpreendem, pegando-nos desprevenidos, é o erro 3052 ele aparece quando o número de bloqueios de compartilhamento de arquivos foi excedido, o valor padrão é 9.500. Sem nos apercebermos disso, excedemos o número máximo de bloqueios permitidos em um recordset, este limite é especificado pela definição MaxLocksPerFile no Registro do sistema.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet
4.0\MaxLocksPerFile

Como eliminá-lo? Aumente a entrada de registro MaxLocksPerFile, o valor padrão pode ser alterado por meio da edição do Registro com Regedit.exe ou com o método SetOption.

Application.DBEngine.SetOption dbMaxLocksPerFile, <NumLocks>

Altere o <NumLocks> para 1000000 ou algo maior do que 10000 (um milhão poupará você de aplicar esse truque mais vezes) e o erro irá embora. Certifique-se de colocar a linha acima na sua subroutina, e evoque-a a partir do seu FORM principal.

Outros fatores que podem fazer o seu aplicativo atingir este limite são:

  • quantidade de memória disponível
  • tamanho das linhas no recordset
  • restrições no sistema operacional da rede

Mais detalhes: Inicializando o driver de mecanismo de banco de dados do Microsoft Jet 3.5
                       Personalizando configurações do Registro do Windows para Microsoft Jet


Pois é, desse erro você já se livrou .  .  .  Mas .  .  . outros virão...


André Luiz Bernardes

VBA Access - colocando título na sua aplicação

Mostre que suas aplicações MS Access são organizadas por inserir no título delas um texto que demonstre:

- O nome da aplicação
- A ação efetuada no momento por sua aplicação
- O nome da sua empresa
- Código do processamento sendo efetuado no momento.

Pode usar a funcionalidade para inúmeras coisas, aproveite!

' Digite num novo módulo:

Option Explicit
Option Compare Database

Private Declare Function SetWindowText _
                Lib "user32" _
                Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Public Sub SetFormTitle(frm As Form, TitleText As String)
    Dim fhWnd As Long
    fhWnd = frm.hwnd
    SetWindowText fhWnd, TitleText
End Sub

'Copie a SUB abaixo dentro do formulário, no evento OnOpen.
Private Sub Form_Open(Cancel As Integer)
    SetFormTitle Me, ".: A&A - In Any Place - Título da minha aplicação!"
End Sub



VBA Access - Exportando relatórios para MS Word, MS Excel e Snapshot View.

Olá a todos...

Como posso exportar dados já formatados em um relatório direcioando-os para o Word, Excel ou outro formato?

A função abaixo explora 2 formas diferentes de fazer isso...

Ao exportar para o MS Excel utiliza o TransferSpreadsheet (TransferirPlanilha) Método TransferSpreadsheet (TransferirPlanilha)

Ao exportar para o MS Word e o padrão Snapshot utilizo o Método OutputTo (SaídaPara)
O método OutpuTo pode exportar informações para os seguintes padrões:

acFormatASP
acFormatDAP
acFormatHTML
acFormatIIS
acFormatRTF
acFormatSNP
acFormatTXT
acFormatXLS


Function ...
        If nOption = 6 Then
            If Not IsNull(Me.SelecRTF) Then
                DoCmd.OutputTo acOutputReport, nReport, acFormatRTF, RptName & ".rtf", True
            End If
           
            If Not IsNull(Me.SelecSNP) Then
                DoCmd.OutputTo acOutputReport, nReport, acFormatSNP, RptName & ".snp", True
            End If

            If Not IsNull(Me.SelecXLS) Then
                DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, nTbl1, RptName & ".xls", False, "ESN"
                DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, nTbl2, RptName & ".xls", False, "Supllier"
            End If
        End If
End

Perceba que uma importante característica de exportação para a planilha é o fato de fazê-lo a
partir de conteúdos diferentes (tabelas) para a mesma planilha.


Conheçam um Blog legal só de MS Access em: http://brzaccessdeveloper.blogspot.com/

André Luiz Bernardes
http://al-bernardes.sites.uol.com.br/

VBA Access - Distributing Access reports using email

Sub RunEmailDist()
Dim MyDB As Database, MyRecs As Recordset, MyName As String
Set MyDB = CurrentDb()
Set MyRecs = MyDB.OpenRecordset("emaildist")

Let MyName = InputBox("Entre o seu nome","RunEmailDist (CiM)", "Chris Mead (Extn 3841)")

MyRecs.MoveFirst
Do While Not MyRecs.EOF

If MyRecs!distname = Forms("F_ChooseEmail")!DistNameCombo Then
DoCmd.SendObject acSendReport, "Your budget report", acFormatRTF, MyRecs!SendTo, , , "Budget reports", _
"Please find attached your set of budget reports." & vbCrLF & MyName, 0
End If

MyRecs.MoveNext
Loop

MyRecs.Close
End Sub


André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

Bem vindos!

Este Blog servirá para que possamos aprender novas dicas e truques, bem como funcionalidades no uso do MS Access em todas as versões.

Sintam-se bem vindos e acolhidos para sugestões, aplicações e exemplos funcionais.

André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
brz.accessdeveloper@gmail.com



LinkWithinBrazilVBAAccessSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine