Viva Dave,
1ª Questão: os seguintes rotinas devolvem o caminho total para abrir e/ou gravar ficheiros, devem ser colocados num módulo, no final tem um procedimento de teste para ensaio.
Option Compare Database
' Função para abrir a API de OpenFileName or SaveFileName
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As FILENAME) As Long
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pSavefilename As FILENAME) As Long
' Definição de variavel para a API OpenFileName or SaveFileName
Public Type FILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
' Constantes para a API OpenFileName or SaveFileName
Global Const ahtOFN_READONLY = &H1
Global Const ahtOFN_OVERWRITEPROMPT = &H2
Global Const ahtOFN_HIDEREADONLY = &H4
Global Const ahtOFN_NOCHANGEDIR = &H8
Global Const ahtOFN_SHOWHELP = &H10
' You won't use these.
'Global Const ahtOFN_ENABLEHOOK = &H20
'Global Const ahtOFN_ENABLETEMPLATE = &H40
'Global Const ahtOFN_ENABLETEMPLATEHANDLE = &H80
Global Const ahtOFN_NOVALIDATE = &H100
Global Const ahtOFN_ALLOWMULTISELECT = &H200
Global Const ahtOFN_EXTENSIONDIFFERENT = &H400
Global Const ahtOFN_PATHMUSTEXIST = &H800
Global Const ahtOFN_FILEMUSTEXIST = &H1000
Global Const ahtOFN_CREATEPROMPT = &H2000
Global Const ahtOFN_SHAREAWARE = &H4000
Global Const ahtOFN_NOREADONLYRETURN = &H8000
Global Const ahtOFN_NOTESTFILECREATE = &H10000
Global Const ahtOFN_NONETWORKBUTTON = &H20000
Global Const ahtOFN_NOLONGNAMES = &H40000
' New for Windows 95
Global Const ahtOFN_EXPLORER = &H80000
Global Const ahtOFN_NODEREFERENCELINKS = &H100000
Global Const ahtOFN_LONGNAMES = &H200000
'Função para a abrir a Cx_Diálog

pen_File de ficheiros CSV
Function Open_File_Dialog_Box(Titulo As String) As String
Dim ofn As FILENAME
Dim ficheiro
'Inicializa variáveis
ofn.lStructSize = Len(ofn)
'ofn.hwndOwner = formulario.Hwnd
'ofn.hInstance = App.hInstance
ofn.lpstrFilter = "Text Files (*.csv)" + Chr$(0) + "*.csv" + Chr$(0) 'Define o filtro dos tipos de ficheiros
ofn.lpstrFile = Space$(254) 'Ficheiro por default que vai abrir
ofn.nMaxFile = 255 'Penso que define o tam máx do nome do ficheiro
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = "C:\" 'Directoria por defeito
ofn.lpstrTitle = Titulo 'Título da janela
ofn.Flags = 0
ficheiro = GetOpenFileName(ofn)
If (ficheiro) Then
Open_File_Dialog_Box = Trim$(ofn.lpstrFile)
Else
Open_File_Dialog_Box = ""
End If
End Function
'Função para a abrir a Cx_Diálog

pen_Save_Dialog_Box de ficheiros CSV
Function Open_Save_Dialog_Box(Titulo, directoria, Optional nome_ficheiro As String) As String
Dim ofn As FILENAME
Dim caminho
'Inicializa variáveis
ofn.lStructSize = Len(ofn)
'ofn.hwndOwner = formulario.hWnd
'ofn.hInstance = App.hInstance
ofn.lpstrFilter = "Microsoft Excel 97 (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) 'Define o filtro dos tipos de ficheiros
If IsNull(nome_ficheiro) Or nome_ficheiro = "" Then
ofn.lpstrFile = Space$(254)
Else
ofn.lpstrFile = nome_ficheiro & Space$(254 - Len(nome_ficheiro)) 'Nome do ficheiro por default
End If
ofn.nMaxFile = 255 'Penso que define o tam máx do nome do ficheiro
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = directoria 'Directoria por defeito
ofn.lpstrTitle = Titulo 'Título da janela
ofn.Flags = ahtOFN_FILEMUSTEXIST Or ahtOFN_HIDEREADONLY Or ahtOFN_NOCHANGEDIR
caminho = GetSaveFileName(ofn)
If (caminho) Then
Open_Save_Dialog_Box = RTrim(ofn.lpstrFile)
Else
Open_Save_Dialog_Box = ""
End If
End Function
Sub teste()
MsgBox Open_File_Dialog_Box("teste")
MsgBox Open_Save_Dialog_Box("Teste1", "C:\", "TESTANDO.CSV")
End Sub
Quanto à 2ª questão verifique se a seguinte instrução funciona (eu ainda uso o Office 97 em casa):
Application.SetOption "Show Status Bar", True
Application.SetOption "Confirm Action Queries", 0
Application.SetOption "Confirm Record Changes", 0
Cmpt