Thread View: pl.comp.bazy-danych.msaccess
5 messages
5 total messages
Started by Kali
Sat, 20 Mar 2021 05:50
Hyperlink do poszczególnych formularzy w VBA
Author: Kali
Date: Sat, 20 Mar 2021 05:50
Date: Sat, 20 Mar 2021 05:50
13 lines
1890 bytes
1890 bytes
Witam
Mam pliki firmowe dla poszczególnych lat: 2021.mdb, 2020.mdb, 2019.mdb, 2018.mdb ….)
Chciałem zrobić hyperlink do poszczególnych formularzy w kodzie VB.
Kod:
Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb")
Działa ale jak dostać się np. do formularza np. Firmy
Nic nie działa:
Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb\Form\Firmy") czy podobne nie działają.
Umiem to zrobić z poziomu właściwości lecz jak to zrobić przez VB.
Z VB mogę wpisać przez InputBox odpowiedni rok i chcę aby działał link do odpowiedniego formularza np. „Firmy” czy raportu.
Jak mi ktoś może podpowiedzieć polecam się.
SK
Re: Hyperlink do poszczególnych formularzy w VBA
Author: Zbigniew Bratko
Date: Sat, 20 Mar 2021 15:24
Date: Sat, 20 Mar 2021 15:24
23 lines
2147 bytes
2147 bytes
W dniu 20.03.2021 o 06:50, Kali pisze:
> Witam
> Mam pliki firmowe dla poszczególnych lat: 2021.mdb, 2020.mdb, 2019.mdb, 2018.mdb ….)
> Chciałem zrobić hyperlink do poszczególnych formularzy w kodzie VB.
>
> Kod:
> Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb")
> Działa ale jak dostać się np. do formularza np. Firmy
> Nic nie działa:
> Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb\Form\Firmy") czy podobne nie działają.
> Umiem to zrobić z poziomu właściwości lecz jak to zrobić przez VB.
> Z VB mogę wpisać przez InputBox odpowiedni rok i chcę aby działał link do odpowiedniego formularza np. „Firmy” czy raportu.
> Jak mi ktoś może podpowiedzieć polecam się.
> SK
>
Popatrz na przykład http://access.mvps.org/access/forms/frm0034.htm
--
Pozdrawiam
Zbigniew Bratko
accdb.pl
gps.accdb.pl
Re: Hyperlink do poszczególnych formularzy w VBA
Author: Kali
Date: Sun, 21 Mar 2021 12:46
Date: Sun, 21 Mar 2021 12:46
10 lines
1894 bytes
1894 bytes
Witam
Ten kod co mi wysłałeś to trochę za trudne jak dla mnie, jeszcze posiedzę ale to nie moja liga, trochę Zbyszek znasz moje możliwości.
Myślałem, że coś jest prostszego – ścieżka do pliku i wymieniony konkretny formularz.
Jak wcześniej mnie naprowadziłeś:
CreateObject("Shell.Application").Open "C:\Users\User\Documents\2021.mdb" + konkretny formularz np. Firmy
Lub
Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb") + konkretny formularz
Ten kod trochę ponad moje możliwości, prawdopodobnie należy zamienić ten kod user64, a gdzie ściezka??? To za skomplikowane na moje możliwości ale dzięki jeszcze pomyśle.
Sławek
Re: Hyperlink do poszczególnych formularzy w VBA
Author: Zbigniew Bratko
Date: Sun, 21 Mar 2021 15:12
Date: Sun, 21 Mar 2021 15:12
173 lines
7148 bytes
7148 bytes
W dniu 21.03.2021 o 13:46, Kali pisze:
> Witam
> Ten kod co mi wysłałeś to trochę za trudne jak dla mnie, jeszcze posiedzę ale to nie moja liga, trochę Zbyszek znasz moje możliwości.
> Myślałem, że coś jest prostszego – ścieżka do pliku i wymieniony konkretny formularz.
> Jak wcześniej mnie naprowadziłeś:
> CreateObject("Shell.Application").Open "C:\Users\User\Documents\2021.mdb" + konkretny formularz np. Firmy
> Lub
> Application.FollowHyperlink ("C:\Users\User\Documents\2021.mdb") + konkretny formularz
Jakby to było takie proste, jak piszesz, to Dev Ashish by nie
komplikował sprawy.
>
> Ten kod trochę ponad moje możliwości, prawdopodobnie należy zamienić ten kod user64, a gdzie ściezka??? To za skomplikowane na moje możliwości ale dzięki jeszcze pomyśle.
Wywołanie funkcji jest następujące:
fOpenRemoteForm "Dysk:\TwójFolder\TwojaBaza.accdb", "TwojFormularz",
SW_NORMAL
Mój Access 16 w ver. 32-bit przyjął kod bez "zmrużenia oka". Co prawda
po wywołaniu występował błąd nr 91, ale dało się to naprawić.
Przetestuj poniższy kod z poziomu formularza:
Option Compare Database
Option Explicit
'************ Code Start *************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
#If VBA7 Then
Private Declare PtrSafe Function apiSetForegroundWindow Lib "user32" _
Alias "SetForegroundWindow" _
(ByVal hwnd As LongPtr) _
As Long
Private Declare PtrSafe Function apiShowWindow Lib "user32" _
Alias "ShowWindow" _
(ByVal hwnd As Long, _
ByVal nCmdShow As LongPtr) _
As Long
#Else
Private Declare Function apiSetForegroundWindow Lib "user32" _
Alias "SetForegroundWindow" _
(ByVal hwnd As Long) _
As Long
Private Declare Function apiShowWindow Lib "user32" _
Alias "ShowWindow" _
(ByVal hwnd As Long, _
ByVal nCmdShow As Long) _
As Long
#End If
Private Const SW_MAXIMIZE = 3
Private Const SW_NORMAL = 1
'_______________________________________________
'Otwarcie formularza innej bazy w widoku normalnym
Private Sub btnOpenForm_Click()
fOpenRemoteForm "c:\tmp\aaa.accdb", "TwojFormularz", SW_NORMAL
End Sub
'___________________________________________
Function fOpenRemoteForm(strMDB As String, _
strForm As String, _
Optional intView As Variant) _
As Boolean
Dim objAccess As Access.Application
Dim lngRet As Long
On Error GoTo fOpenRemoteForm_Err
If IsMissing(intView) Then intView = acViewNormal
If Len(Dir(strMDB)) > 0 Then
Set objAccess = New Access.Application
With objAccess
lngRet = apiSetForegroundWindow(.hWndAccessApp)
lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
'the first call to ShowWindow doesn't seem to do anything
Rem lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
' lub okno Accessa zmaksymalizowane
lngRet = apiShowWindow(.hWndAccessApp, SW_MAXIMIZE)
.OpenCurrentDatabase strMDB
.DoCmd.OpenForm strForm, intView
' niestety, u mnie warunek Len(.CurrentDb.Name)
' powoduje błąd po zamknięciu otwartego Access
'---------------------------
'Runtime Error
'---------------------------
'Error#: 91
'Object variable or With block variable not set
'---------------------------
'OK
'---------------------------
Rem Do While Len(.CurrentDb.Name) > 0
Rem DoEvents
Rem Loop
' Moja poprawka - przechwycenie błędów m.in. nr 91
On Error Resume Next
Do
IsObject (.CurrentDb.Name)
If Err.Number <> 0 Then
Err.Clear
Exit Do
End If
DoEvents
Loop
On Error GoTo 0
End With
End If
fOpenRemoteForm_Exit:
On Error Resume Next
objAccess.Quit
Set objAccess = Nothing
Exit Function
fOpenRemoteForm_Err:
fOpenRemoteForm = False
Select Case Err.Number
Case 7866:
'mdb is already exclusively opened
MsgBox "The database you specified " & _
vbCrLf & strMDB & vbCrLf & _
"is currently open in exclusive mode. " & vbCrLf _
& vbCrLf & "Please reopen in shared mode and try again", _
vbExclamation + vbOKOnly, "Could not open database."
Case 2102:
'form doesn't exist
MsgBox "The Form '" & strForm & _
"' doesn't exist in the Database " _
& vbCrLf & strMDB, _
vbExclamation + vbOKOnly, "Form not found"
Case 7952:
'user closed mdb
fOpenRemoteForm = True
Case Else:
MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description, _
vbCritical + vbOKOnly, "Runtime error"
End Select
Resume fOpenRemoteForm_Exit
End Function
'************ Code End *************
W razie kłopotów pisz co jest nie tak.
--
Pozdrawiam
Zbigniew Bratko
accdb.pl
gps.accdb.pl
Re: Hyperlink do poszczególnych formularzy w VBA
Author: Kali
Date: Mon, 22 Mar 2021 20:14
Date: Mon, 22 Mar 2021 20:14
32 lines
3179 bytes
3179 bytes
Witam No i udało się działa, choć dochodzę do wniosku, że inaczej chyba powinienem to robić. Zrobiłem: Mam w bazie jakiś formularz startowy i stworzyłem (Przycisk136) zamieniłem nazwę na btnOpenForm . Wszedłem w kod Przycisku, wybrałem: Na górze tam gdzie mam (GENERAL) (Declarations) wkleiłem kod. Fragment mam następujący na czerwono, czyli z błędem: Private Declare Function apiSetForegroundWindow Lib "user32" _ Alias "SetForegroundWindow" _ (ByVal hwnd As Long) _ As Long Private Declare Function apiShowWindow Lib "user32" _ Alias "ShowWindow" _ (ByVal hwnd As Long, _ ByVal nCmdShow As Long) _ As Long Inerpretuje to tak, że chyba mam VB z nr 7 a inny wywala. Pytanie nr1 Tak z ciekawości co oznacza # np. przy if??? Zmieniłem kod Private Sub btnOpenForm_Click() fOpenRemoteForm "C:\Users\User\Documents\2021.mdb", "firmy", SW_NORMAL End Sub Na fOpenRemoteForm "C:\Users\User\Documents\2021.mdb", "firmy" bo otwierał mi w widoku Projekt. W planach mam przyciski który przeniesie do formularza (w którym jestem My.name) do wskazanej bazy przez InputBox. Po przemyśleniu dochodzę do innych wniosków, że kod powinienem chyba wkleić w nowy moduł nazwać go jakoś; OtwForm i zmienić przycisk136 na btnOpenForm. Dochodzę do wniosku, że powinno to działać we wszystkich formularzach i powielenie przycisku btnOpenForm. Pytanie2 To chyba bardziej lepsze rozwiązanie??? Z ostatniej chwili - przeczytałem post Zbyszka - Bardzo dużo mi pomogłeś i bardzo dziękuję . SK
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads